sp_addlinkedsrvlogin (Transact-SQL)

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.

Ícone de vínculo de tópico Convenções de sintaxe 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 nenhum padrão.

  • [ @useself = ] 'TRUE' | 'FALSE' | 'NULL'
    Determina se a conexão com rmtsrvname deve ser feita com a representação de logons locais ou com o envio explícito de um logon e senha. O tipo de dados é varchar(8), com o padrão TRUE.

    Um valor TRUE especifica que os logons usam suas próprias credenciais para se conectar a rmtsrvname, com os argumentos rmtuser e rmtpassword ignorados. FALSE especifica que os argumentos rmtuser e rmtpassword são usados para conectar-se a rmtsrvname para o locallogin especificado. Se rmtuser e rmtpassword também forem definidos como NULL, nenhum logon ou senha será usado para a conexão com o servidor vinculado.

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

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

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

Valores de 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 utiliza para fazer logon no servidor vinculado.

ObservaçãoObservação

Para criar os melhores planos de consulta quando você estiver usando uma tabela em um servidor viculado, o processador de consulta deverá ter estatísticas de distribuição de dados do servidor viculado. 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 do SQL Server, para obter todas as estatísticas disponíveis, o usuário deverá ser proprietário da tabela ou membro da função de servidor fixa sysadmin, da função de banco de dados fixa db_owner ou da função de banco de dados fixa db_ddladmin 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 de DBCC SHOW_STATISTICS (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 declara que o SQL Server usa as credenciais do usuário do logon local ao se conectar ao servidor vinculado em nome do logon. Isso equivale a executar 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 usar sp_addlinkedsrvlogin para criar um mapeamento de logon predeterminado, o SQL Server pode usar automaticamente as credenciais de segurança do Windows (nome de logon e senha do Windows) de um usuário que emite a consulta para se conectar a um servidor vinculado quando todas as condições a seguir existirem:

  • Um usuário é conectado ao SQL Server pelo 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 oferece suporte para o Modo de Autenticação do Windows; por exemplo, o SQL Server que é executado no Windows.

ObservaçãoObservaçã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.

Após a autenticação ter sido executada pelo servidor vinculado com o uso dos 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 de dentro de 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 usando 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çãoObservaçã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 usando 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';
Observação sobre segurançaObservação sobre segurança

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

Referência

Exibições do catálogo de servidores vinculados (Transact-SQL)

sp_addlinkedserver (Transact-SQL)

sp_droplinkedsrvlogin (Transact-SQL)

Procedimentos armazenados do sistema (Transact-SQL)