![](/img/trans.png)
[英]MySQLdb._exceptions.OperationalError OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
[英]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.