2014-11-04 40 views
4

我正在嘗試運行用Python 2.7.5(不使用Django)編寫的腳本。當它試圖與它拋出以下錯誤MySQLdb.connect()方法連接到遠程MySQL服務器:有沒有辦法在Python 2.7.5中的MySQLdb.connect中將secure_auth設置爲false?

_mysql_exceptions.OperationalError: (2049, "Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)") 

我已經讀完這個問題:

有沒有辦法在MySQLdb.connect()方法中設置參數來將secure_auth設置爲false?無需更改任何密碼或從cmd行運行該命令。我看過official docs,那裏面沒有任何東西。

我曾嘗試將secure_auth=False添加到參數中,但會引發錯誤(如下面的代碼所示)。

的Python:

def get_cursor(): 
    global _cursor 
    if _cursor is None: 
     try: 
      db = MySQLdb.connect(user=_usr, passwd=_pw, host='external.website.com', port=3306, db=_usr, charset="utf8") 
      # tried this but it doesnt work (as expect but tried anyway) which throws this error 
      # TypeError: 'secure_auth' is an invalid keyword argument for this function 
      # db = MySQLdb.connect(user=_usr, passwd=_pw, host='external.website.com', port=3306, db=_usr, charset="utf8", secure_auth=false) 
      _cursor = db.cursor() 
     except MySQLdb.OperationalError: 
      print "error connecting" 
      raise 
    return _cursor 

回答

3

我花了過多的時間量工作通過MySQLdb源代碼,並確定如果不修補MySQLdb的C繞包代碼就無法完成這個任務。從理論上講,你應該能夠通過SECURE_CONNECTION標誌指定不希望使用不安全的舊密碼:

MySQLdb.connect(..., client_flags=MySQLdb.constant.CLIENT.SECURE_CONNECTION)

但從來沒有真正的MySQLdb的代碼檢查該標誌,永不配置時secure_connection選項調用MySQL連接代碼,所以它總是默認需要新的密碼。

可能的修復包括:

  • 補丁MySQLdb的代碼
  • 使用舊版本的MySQL客戶端庫
  • 更新MySQL服務器
  • 上的密碼創建了一個新用戶新式密碼

對不起,我沒有更好的答案。我自己就遇到了這個問題!

+0

上面列出的是我所害怕的。感謝您確認它無法完成。這很有幫助! – tokyovariable 2014-11-20 01:36:29

+0

這確實是由於C API中的一個錯誤:http://bugs.mysql.com/bug.php?id=75425 – niczero 2015-01-06 15:49:25

+0

它看起來像C API已被修補,但問題仍然存在,我使用mysql -python,@niczero你知道爲什麼嗎? – AKFourSeven 2015-01-26 09:08:33

0

SSL是一個獨立的放慢參數,你可以在連接設置放慢參數...這裏是從源代碼的說明...請檢查mysql_ssl_set()文檔。

ssl 
      dictionary or mapping, contains SSL connection parameters; 
      see the MySQL documentation for more details 
      (mysql_ssl_set()). If this is set, and the client does not 
      support SSL, NotSupportedError will be raised. 

有關的所有安全參數本文會談 - http://dev.mysql.com/doc/refman/5.0/en/mysql-ssl-set.html ...

我沒有看到任何禁止在一目瞭然的安全身份驗證..

1

我知道摩西的答案已經過驗證,但我想根據他的建議提供我的工作。

我以前爲我的python安裝了mysql_python,並安裝了mysql的brew版本。

我解決了所有這一切。

我在尋找一種安裝MySQLdb的方法,通過查找源代碼找到最新的穩定版本。

我編譯了它們(接下來是指令here),安裝它們,然後我尋找穩定版本的MySQL客戶端(MySQL網站是最好的地方)並安裝完全符合我的要求的5.5版本。

我讓mysql自動啓動,然後重新啓動我的電腦(但您可以重新啓動apache)並檢查所有路徑是否正確,並且右側包含正確的位置(您可以檢查上面的鏈接) 。

現在一切正常!

希望它有幫助。

相關問題