sp_addlinkedsrvlogin (Transact-SQL)

Aplica-se a: simSQL Server (todas as versões compatíveis)

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 link do tópico Convenções da sintaxe Transact-SQL

Sintaxe

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

Argumentos

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

[ @useself = ] { 'TRUE' | 'FALSE' | NULL }'
Determina se 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 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 o locallogin especificado. Se rmtuser e rmtpassword também estão definidos como NULL, nenhum logon ou senha é usado para se conectar ao servidor vinculado.

[ @locallogin = ] 'locallogin'
É um logon no servidor local. locallogin é sysname, com um padrão null. NULL especifica que essa entrada se aplica a todos os logons locais que se conectam ao rmtsrvname. Se não for NULL, locallogin poderá ser um SQL Server logon ou um Windows logon. 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 ao rmtsrvname quando @useself é FALSE. Quando o servidor remoto é uma instância do SQL Server que não usa a autenticação Windows, rmtuser é um SQL Server logon. rmtuser é sysname, com um padrão null.

[ @rmtpassword = ] 'rmtpassword'
É a senha associada ao rmtuser. rmtpassword é sysname, com um padrão 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 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 é equivalente à execução sp_addlinkedsrvlogin com definido como true para o servidor @useself 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çã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 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)