Configurar o acesso isolado a réplicas nomeadas em Hiperescala

Aplica-se a: Banco de Dados SQL do Azure

Este artigo descreve o procedimento para conceder acesso a uma réplica nomeada Hiperescala do Banco de Dados SQL do Azure sem conceder acesso à réplica primária ou a outras réplicas nomeadas. Esse cenário permite o isolamento de recursos e segurança de uma réplica nomeada, pois a réplica nomeada estará em execução usando seu próprio nó de computação, o que é útil sempre que o acesso somente leitura isolado a um banco de dados de Hiperescala do SQL do Azure for necessário. Isolado, nesse contexto, significa que a CPU e a memória não são compartilhadas entre a réplica primária e a réplica nomeada, as consultas em execução na réplica nomeada não usam recursos de computação do primário ou de qualquer outra réplica e as entidades que acessam a réplica nomeada não podem acessar outras réplicas, incluindo a primária.

Observação

O Microsoft Entra ID era conhecido anteriormente como Azure Active Directory (Azure AD).

Crie um logon no servidor primário

No banco de dados master no servidor lógico que hospeda o banco de dados primário, execute os passos a seguir para criar um novo logon.

Use sua própria senha forte e exclusiva, substituindo strong_password_here por sua senha forte.

CREATE LOGIN [third-party-login] WITH PASSWORD = 'strong_password_here';

Recupere o valor hexadecimal do SID para o logon criado na exibição do sistema sys.sql_logins:

SELECT SID FROM sys.sql_logins WHERE name = 'third-party-login';

Desabilite o logon. Isso prevenirá que esse logon acesse qualquer banco de dados no servidor que hospeda a réplica primária.

ALTER LOGIN [third-party-login] DISABLE;

Criar um usuário no banco de dados de leitura/gravação primário

Depois que o logon tiver sido criado, conecte-se à réplica de leitura/gravação primária do banco de dados, por exemplo WideWorldImporters (você pode encontrar um script de exemplo para restaurá-lo aqui: Restaurar Banco de Dados no SQL do Azure) e criar um usuário de banco de dados para esse logon:

CREATE USER [third-party-user] FROM LOGIN [third-party-login];

Como uma etapa opcional, depois que o usuário do banco de dados tiver sido criado, você poderá soltar o logon do servidor criado na etapa anterior se houver preocupações sobre o logon ser habilitado novamente de alguma forma. Conecte-se ao banco de dados master no servidor lógico que hospeda o banco de dados primário e execute os seguintes scripts de amostra:

DROP LOGIN [third-party-login];

Crie uma réplica nomeada em um servidor lógico diferente

Crie um novo servidor lógico SQL do Azure que será usado para isolar o acesso à réplica nomeada. Siga as instruções disponíveis em Criar e gerenciar servidores lógicos e bancos de dados individuais no Banco de Dados SQL do Azure. Para criar uma réplica nomeada, esse servidor deve estar na mesma região do Azure que o servidor que hospeda a réplica primária.

Na amostra a seguir, substitua strong_password_here por uma senha forte. Por exemplo, usando a CLI do Azure:

az sql server create -g MyResourceGroup -n MyNamedReplicaServer -l MyLocation --admin-user MyAdminUser --admin-password strong_password_here

Em seguida, crie uma réplica nomeada para o banco de dados primário neste servidor. Por exemplo, usando a CLI do Azure:

az sql db replica create -g MyResourceGroup -n WideWorldImporters -s MyPrimaryServer --secondary-type Named --partner-database WideWorldImporters_NR --partner-server MyNamedReplicaServer

Crie um logon no servidor de réplica nomeado

Conexão ao banco de dados master no servidor lógico que hospeda a réplica nomeada, criada na etapa anterior. Substitua strong_password_here pela sua senha forte. Adicione o logon usando o SID recuperado da réplica primária:

CREATE LOGIN [third-party-login] WITH PASSWORD = 'strong_password_here', sid = 0x0...1234;

Neste ponto, os usuários e aplicativos que usam third-party-login ou bob@contoso.com podem conectar-se à réplica nomeada, mas não à réplica primária.

Conceder permissões no nível do objeto no banco de dados

Depois de configurar a autenticação de logon conforme descrito, você poderá usar as instruções regulares GRANT, DENY e REVOKE para gerenciar autorizações ou permissões de nível de objeto no banco de dados. Nessas instruções, confira o nome do usuário que você criou no banco de dados ou uma função de banco de dados que inclui esse usuário como membro. Lembre-se de executar esses comandos na réplica primária. As alterações são propagadas para todas as réplicas secundárias, no entanto, elas só entrarão em vigor na réplica nomeada em que o logon no nível do servidor foi criado.

Lembre-se de que, por padrão, um usuário recém-criado tem um conjunto mínimo de permissões concedidas (por exemplo, ele não pode acessar nenhuma tabela de usuário). Se você quiser permitir que o third-party-user ou bob@contoso.com leia os dados em uma tabela, precisará conceder explicitamente a permissão SELECT:

GRANT SELECT ON [Application].[Cities] to [third-party-user];

Como alternativa à concessão de permissões individualmente em cada tabela, você pode adicionar o usuário à db_datareaders função de banco de dados para permitir acesso de leitura a todas as tabelas ou você pode usar esquemas para permitir acesso a todas as tabelas novas e existentes em um esquema.

Testar o acesso

Você pode testar essa configuração usando qualquer ferramenta de cliente e tentar se conectar à réplica primária e nomeada. Por exemplo, usando sqlcmd, você pode tentar se conectar à réplica primária usando o usuário third-party-login. Substitua strong_password_here pela sua senha forte.

sqlcmd -S MyPrimaryServer.database.windows.net -U third-party-login -P strong_password_here -d WideWorldImporters

Isso resultará em um erro, pois o usuário não tem permissão para se conectar ao servidor:

Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login failed for user 'third-party-login'. Reason: The account is disabled.

A tentativa de se conectar à réplica nomeada é bem-sucedida. Substitua strong_password_here pela sua senha forte.

sqlcmd -S MyNamedReplicaServer.database.windows.net -U third-party-login -P strong_password_here -d WideWorldImporters_NR

Nenhum erro é retornado e as consultas podem ser executadas na réplica nomeada conforme permitido por permissões de nível de objeto concedidas.