解決Ubuntu下MySQL遠端登入問題

Dictator丶發表於2019-01-08
  1. 修改mysql配置檔案。

     vim /etc/mysql/mysql.conf.d/mysqld.cnf
     找到 bind-address = 127.0.0.1 註釋掉,儲存退出。
    複製程式碼
  2. 允許所有使用者遠端登入

    • 在伺服器上通過root登入mysql,輸入密碼登入

        mysql -u root -p 
      複製程式碼
    • 修改 root 的 host 屬性為 %,

        use mysql;
        select host, user from user;
        update user set host = '%' where user = 'root'; 
      複製程式碼
  3. 在遠端客戶端Navicat上測試連線。

  4. 如果Navicat提示錯誤:

     1698- access denied for user 'root'@'ip'
    複製程式碼

    可能的原因為:

    在最近的Ubuntu安裝(當然也可能是其他安裝)中,MySQL預設使用了UNIX auth_socket plugin外掛。

    簡單來說這意味著當db_users使用資料庫時,將會通過系統使用者認證表進行認證。

    • 在伺服器的mysql上執行

        mysql> SELECT User, Host, plugin FROM mysql.user;
        
        +------------------+-----------------------+
        | User             | plugin                |
        +------------------+-----------------------+
        | root             | auth_socket           |
        | mysql.sys        | mysql_native_password |
        | debian-sys-maint | mysql_native_password |
        +------------------+-----------------------+
      複製程式碼

      根據查詢結果看出,root使用者在使用 auth_socket 外掛。

      解決方法:

      • 可以設定你的root使用者使用 mysql_native_password 外掛

          mysql> USE mysql;
          mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
          mysql> FLUSH PRIVILEGES;
          mysql> exit;
        複製程式碼
      • 用你的作業系統使用者名稱代替YOUR_SYSTEM_USER

          mysql> USE mysql;
          mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY '';
          mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
          mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
          mysql> FLUSH PRIVILEGES;
          mysql> exit;
        複製程式碼

      重啟資料庫

      如果使用了方法2,則需要通過作業系統的使用者名稱來連線資料庫。

參考:

  1. ERROR 1698 (28000): Access denied for user 'root'@'localhost'
  2. 解決 MySQL 的 ERROR 1698 (28000): Access denied for user 'root'@'localhost'

相關文章