我想从 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 等。
我刚刚遇到了使用“MySQL 8.0”连接器将链接服务器安装到 MySQL 的问题。在 64 位 Windows Server 2016 主机/SQL Server 2019 Standard 上尝试 ANSI 和 Unicode 连接器的 64 位版本时,OP 中出现了相同的错误消息。
就我而言,问题与连接字符串有关,特别是
PWD=MyPa$$word
部分。将其替换为等效项password=MyPa$$word
可解决此问题。感谢这篇MSSQL 提示文章,其中包含可能的连接字符串参数的图表。
一种可能的解决方案是选择 ODBC 驱动程序。64 位似乎没问题,但是通过将“MySQL ODBC 5.3 Unicode 驱动程序”替换为“MySQL ODBC 5.3 ANSI驱动程序”,问题就消失了。
这两个驱动程序在Stack Exchange、MySQL 论坛和MySQL 文档上进行了讨论,但它们没有明确说明 SQL Server 链接服务器需要 ANSI 驱动程序。至少,根据我的配置(几乎所有默认设置,这是一个新安装,我能想到的没什么异常),ANSI 驱动程序有效,而 Unicode 驱动程序没有。