指向 MySQL 的 SQL Server 連結報告“使用密碼:否”
我想從 SQL Server 中訪問 MySQL 數據庫。我創建了一個系統 DSN,它測試正常。我在 SQL Server 中創建了一個連結伺服器:
- 提供程序 = 用於 ODBC 驅動程序的 Microsoft OLE DB 提供程序
- 產品名稱 = MySQL
- 數據源 =(DSN 的名稱)
- 安全性 = 我的每個本地登錄都有一個條目,帶有我的 MySQL 使用者名和密碼
但是,如果我嘗試對其進行測試,則會收到以下錯誤消息:
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "X". OLE DB provider "MSDASQL" for linked server "X" returned message "[MySQL][ODBC 5.3(w) Driver]Access denied for user 'me'@'localhost' (using password: NO)". (Microsoft SQL Server, Error: 7303)
密碼是絕對設置好的,並且在 MySQL Workbench 中工作得很好。它是 MySQL 的管理員。兩台機器都是本地的。我嘗試將我的憑據添加為預設值(“對於不在列表中的登錄,請使用此安全上下文”);不用找了。
我將我的 DSN 設置為 64 位,匹配我的作業系統,使用“MySQL ODBC 5.3 Unicode 驅動程序”,我收集到它是隨 MySQL 引擎和/或 MySQL Workbench 一起安裝的。32 位 ODBC 應用程序提供常用的葡萄牙語驅動程序(為什麼是葡萄牙語?!) - Access、dBase、Excel、Paradox 等。
一種可能的解決方案是選擇 ODBC 驅動程序。64 位似乎沒問題,但是通過將“MySQL ODBC 5.3 Unicode 驅動程序”替換為“MySQL ODBC 5.3 ANSI驅動程序”,問題就消失了。
這兩個驅動程序在Stack Exchange、MySQL 論壇和MySQL 文件上進行了討論,但它們沒有明確說明 SQL Server 連結伺服器需要 ANSI 驅動程序。至少,根據我的配置(幾乎所有預設設置,這是一個新安裝,我能想到的沒什麼異常),ANSI 驅動程序可以工作,而 Unicode 驅動程序沒有。
我剛剛遇到了使用“MySQL 8.0”連接器將連結伺服器安裝到 MySQL 的問題。在 64 位 Windows Server 2016 主機/SQL Server 2019 Standard 上嘗試 ANSI 和 Unicode 連接器的 64 位版本時,OP 中出現了相同的錯誤消息。
就我而言,問題與連接字元串有關,特別是
PWD=MyPa$$word
部分。將其替換為等效項password=MyPa$$word
可解決此問題。感謝這篇MSSQL 提示文章,其中包含可能的連接字元串參數的圖表。