使用 PyMySQL,我无法连接到 RDS

Using PyMySQL, I can't connect to RDS

使用 PyMySQL,我得到 pymysql.err.OperationalError: (1045, u"Access denied for user 'my_user'@'<MY_IP_ADDRESS>' (using password: YES)"),但是,我可以从命令行登录或 MySQL Workbench 在这台机器上使用相同的凭据。而且,我可以使用 PyMySQL 连接到 localhost。这是我的示例测试代码:

import pymysql
prod_conn = pymysql.connect(
  host='correct-host-name.us-west-2.rds.amazonaws.com',
  user='my_user',
  password='correct_password',
  port=3306,
  database='my_db')

然而,在同一台机器上从命令行使用 mysql -hcorrect-host-name.us-west-2.rds.amazonaws.com -umy_user -pcorrect_password -P3306 -Dmy_db,我进入了很好的状态。

谷歌搜索后,我尝试检查用户的授权,我相信用户设置正确。 SHOW GRANTS FOR CURRENT_USER()returns

Grants for my_user@%
'GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO \'my_user\'@\'%\' WITH GRANT OPTION'

我试过检查 SELECT USER(), CURRENT_USER(); 然后回来

USER()                      CURRENT_USER()
'my_user@<MY_IP_ADDRESS>'   'my_user@%'

所以,似乎用户设置正确,我怀疑这是因为我可以通过其他选项连接。我也尝试了 https://forums.aws.amazon.com/thread.jspa?messageID=707103 的两个建议(具体来说,使用不同的参数组和 log_bin_trust_function_creators == 1 并使用不带标点符号的密码)无济于事。

我想在 lambda 函数中使用它,所以我真的很想使用 PyMySQL 来保持这个 python 唯一的解决方案,而不是尝试 MySQLDB 或其他库.

我认为没有任何匿名用户经过审查SELECT user,host FROM mysql.user;

user        host
'my_user'   '%'
'mysql.sys' 'localhost'
'rdsadmin'  'localhost'

感谢此社区可能对如何进行的任何其他想法...

我通过创建一个新用户解决了这个问题。我只需要这个用户的读取权限,所以这是比使用具有如此高权限的默认用户更好的方法。我仍然不确定为什么原来的不起作用,但最终起作用的是:

# Grants for my_new_user@%
'GRANT SELECT ON *.* TO \'my_new_user\'@\'%\''