sp_addlinkedsrvlogin (Transact-SQL)

Область применения: SQL Server

Создает или обновляет сопоставление между именем входа в локальном экземпляре SQL Server и учетной записью безопасности на удаленном сервере.

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_addlinkedsrvlogin
    [ @rmtsrvname = ] N'rmtsrvname'
    [ , [ @useself = ] 'useself' ]
    [ , [ @locallogin = ] N'locallogin' ]
    [ , [ @rmtuser = ] N'rmtuser' ]
    [ , [ @rmtpassword = ] N'rmtpassword' ]
[ ; ]

Аргументы

[ @rmtsrvname = ] N'rmtsrvname'

Имя связанного сервера, к которому применяется сопоставление входа. @rmtsrvname — sysname без значения по умолчанию.

[ @useself = ] 'useself'

Определяет, следует ли подключаться к rmtsrvname путем олицетворения локальных имен входа или явной отправки имени входа и пароля. @useself — varchar(8) с значением по умолчаниюtrue.

  • Значение true указывает, что имена входа используют собственные учетные данные для подключения к @rmtsrvname, при этом @rmtuser и @rmtpassword аргументы игнорируются.
  • falseуказывает, что аргументы @rmtuser и @rmtpassword используются для подключения к @rmtsrvname для указанного @locallogin.

Если задано значение @rmtuser и @rmtpassword, для подключения к связанному серверу не используется NULLимя входа или пароль.

[ @locallogin = ] N'locallogin'

Имя входа на локальном сервере. @locallogin имеет имя sysname с значением по умолчаниюNULL. NULL Указывает, что эта запись применяется ко всем локальным именам входа, которые подключаются к @rmtsrvname. Если нет NULL, @locallogin может быть именем входа SQL Server или учетной записью Windows. Учетная запись Windows должна иметь доступ к SQL Server напрямую или через членство в группе Windows.

[ @rmtuser = ] N'rmtuser'

Удаленное имя входа, используемое для подключения к @rmtsrvname , когда @useself есть false. @rmtuser — sysname с значением по умолчаниюNULL. Если удаленный сервер является экземпляром SQL Server, который не использует проверку подлинности Windows, @rmtuser является именем входа SQL Server.

[ @rmtpassword = ] N'rmtpassword'

Пароль, связанный с @rmtuser. @rmtpassword — sysname с значением по умолчаниюNULL.

Значения кода возврата

0 (успешно) или 1 (сбой).

Замечания

Когда пользователь входит на локальный сервер и выполняет распределенный запрос, который обращается к таблице на связанном сервере, то для открытия таблицы локальный сервер должен войти на связанный сервер под именем данного пользователя. Используется sp_addlinkedsrvlogin для указания учетных данных, используемых локальным сервером для входа на связанный сервер.

Примечание.

