SQL Server链接MySQL报错‘using password: no’问题排查求助
我之前碰到过一模一样的问题,折腾了好一会儿才搞定,给你几个实用的排查和解决方向:
仔细核对链接服务器的安全映射配置
你说已经为本地登录配置了对应的MySQL账号密码,这里要确认两个细节:- 是不是选中了「本地服务器登录名要远程服务器登录名和密码」这个选项,而不是「模拟登录」或者其他选项?这个选项才会把你配置的账号密码准确传递给MySQL。
- 输入密码的时候有没有不小心带了空格,或者密码里的特殊字符(比如
@、#)导致配置没正确识别?建议手动重新输入一遍密码,别复制粘贴,避免隐藏的不可见字符搞鬼。
尝试绕过DSN,直接配置Provider连接字符串
有时候DSN模式会有参数传递的隐性问题,你可以试试直接在链接服务器的「属性」→「常规」标签里,把Provider字符串改成手动指定ODBC连接参数,比如:DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=你的MySQL服务器地址;DATABASE=目标数据库名;UID=你的MySQL用户名;PWD=你的MySQL密码;PORT=3306;这样直接传递账号密码,能排除DSN配置里可能隐藏的密码丢失问题。
验证ODBC DSN的实际连接参数
虽然你测试DSN通过了,但可以打开ODBC数据源管理器,找到你的系统DSN,点击「配置」后再点「详细信息」,看看生成的连接字符串里有没有PWD=这个参数。有些ODBC驱动版本会有bug,导致DSN里的密码没有被正确保存,测试时能临时读取,但实际被链接服务器调用时就丢失了。检查SQL Server服务账户的权限
如果你的链接服务器不小心用了「使用服务账户」的选项(哪怕你配置了映射,也得确认),SQL Server的服务账户需要有读取系统DSN注册表项的权限——系统DSN存在HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\你的DSN名称这个路径下,服务账户得能读这个键值。
补充一句:「using password: no」这个错误的本质就是MySQL那边根本没收到密码参数,所以核心就是排查密码在从SQL Server到MySQL的传递链上哪里丢了——要么是映射配置没生效,要么是DSN没正确带密码,要么是Provider传递参数时出了问题。
内容的提问来源于stack exchange,提问作者Jon of All Trades

