sp_addlinkedsrvlogin (Transact-SQL)

Aplica-se a: SQL Server (todas as versões com suporte)

Cria ou atualiza um mapeamento entre um logon na instância local do SQL Server e uma conta de segurança em um servidor remoto.

Topic link iconConvenções de sintaxe do Transact-SQL

Sintaxe

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'   
     [ , [ @useself = ] { 'TRUE' | 'FALSE' | NULL } ]   
     [ , [ @locallogin = ] 'locallogin' ]   
     [ , [ @rmtuser = ] 'rmtuser' ]   
     [ , [ @rmtpassword = ] 'rmtpassword' ]   

Argumentos

[ @rmtsrvname = ] 'rmtsrvname'
É o nome de um servidor vinculado ao qual o mapeamento de logon se aplica. rmtsrvname é sysname, sem padrão.

[ @useself = ] { 'TRUE' | 'FALSE' | NULL }'
Determina se você deve se conectar ao rmtsrvname representando logons locais ou enviando explicitamente um logon e uma senha. O tipo de dados é varchar(8), com um padrão de TRUE.

Um valor true especifica que os logons usam suas próprias credenciais para se conectar ao rmtsrvname, com os argumentos rmtuser e rmtpassword sendo ignorados. FALSE especifica que os argumentos rmtuser e rmtpassword são usados para se conectar ao rmtsrvname para a locallogina especificada. Se rmtuser e rmtpassword também estiverem definidos como NULL, nenhum logon ou senha será usado para se conectar ao servidor vinculado.

[ @locallogin = ] 'locallogin'
É um logon no servidor local. locallogin é sysname, com um padrão de NULL. NULL especifica que essa entrada se aplica a todos os logons locais que se conectam ao rmtsrvname. Se não for NULL, a locallogina poderá ser um logon SQL Server ou um logon do Windows. O logon do Windows deve ter recebido acesso a SQL Server diretamente ou por meio de sua associação a um grupo do Windows com acesso concedido.

[ @rmtuser = ] 'rmtuser'
É o logon remoto usado para se conectar ao rmtsrvname quando @useself for FALSE. Quando o servidor remoto é uma instância de SQL Server que não usa a Autenticação do Windows, o rmtuser é um logon SQL Server. rmtuser é sysname, com um padrão de NULL.

[ @rmtpassword = ] 'rmtpassword'
É a senha associada ao rmtuser. rmtpassword é sysname, com um padrão de NULL.

Valores do código de retorno

0 (êxito) ou 1 (falha)

Comentários

Quando o usuário faz logon no servidor local e executa uma consulta distribuída que acessa uma tabela no servidor vinculado, o servidor local deve fazer logon no servidor vinculado em nome do usuário para acessar essa tabela. Use sp_addlinkedsrvlogin para especificar as credenciais de logon que o servidor local usa para efetuar logon no servidor vinculado.

Observação

Para criar os melhores planos de consulta quando você estiver usando uma tabela em um servidor vinculado, o processador de consulta deverá ter estatísticas de distribuição de dados do servidor vinculado. Usuários que limitaram permissões em qualquer coluna da tabela podem não ter permissões suficientes para obter todas as estatísticas úteis e podem receber um plano de consulta menos eficiente e de baixo desempenho. Se o servidor vinculado for uma instância de SQL Server, para obter todas as estatísticas disponíveis, o usuário deverá possuir a tabela ou ser um membro da função de servidor fixa sysadmin, a função de banco de dados fixa db_owner ou a db_ddladmin função de banco de dados fixa no servidor vinculado. O SQL Server 2012 SP1 altera as restrições de permissão para obter estatísticas e permite que usuários com permissão SELECT acessem as estatísticas disponíveis através de DBCC SHOW_STATISTICS. Para obter mais informações, consulte a seção Permissões do SHOW_STATISTICS DBCC (Transact-SQL).

O mapeamento padrão entre todos os logons no servidor local e os logons remotos no servidor vinculado é criado automaticamente com a execução de sp_addlinkedserver. O mapeamento padrão afirma que SQL Server usa as credenciais do usuário do logon local ao se conectar ao servidor vinculado em nome do logon. Isso equivale à execução de sp_addlinkedsrvlogin com @useself definido como true para o servidor vinculado, sem especificar um nome de usuário local. Use sp_addlinkedsrvlogin somente para alterar o mapeamento padrão ou adicionar novos mapeamentos para logons locais específicos. Para excluir o mapeamento padrão ou qualquer outro mapeamento, use sp_droplinkedsrvlogin.

Em vez de ter que usar sp_addlinkedsrvlogin para criar um mapeamento de logon predeterminado, SQL Server pode usar automaticamente as credenciais de segurança do Windows (nome de logon do Windows e senha) de um usuário que emite a consulta para se conectar a um servidor vinculado quando todas as seguintes condições existirem:

  • Um usuário está conectado ao SQL Server usando o Modo de Autenticação do Windows.

  • A delegação da conta de segurança está disponível no cliente e no servidor destinatário.

  • O provedor dá suporte ao Modo de Autenticação do Windows; por exemplo, SQL Server em execução no Windows.

Observação

A delegação não deve estar habilitada para cenários de salto único, mas é obrigatória para cenários de vários saltos.

Depois que a autenticação tiver sido executada pelo servidor vinculado usando os mapeamentos definidos pela execução de sp_addlinkedsrvlogin na instância local do SQL Server, as permissões em objetos individuais no banco de dados remoto são determinadas pelo servidor vinculado, não pelo servidor local.

sp_addlinkedsrvlogin não pode ser executado em uma transação definida pelo usuário.

Permissões

Requer a permissão ALTER ANY LOGIN no servidor.

Exemplos

a. Conectando todos os logons locais no servidor vinculado com suas próprias credenciais de usuário

O exemplo a seguir cria um mapeamento para verificar se todos os logons no servidor local se conectam por meio da Accounts do servidor vinculado usando suas próprias credenciais de usuário.

EXEC sp_addlinkedsrvlogin 'Accounts';  

Ou

EXEC sp_addlinkedsrvlogin 'Accounts', 'true';  

Observação

Se houver mapeamentos explícitos criados para logons individuais, eles têm prioridade com relação a qualquer mapeamento global que possa existir para o servidor vinculado.

B. Conectando um logon específico no servidor vinculado com credenciais de usuário diferentes

O exemplo a seguir cria um mapeamento para verificar se o usuário Domain\Mary do Windows se conecta por meio de Accounts do servidor vinculado usando o logon MaryP e a senha d89q3w4u.

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

Importante

Este exemplo não usa a Autenticação do Windows. As senhas serão transmitidas descriptografadas. As senhas podem ser visíveis em definições de fonte de dados e scripts salvos em disco, em backups e em arquivos de log. Nunca use uma senha de administrador nesse tipo de conexão. Consulte o administrador da rede para obter orientações sobre segurança específicas a seu ambiente.

Consulte Também

Exibições do catálogo de servidores vinculados (Transact-SQL)
sp_addlinkedserver (Transact-SQL)
sp_droplinkedsrvlogin (Transact-SQL)
Procedimentos armazenados do sistema (Transact-SQL)