繁体   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