Чтобы создать лучшие планы запросов при использовании таблицы на связанном сервере, обработчик запросов должен иметь статистику распределения данных с связанного сервера. Пользователи, имеющие ограниченные разрешения для работы со столбцами таблицы, могут не иметь возможности получить необходимую статистику и, как следствие, получат менее эффективный план запроса. Если связанный сервер является экземпляром SQL Server, чтобы получить всю доступную статистику, пользователь должен иметь таблицу или быть членом предопределенных ролей сервера sysadmin, предопределенных ролей базы данных db_owner или db_ddladmin предопределенных ролей базы данных на связанном сервере. SQL Server 2012 с пакетом обновления 1 (SP1(11.0.3x) изменяет ограничения разрешений для получения статистики и позволяет пользователям с разрешением SELECT получить доступ к статистике, доступной через DBCC SHOW_STATISTICS. Дополнительные сведения см. в разделе "Разрешения" SHOW_STATISTICS DBCC.

Сопоставление по умолчанию между всеми именами входа на локальном сервере и удаленными именами входа на связанном сервере автоматически создается путем sp_addlinkedserverвыполнения. Сопоставление по умолчанию указывает, что SQL Server использует учетные данные пользователя локального входа при подключении к связанному серверу от имени имени входа. Это эквивалентно выполнению sp_addlinkedsrvlogin набора @useself true для связанного сервера без указания имени локального пользователя. Используйте sp_addlinkedsrvlogin только для изменения сопоставления по умолчанию или добавления новых сопоставлений для определенных локальных имен входа. Чтобы удалить сопоставление по умолчанию или любое другое сопоставление, используйте sp_droplinkedsrvlogin.

Вместо того, чтобы sp_addlinkedsrvlogin создать предопределенное сопоставление входа, SQL Server может автоматически использовать учетные данные безопасности Windows (имя входа Windows и пароль) пользователя, выдавшего запрос для подключения к связанному серверу, если существуют все следующие условия:

  • Пользователь подключен к SQL Server с помощью режима проверки подлинности Windows.

  • Делегирование учетной записи безопасности должно быть доступно на клиентском сервере и сервере-источнике

  • Поставщик поддерживает режим проверки подлинности Windows; Например, SQL Server, работающий в Windows.

Примечание.

Делегирование не должно быть включено для сценариев с одним прыжком, но это необходимо для сценариев с несколькими прыжками.

После выполнения проверки подлинности связанным сервером с помощью сопоставлений, определенных при выполнении sp_addlinkedsrvlogin локального экземпляра SQL Server, разрешения на отдельные объекты в удаленной базе данных определяются связанным сервером, а не локальным сервером.

sp_addlinkedsrvlogin невозможно выполнить из определяемой пользователем транзакции.

Разрешения

Необходимо разрешение ALTER ANY LOGIN на сервере.

Примеры

А. Подключение всех локальных имен входа к связанному серверу с помощью собственных учетных данных пользователя

В следующем примере создается сопоставление, гарантирующее, что все имена входа на локальном сервере будут подключаться к связанному серверу Accounts с помощью собственных учетных данных.

EXEC sp_addlinkedsrvlogin 'Accounts';

Or

EXEC sp_addlinkedsrvlogin 'Accounts', 'true';

Примечание.

Если для отдельных имен входа создаются явные сопоставления, они имеют приоритет над любыми глобальными сопоставлениями, которые могут существовать для этого связанного сервера.

B. Подключение определенного имени входа к связанному серверу с помощью различных учетных данных пользователя

В следующем примере создается сопоставление, гарантирующее, что пользователь Windows Domain\Mary будет подключаться к связанному серверу Accounts с помощью имени входа MaryP и пароля d89q3w4u.

EXEC sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', 'd89q3w4u';

Внимание

В этом примере не используется проверка подлинности Windows. Пароли передаются в незашифрованном виде. Пароли могут отображаться в определениях источников данных и скриптах, сохраненных на диске, в резервных копиях и в файлах журналов. Никогда не используйте для таких соединений пароль администратора. За инструкциями по безопасности среды обратитесь к сетевому администратору.

C. Сопоставление конкретного локального входа с удаленным именем входа сервера

В некоторых случаях, например с Управляемый экземпляр SQL Azure, для запуска задания агента SQL, выполняющего запрос Transact-SQL (T-SQL) на удаленном сервере с помощью связанного сервера, необходимо создать сопоставление между именем входа на локальном сервере с именем входа на удаленном сервере с разрешением на выполнение запроса T-SQL. Когда задание агента SQL подключается к удаленному серверу через связанный сервер, он выполняет запрос T-SQL в контексте удаленного входа, который должен иметь необходимые разрешения для выполнения запроса T-SQL.

Если вы сопоставляете имена входа для задания агента SQL в Управляемый экземпляр SQL Azure, локальное имя входа, которое вы сопоставляете с удаленным именем входа, должно быть владельцем задания агента SQL, если задание агента SQL не является sysadmin, в этом случае необходимо сопоставить все локальные имена входа. Дополнительные сведения см. в заданиях агента SQL с помощью Управляемый экземпляр SQL Azure.

Выполните следующую примерную команду на локальном сервере, чтобы сопоставить локальное имя входа с удаленным именем входа local_login_name login_name сервера при подключении к связанному серверу remote_server:

EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'<remote_server>',
@useself = N'False',
@locallogin = N’<local_login_name>’,
@rmtuser = N'<login_name>',
@rmtpassword = '<login_password>'

D. Сопоставление всех локальных имен входа с удаленным именем входа сервера

Для этого locallogin NULLможно сопоставить все локальные имена входа с именем входа на удаленном сервере.

Сопоставление всех локальных имен входа с удаленным именем входа сервера требуется при выполнении задания агента SQL Управляемый экземпляр SQL Azure, принадлежащее sysadmin, которое запрашивает удаленный сервер через связанный сервер. Дополнительные сведения см. в заданиях агента SQL с помощью Управляемый экземпляр SQL Azure. Когда задание агента SQL подключается к удаленному серверу через связанный сервер, он выполняет запрос T-SQL в контексте удаленного входа, который должен иметь необходимые разрешения для выполнения запроса T-SQL.

Выполните следующую примерную команду на локальном сервере, чтобы сопоставить все локальные имена входа с именем входа login_name удаленного сервера при подключении к связанному серверу remote_server:

EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'<remote_server>',
@useself = N'False',
@locallogin = NULL,
@rmtuser = N'<login_name>',
@rmtpassword = '<login_password>'

Е. Проверка связанных имен входа

В следующем примере показаны все имена входа, сопоставленные с связанным сервером:

SELECT s.name AS server_name, ll.remote_name, sp.name AS principal_name
FROM sys.servers s
INNER JOIN sys.linked_logins ll
    ON s.server_id = ll.server_id
INNER JOIN sys server_principals sp
    ON ll.local_principal_id = sp.principal_id
WHERE s.is_linked = 1;