使用PyMySQL,我无法连接到RDS

时间:2017-10-06 16:41:45

标签: python mysql amazon-web-services rds pymysql

使用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()返回

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'

感谢这个社区对如何继续进行的任何其他想法......

1 个答案:

答案 0 :(得分:0)

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

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