![](/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.