Linked Servers no ambiente SQL Compartilhado SkyNova
No ambiente SQL compartilhado, a criação e administração de Linked Servers é realizada por meio de wrappers SkyNova.
Um wrapper é uma camada intermediária controlada pela plataforma que executa operações administrativas no SQL Server após validar o tenant, o Linked Server solicitado e as permissões aplicáveis.
A utilização do wrapper permite oferecer o recurso de Linked Server ao cliente sem conceder permissões administrativas amplas no nível da instância.
A caixa New Linked Server do SQL Server Management Studio não faz parte do caminho suportado para tenants. Essa interface do SSMS é implementada de forma que exige associação à função fixa de servidor sysadmin. Já as operações T-SQL subjacentes dependem de permissões de servidor como ALTER ANY LINKED SERVER e ALTER ANY LOGIN, que também não são concedidas diretamente ao tenant no ambiente compartilhado.
A plataforma utiliza os wrappers para executar essas operações com controles adicionais de isolamento e segurança.
A eventual visualização do nome de um Linked Server não fornece acesso ao servidor remoto e não permite consultar sua senha. O acesso remoto depende do mapeamento de credencial autorizado para o login/tenant.
1. Criar um Linked Server
USE [master];
GO
EXEC dbo.usp_TenantLinkedServer_Create
@ServerName = N'NOME_LKS', --> Trocar pelo do cliente
@DataSource = N'FQDN_OU_IP,PORTA', --> Trocar pelo do cliente
@RemoteUser = N'usuario_leitura', --> Trocar pelo do cliente
@RemotePassword = N'<digite-senha>', --> Trocar pelo do cliente
@Catalog = NULL,
@TestConnection = 1;
GO2. Testar o Linked Server
EXEC dbo.usp_TenantLinkedServer_Test
@ServerName = N'LKS_ERP'; --> Trocar pelo do cliente
GO3. Listar Linked Servers disponíveis para o tenant
EXEC dbo.usp_TenantLinkedServer_Test @ServerName=N'NOME_LKS'; --> Trocar pelo do cliente
GO
EXEC dbo.usp_TenantLinkedServer_List;
GO4. Validar a identidade utilizada no servidor remoto
SELECT *
FROM OPENQUERY
(
[NOME_LKS], --> Trocar pelo do cliente
'SELECT
SUSER_SNAME() AS QuemChegou,
DB_NAME() AS Banco'
);
GO5. Consultar objetos do servidor remoto
SELECT TOP (100) *
FROM [LKS_ERP].[ERP].[dbo].[TABELA]; --> Trocar pelo do cliente
GO
-->Ou utilizando OPENQUERY:
SELECT *
FROM OPENQUERY
(
[NOME_LKS], --> Trocar pelo do cliente
'SELECT TOP (100) *
FROM ERP.dbo.TABELA' --> Trocar pelo do cliente
);
GO6. Alterar/rotacionar a credencial
EXEC dbo.usp_TenantLinkedServer_SetCredential
@ServerName = N'NOME_LKS', --> Trocar pelo do cliente
@RemoteUser = N'usuario_leitura', --> Trocar pelo do cliente
@RemotePassword = N'<nova-senha>', --> Trocar pelo do cliente
@TestConnection = 1;
GO7. Remover o Linked Server
EXEC dbo.usp_TenantLinkedServer_Drop
@ServerName = N'LKS_ERP', --> Trocar pelo do cliente
@ConfirmServerName = N'LKS_ERP'; --> Trocar pelo do cliente
GO