【问题标题】:MySQLdb._exceptions.OperationalError: (1698, "Access denied for user 'root'@'localhost'")MySQLdb._exceptions.OperationalError: (1698, "Access denied for user 'root'@'localhost'")
【发布时间】:2021-02-18 10:30:48
【问题描述】:

当我运行 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           |
+------------------+-----------+-----------------------+

【问题讨论】:

    标签: python mysql python-3.x linux sqlalchemy


    【解决方案1】:

    我刚刚在 MariaDB 上遇到了同样的问题,发现自己在这里期待一些答案,但没有幸运。经过一些研究,我做了一个解决方法,并且从两个数据库管理器的相似之处来看,我认为它也会帮助任何遇到这个问题的人。我有点新手,所以我无法解释它背后的技术内容,但它是 mySQL(在我的情况下是 MariaDB)如何工作的默认设置。

    我所做的是在数据库管理器(mySQL 或 MariaDB)上为我在 linux 上的用户创建一个用户,并且为了避免将我的密码传递给脚本,我使用了身份验证插件“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”身份验证插件来提高安全性。

    【讨论】:

      猜你喜欢
      • 2021-09-08
      • 1970-01-01
      • 2019-08-09
      • 2021-10-29
      • 2017-05-23
      • 2021-02-15
      • 2016-09-28
      • 2012-04-28
      • 2015-03-20
      相关资源
      最近更新 更多