能否在SQL Server的OPENDATASOURCE()中使用域账户?反引号密码是否可行?
问题
一直尝试在SQL Server的OPENDATASOURCE()中使用域账户,但始终失败。尝试了两种写法:
第一种写法:
OPENDATASOURCE ('SQLNCLI', 'Data Source=<server name>; User ID=<domain>\<user>; Password=<password>' )
第二种写法(转义反斜杠):
OPENDATASOURCE ('SQLNCLI', 'Data Source=<server name>; User ID=<domain>\\<user>; Password=<password>' )
第一种写法出现错误:
Msg 18456, Level 14, State 1, Line 1 Login failed for user '<domain>\<user>'
第二种写法错误信息类似,用户名显示两个反斜杠:
Msg 18456, Level 14, State 1, Line 1 Login failed for user '<domain>\\<user>'
请问:
- 尝试的操作是否可行?
- 密码包含反引号(`)字符,该字符在OPENDATASOURCE中是否被禁止?
回答
1. 域账户在OPENDATASOURCE中是否可行?
可行,但你的写法存在本质错误。域账户属于Windows身份验证体系,不能通过在连接字符串里明文传入User ID和Password的方式进行认证。
正确的做法是使用Windows集成身份验证:让执行OPENDATASOURCE的SQL Server服务账户,或者当前执行查询的账户,拥有目标SQL Server的访问权限,然后使用以下连接字符串:
OPENDATASOURCE ('SQLNCLI', 'Data Source=<server name>; Integrated Security=SSPI' )
如果必须使用指定的域账户身份连接,可通过EXECUTE AS LOGIN = '<domain>\<user>'切换身份后再执行OPENDATASOURCE,或者配置链接服务器并设置账户映射,而非直接在OPENDATASOURCE的连接字符串中明文传递域账户密码。
2. 密码中的反引号是否被禁止?
SQL Server连接字符串中,反引号(`)不属于禁止字符,但密码包含特殊字符时需确保格式正确。不过你当前的核心问题并非反引号,而是域账户的认证方式错误——明文传递域账户密码的方式本身不被支持,因此即使密码无问题,也会触发登录失败。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

