簡體   English   中英

MySQLdb._exceptions.OperationalError:(1698,“用戶'root'@'localhost'的訪問被拒絕”)

[英]MySQLdb._exceptions.OperationalError: (1698, "Access denied for user 'root'@'localhost'")

當我運行 SQL python 腳本時,出現了這些錯誤

MySQLdb._exceptions.OperationalError: (1698, "Access denied for user 'root'@'localhost'")
sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1698, "Access denied for user 'root'@'localhost'")
(Background on this error at: http://sqlalche.me/e/13/e3q8)

我查看了 mysql.user 表並得到以下信息:

+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | auth_socket           |
+------------------+-----------+-----------------------+

我剛剛遇到了與 MariaDB 相同的問題,發現自己在這里期待一些答案,但運氣不佳。 經過一些研究,我做了一個解決方法,並且根據兩個數據庫管理器的相似性來判斷,我認為它也會幫助遇到這個問題的任何人。 我有點新手,所以我無法解釋它背后的技術內容,但它是 mySQL(在我的例子中是 MariaDB)如何工作的默認設置。

我所做的是在 linux 上為我的用戶在數據庫管理器(mySQL 或 MariaDB)上創建一個用戶,並且為了不可能暴露我必須將其傳遞給腳本的密碼,我使用了身份驗證插件“unix_socket”,所以你不根本不需要密碼(當然只針對linux用戶):

MySQL -u root
CREATE USER user@localhost IDENTIFIED VIA 'unix_socket';

然后將權限授予您的新用戶:

GRANT ALL ON database_name.* TO user@localhost WITH GRANT OPTION;

如果您想遠程連接,請將“localhost”更改為“%”; 如果您不是 linux 用戶,我想您可以創建一個帶密碼的用戶並將其傳遞給 sqlalchemy,這樣就可以了。

OBS:我不確定,但我認為問題在於“root”同時使用“unix_socket”和“mysql_native_password”身份驗證插件來提高安全性。

暫無
暫無

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

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