Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: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
набора @useselftrue
для связанного сервера без указания имени локального пользователя. Используйте 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
с помощью собственных учетных данных пользователя.
EXECUTE sp_addlinkedsrvlogin 'Accounts';
или
EXECUTE sp_addlinkedsrvlogin 'Accounts', 'true';
Замечание
Если для отдельных имен входа создаются явные сопоставления, они имеют приоритет над любыми глобальными сопоставлениями, которые могут существовать для этого связанного сервера.
В. Подключение определенного имени входа к связанному серверу с помощью различных учетных данных пользователя
В следующем примере создается сопоставление, чтобы убедиться, что пользователь Domain\Mary
Windows подключается к связанному серверу Accounts
с помощью имени входа MaryP
. Замените <password>
строгим паролем.
EXECUTE sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', '<password>';
Осторожность
В этом примере не используется проверка подлинности Windows. Пароли передаются незашифрованными. Пароли могут отображаться в определениях источников данных и скриптах, сохраненных на диске, в резервных копиях и в файлах журналов. Никогда не используйте пароль администратора в таком виде подключения. Обратитесь к администратору сети, чтобы получить рекомендации по безопасности, относящиеся к вашей среде.
С. Сопоставление конкретного локального входа с удаленным именем входа сервера
В некоторых случаях, например с управляемым экземпляром 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
:
EXECUTE master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'<remote_server>',
@useself = N'False',
@locallogin = N'<local_login_name>',
@rmtuser = N'<login_name>',
@rmtpassword = '<login_password>';
Д. Сопоставление всех локальных имен входа с удаленным именем входа сервера
Для этого locallogin
NULL
можно сопоставить все локальные имена входа с именем входа на удаленном сервере.
Сопоставление всех локальных имен входа с удаленным именем входа сервера требуется при выполнении задания агента SQL Управляемого экземпляра SQL Azure, принадлежащее sysadmin , которое запрашивает удаленный сервер через связанный сервер. Дополнительные сведения см. в заданиях агента SQL с помощью Управляемого экземпляра SQL Azure. Когда задание агента SQL подключается к удаленному серверу через связанный сервер, он выполняет запрос T-SQL в контексте удаленного входа, который должен иметь необходимые разрешения для выполнения запроса T-SQL.
Выполните следующую примерную команду на локальном сервере, чтобы сопоставить все локальные имена входа с именем входа login_name
удаленного сервера при подключении к связанному серверу remote_server
:
EXECUTE 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;