簡體   English   中英

啟用遠程 MySQL 連接:ERROR 1045 (28000): Access denied for user

[英]Enable remote MySQL connection: ERROR 1045 (28000): Access denied for user

MySQL 5.1.31 在 Windows XP 上運行。

本地MySQL 服務器 (192.168.233.142) 我可以以 root 身份連接,如下所示:

>mysql --host=192.168.233.142 --user=root --password=redacted

遠程機器(192.168.233.163),我可以看到mysql端口是開放的:

# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).

但是當嘗試從遠程機器連接到 mysql 時,我收到:

# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)

我在 mysql.user 中只有 2 個條目:

Host         User     Password
--------------------------------------
localhost    root     *blahblahblah
%            root     [same as above]

我還需要做什么才能啟用遠程訪問?

編輯

正如下面 Paulo 所建議的,我嘗試將 % 的 mysql.user 條目替換為 IP 特定條目,因此我的用戶表現在如下所示:

Host             User     Password
------------------------------------------
localhost        root     *blahblahblah
192.168.233.163  root     [same as above]

然后我重新啟動了機器,但問題仍然存在。

你必須把它作為根:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;

;

其中 IP 是您要允許訪問的 IP,USERNAME 是您用來連接的用戶,PASSWORD 是相關密碼。

如果您想允許從任何 IP 訪問,只需輸入%而不是您的 IP

然后你只需要放

FLUSH PRIVILEGES;

或者重啟mysql服務器,就是這樣。

在授予遠程訪問權限后,我遇到了同樣的錯誤,直到我這樣做:

/etc/mysql/my.cnf

在較新版本的 mysql 中,文件的位置是/etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

(注釋此行: bind-address = 127.0.0.1

然后運行service mysql restart

默認情況下,MySQL 服務器遠程訪問是禁用的。 為用戶提供遠程訪問的過程是。

  1. 轉到我的 sql bin 文件夾或將其添加到PATH
  2. 通過mysql -uroot -proot (或任何 root 密碼)登錄到 root。
  3. 成功后你會得到mysql>
  4. 為該用戶提供所有授予訪問權限。

GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';

這里的 IP 是您希望允許遠程訪問的 IP 地址,如果我們輸入%任何 IP 地址都可以遠程訪問。

例子:

C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin

C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.27 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.25 sec)

這對於其他用戶。

mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

希望這會有所幫助

Paulo 的幫助使我找到了解決方案。 它是以下內容的組合:

  • 密碼包含一個美元符號
  • 我試圖從 Linux shell 連接

bash shell 將美元符號視為擴展為環境變量的特殊字符,因此我們需要使用反斜杠對其進行轉義。 順便說一句,在美元符號是密碼的最后一個字符的情況下,我們不必這樣做。

例如,如果您的密碼是“pas$word”,則從 Linux bash 我們必須按如下方式連接:

# mysql --host=192.168.233.142 --user=root --password=pas\$word

你有防火牆嗎? 確保端口 3306 已打開。

在 Windows 上,默認情況下會創建 mysql root 帳戶,該帳戶僅允許從 localhost 進行訪問,除非您在安裝期間選擇了啟用從遠程計算機訪問的選項。

使用 '%' 作為主機名創建或更新所需的用戶。

例子 :

CREATE USER 'krish'@'%' IDENTIFIED BY 'password';
  1. 再次嘗試flush privileges

  2. 嘗試重新啟動服務器以重新加載授權。

  3. 嘗試使用主機“192.168.233.163”創建一個用戶。 “%”似乎不允許所有(這很奇怪)

就我而言,我試圖連接到 cent OS 上的遠程 mysql 服務器。 在經歷了很多解決方案(授予所有權限、刪除 ip 綁定、啟用網絡)之后,問題仍然沒有得到解決。

事實證明,在研究各種解決方案時,我遇到了 iptables,這讓我意識到 mysql 端口 3306 不接受連接。

這是關於我如何檢查和解決此問題的小說明。

  • 檢查端口是否接受連接:

    telnet (mysql 服務器 ip) [portNo]

  • 添加 ip table 規則以允許端口上的連接:

    iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

  • 不建議將其用於生產環境,但如果您的 iptables 配置不正確,添加規則可能仍無法解決問題。 在這種情況下,應執行以下操作:

    服務 iptables 停止

希望這可以幫助。

如果您使用的是動態 IP,只需授予對 192.168.2.% 的訪問權限,因此現在您不必擔心每次都授予對您的 IP 地址的訪問權限。

我正在為我的 Amazon EC2 Linux 實例遠程登錄 MYSQL 而苦苦掙扎。 發現解決方案是確保我的安全組包含 MySQL 端口 3306 的入站規則以包含我的 IP 地址(或任何地方的 0.0.0.0/0)。 添加此規則后,立即可以遠程連接。

MySQL ODBC 3.51 Driver 是不處理密碼中的特殊字符。

“警告——如果您的 GRANT 命令中的密碼包含特殊字符,例如 !@# $ % ^ ?,您可能會對 MySQL ODBC 3.51 感到頭疼。MySQL ODBC 3.51 ODBC 驅動程序不支持密碼框中的這些特殊字符。您將收到的唯一錯誤消息是“訪問被拒絕”(使用密碼:是)“-來自http://www.plaintutorials.com/install-and-create-mysql-odbc-connector-on-windows-7/

用戶/主機組合可能是在沒有密碼的情況下創建的。

我假設在為現有用戶(使用 GUI 應用程序)添加新主機時,現有密碼也將用於新用戶/主機組合。

我可以登錄

mysql -u username -p PASSWORD

本地,但不是來自 IPADDRESS

mysql -u --host=HOST -p PASSWORD

(我實際上可以不使用密碼從 IPADDRESS 登錄)

mysql -u --host=HOST

設置密碼允許訪問:

set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';

mysql 配置文件的新位置是

/etc/mysql/mysql.conf.d/mysqld.cnf

我的情況非常簡單。

如果您輸入了錯誤的密碼,您可能會遇到此問題。 不需要創建用戶(用戶已經存在),沒有其他權限。 基本上確保密碼正確。 因此,請確保密碼正確

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM