SQL链接服务器返回错误";“不存在登录映射”;使用非管理员帐户时

SQL链接服务器返回错误";“不存在登录映射”;使用非管理员帐户时,sql,sql-server,security,linked-server,Sql,Sql Server,Security,Linked Server,我有一个本地SQL Server 2008R2。我已将链接服务器配置为远程数据库 当我使用具有sysadminServer角色的SQL登录帐户登录到本地服务器时,链接服务器工作得非常好。我可以查询远程服务器,因此我知道链接服务器设置是正确的。但是,如果我使用的帐户没有sysadmin服务器角色,则会出现以下错误 Msg 7416, Level 16, State 2, Line 2 Access to the remote server is denied because no login-ma

我有一个本地SQL Server 2008R2。我已将链接服务器配置为远程数据库

当我使用具有
sysadmin
Server角色的SQL登录帐户登录到本地服务器时,链接服务器工作得非常好。我可以查询远程服务器,因此我知道链接服务器设置是正确的。但是,如果我使用的帐户没有
sysadmin
服务器角色,则会出现以下错误

Msg 7416, Level 16, State 2, Line 2
Access to the remote server is denied because no login-mapping exists.
对于本地和远程服务器,都使用SQL登录(不使用Windows身份验证)


我需要为常规SQL登录帐户配置什么样的安全性才能使用链接服务器?

更新:有关替代解决方案,请参阅@Anton和@Wouter的答案

根据,如果使用非系统管理员帐户,我必须在提供程序字符串中指定
用户ID
。这里有一个例子

EXEC master.dbo.sp_addlinkedserver 
    @server = N'MyLinkServerName',
    @provider = N'SQLNCLI',
    @srvproduct = 'SQLNCLI',
    @provstr = N'SERVER=MyServerName\MyInstanceName;User ID=myUser'

这完全符合我遇到的情况,解决了我的问题。

作为替代解决方案,您可以使用参数@datasrc而不是@provstr。 @dataSrc在不设置用户ID的情况下工作

样本:

EXEC master.dbo.sp_addlinkedserver @server = N'LinkServerName', @provider=N'SQLNCLI',@srvproduct = 'MS SQL Server', @datasrc=N'serverName\InstanceName' 
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkServerName', @locallogin = NULL , @useself = N'False', @rmtuser = N'myUser', @rmtpassword = N'*****'

我也添加了一条注释,但它不可见(不知道为什么)。

在尝试了这一点后,我发现,通过使用
@datasrc
而不是
@provstr
,您可以完全避免使用
用户ID
属性。这方面的文档记录很差,但下面的示例对我很有用:

EXEC master.dbo.sp_addlinkedserver
    @server = 'SOME_NAME',
    @srvproduct='', -- needs to be explicitly empty, default is NULL and is not allowed
    @datasrc='some_server.com\SOME_INSTANCE',
    @provider='SQLNCLI';

-- Set up the Linked server to pass along login credentials
EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname='SOME_NAME',
    @useself='true', -- Optional. This is the default
    @locallogin=NULL; -- Optional. This is the default

使用此方法,您可以为所有用户重复使用相同的链接服务器。当前接受的答案有一个巨大的缺点,即需要为每个用户设置一个单独的链接服务器。

如果右键单击。属性,然后转到“安全”选项卡,如何设置?或者,将链接服务器脚本设置为创建并粘贴@Nick.McDermaid所说的
sp_addlinkedsrvlogin
部分(清除密码等)。如果上面写着“不制作”,您需要在列表中添加映射,或者在单选按钮中提供下面3个备选选项中的一个。@Nick.McDermaid,@BradD:我已将映射添加到列表中。我已尝试使用此安全上下文使
不成为
成为
,但这两个选项都没有帮助。但是,只要我将
sysadmin
server角色添加到本地SQL帐户,它就会立即工作。为什么?我帮不了你,除非你按照我最初的要求去做——把
sp\u addlinkedsrvlogin
部分写出来。否则我就浪费时间去猜你的配置是什么。我不知道有任何类型的
sysadm
覆盖。一年多后,你解决了我的一个难题!我更喜欢您的解决方案,因为另一个解决方案没有说明如果您有多个用户ID,如何使其工作