我刚刚花了一个星期来讨论这个问题中记录的问题:https://stackoverflow.com/questions/21315427/why-does-the-ca-information-need-to-be-in-a-tuple-for-mysqldb
现在把它归结为一个问题。这是一个连接到我在Amazon RDS上的MySQL服务器的脚本:
#! /usr/bin/env python
import MySQLdb
ssl = ({'ca': '/home/James/Downloads/mysql-ssl-ca-cert-copy.pem'},)
conn = MySQLdb.connect(host='db.doopdoop.eu-west-n.rds.amazonaws.com', user='user', passwd='pass', ssl=ssl)
cursor = conn.cursor()
cursor.execute("SHOW STATUS LIKE 'Ssl_Cipher'")
print cursor.fetchone()
这让我回到('Ssl_cipher', '')
,我收集的意思是连接没有加密。还使用Django的manage.py shell
函数尝试了这个,并得到了相同的结果。那么,为什么我没有例外呢?当然,数据正在流动,但显然安全性正在被忽视。任何有关我在哪里出错的帮助都将不胜感激。
我尝试将MySQL-Python更新到1.2.5但没有成功。
答案 0 :(得分:0)
您的问题的可能解决方法:使用默认文件。它看起来像这样:
[mysql]
host = db.doopdoop.eu-west-n.rds.amazonaws.com
user = user
password = pass
ssl-ca = /home/James/Downloads/mysql-ssl-ca-cert-copy.pem
然后将connect()调用更改为:
conn = MySQLdb.connect(read_default_file=options_path)
其中options_path是上述文件的路径。这也可以使您的代码中的身份验证数据保持不变。
Django设置如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/path/to/my.cnf',
},
}
}
参考:https://docs.djangoproject.com/en/dev/ref/databases/#connecting-to-the-database