OPENROWSET报错‘NT AUTHORITY\ANONYMOUS LOGON登录失败’,如何传递凭据?
解决OPENROWSET执行远程存储过程的登录失败问题
你当前代码使用Trusted_Connection=yes(Windows集成身份验证),如果本地SQL Server服务账号没有远程服务器的访问权限,就会触发登录失败错误。以下是几种正确传递凭据的方案:
方案1:使用SQL Server身份验证
直接在连接字符串中指定远程SQL Server的登录账号和密码,适用于远程服务器支持SQL身份验证的场景:
SELECT a.* FROM OPENROWSET( 'SQLNCLI' , 'Server=MyServer;Uid=远程SQL登录名;Pwd=远程SQL密码;' , 'exec myStoredProcedure' ) AS a;
注意:确保该SQL账号拥有执行目标存储过程的权限
方案2:使用Windows集成身份验证(调整服务账号)
将本地SQL Server服务的启动账号替换为一个在远程服务器拥有访问权限的Windows域账号/本地账号,这样集成验证就能自动传递有效凭据。
方案3:使用EXECUTE AS临时切换身份
如果无法修改服务账号,可以临时切换到有权限的Windows账号执行OPENROWSET:
EXECUTE AS LOGIN = 'DOMAIN\有权限的Windows账号'; SELECT a.* FROM OPENROWSET( 'SQLNCLI' , 'Server=MyServer;Trusted_Connection=yes;' , 'exec myStoredProcedure' ) AS a; REVERT; -- 切换回原身份
注意:执行该语句的账号需要拥有IMPERSONATE权限,且目标Windows账号必须能访问远程服务器
必要前提配置
确保本地SQL Server已启用Ad Hoc分布式查询,否则OPENROWSET无法正常使用:
sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'Ad Hoc Distributed Queries', 1; RECONFIGURE;
内容的提问来源于stack exchange,提问作者TheMortiestMorty
相关产品推荐
相关产品推荐

