SQL Linked Server выдает ошибку "нет сопоставления входа", если используется учетная запись не администратора

у меня есть локальный SQL Server 2008R2. Я настроил связанный сервер для удаленной базы данных.

связанный сервер отлично работает при входе на локальный сервер с помощью учетной записи SQL-login с sysadmin роль сервера. Я могу запросить удаленный сервер, поэтому я знаю, что параметр связанного сервера верен. Однако я бы получил ошибку ниже, если я использую учетную запись, у которой нет sysadmin роль сервера.

Msg 7416, Level 16, State 2, Line 2
Access to the remote server is denied because no login-mapping exists.

для локальных и удаленных серверов, SQL login используется (проверка подлинности Windows не используется)

какую безопасность мне нужно настроить для обычной учетной записи SQL-login для использования связанного сервера?

2 ответов


по данным этот блог, Я должен указать User ID в строке поставщика, если используются учетные записи, отличные от sysadmin. Вот пример.

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

Это точно соответствует тому, с чем я столкнулся, и это решает мою проблему.


в качестве альтернативного решения вы можете использовать параметр @datasrc вместо @provstr. @dataSrc работает без установки идентификатора пользователя

пример:

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'*****'

Я добавил комментарий здесь тоже, но его не видно (не знаю почему).