Database
 sql >> Base de Dados >  >> RDS >> Database

Restringir um servidor vinculado a um único logon local (exemplo T-SQL)


Neste artigo, configuro um servidor vinculado no SQL Server para que apenas um único logon local possa acessá-lo. Para fazer isso, excluo todos os mapeamentos criados automaticamente ao criar o servidor vinculado, antes de adicionar um mapeamento de login para o login local único.


Configurar o servidor vinculado e o mapeamento de login

EXEC sp_addlinkedserver 
    @server=N'Homer', 
    @srvproduct=N'', 
    @provider=N'MSOLEDBSQL', 
    @datasrc=N'172.17.0.2',
    @catalog='Music';

EXEC sp_droplinkedsrvlogin 'Homer', NULL;

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname=N'Homer', 
    @useself=N'FALSE', 
    @locallogin='Milhouse', 
    @rmtuser=N'Maggie', 
    @rmtpassword=N'BigStrong#Passw0rd';

Este exemplo cria um servidor vinculado chamado Homer. Em seguida, ele descarta todos os mapeamentos de login que são criados automaticamente, antes de adicionar um login para um login local específico chamado Milhouse.

Para nossos propósitos, a linha relevante neste exemplo é @locallogin='Milhouse' . Esta é a linha que especifica que o mapeamento de login deve ser criado para o login local especificado (neste caso 'Milhouse').

Agora Milhouse será o único login local capaz de se conectar ao servidor vinculado.

Como funciona


Quando você usa sp_addlinkedserver para criar um servidor vinculado no SQL Server, um mapeamento padrão entre todos os logons no servidor local e os logons remotos no servidor vinculado é criado automaticamente. O SQL Server usa as credenciais do logon local ao se conectar ao servidor vinculado em nome do logon.

Isso é ótimo se você realmente deseja esses mapeamentos – isso evita que você os crie explicitamente. Mas se você não quiser, você precisará usar sp_droplinkedsrvlogin para removê-los. Foi o que fiz no exemplo acima.

Depois de descartar todos os mapeamentos de login criados automaticamente, você pode usar sp_addlinkedsrvlogin para adicionar um mapeamento para um logon local específico.

Permitir que todos os logins locais compartilhem o mapeamento de login


Você também pode configurá-lo para que todos os logins locais usem o mesmo mapeamento de login (para que não se limite apenas ao Milhouse, por exemplo). Além disso, em vez de ter cada login local mapeado para um login remoto correspondente, eles podem usar o login configurado para o servidor vinculado. Para fazer isso, basta definir @locallogin=NULL . Isso permite que todos os logins locais se conectem ao servidor vinculado, tenham ou não um login remoto correspondente no servidor vinculado.

Consulte Como funcionam os logins em servidores vinculados para obter exemplos de vários logins locais tentando acessar um login de servidor vinculado em diferentes cenários.