Sql-Server

指向 MySQL 的 SQL Server 連結報告“使用密碼:否”

  • June 26, 2020

我想從 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 ExchangeMySQL 論壇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 提示文章,其中包含可能的連接字元串參數的圖表。

引用自:https://dba.stackexchange.com/questions/197854