Tutorial: Criar e utilizar logins de servidor do Microsoft Entra
Aplica-se a:Banco de Dados SQL do Azure Azure SQL Managed InstanceAzure Synapse Analytics (somente pools SQLdedicados)
Este artigo orienta você na criação e utilização de logons apoiados pelo Microsoft Entra ID (anteriormente Azure Ative Directory) no banco de dados virtual master
do Azure SQL.
Neste tutorial, irá aprender a:
- Criar um logon do Microsoft Entra no banco de dados virtual
master
com a nova extensão de sintaxe para o Banco de Dados SQL do Azure - Criar um usuário mapeado para um login do Microsoft Entra no banco de dados virtual
master
- Conceder funções de servidor a um usuário do Microsoft Entra
- Desativar um login do Microsoft Entra
Nota
As entidades de segurança do servidor Microsoft Entra (logons) estão atualmente em visualização pública para o Banco de Dados SQL do Azure. A Instância Gerenciada SQL do Azure já pode utilizar logons do Microsoft Entra.
Pré-requisitos
- Um Banco de Dados SQL ou uma Instância Gerenciada SQL com um banco de dados. Consulte Guia de início rápido: criar um banco de dados único do Banco de Dados SQL do Azure se você ainda não tiver criado um Banco de Dados SQL do Azure ou Guia de início rápido: criar uma instância gerenciada do SQL do Azure.
- Autenticação do Microsoft Entra configurada para Banco de Dados SQL ou Instância Gerenciada. Para obter mais informações, veja Configurar e gerir a autenticação do Microsoft Entra com o SQL do Azure.
- Este artigo instrui você sobre como criar um login e usuário do Microsoft Entra dentro do banco de dados virtual
master
. Somente um administrador do Microsoft Entra pode criar um usuário dentro do banco de dados virtualmaster
, portanto, recomendamos que você use a conta de administrador do Microsoft Entra ao passar por este tutorial. Uma entidade do Microsoft Entra com aloginmanager
função pode criar um login, mas não um usuário dentro do banco de dados virtualmaster
.
Criar login do Microsoft Entra
Crie um logon do Banco de Dados SQL do Azure para uma conta do Microsoft Entra. Em nosso exemplo, usaremos
bob@contoso.com
o que existe em nosso domínio Microsoft Entra chamadocontoso
. Um login também pode ser criado a partir de um grupo do Microsoft Entra ou entidade de serviço (aplicativos). Por exemplo,mygroup
esse é um grupo do Microsoft Entra que consiste em contas do Microsoft Entra que são membros desse grupo. Para obter mais informações, consulte CREATE LOGIN (Transact-SQL).Nota
O primeiro login do Microsoft Entra deve ser criado pelo administrador do Microsoft Entra. O administrador do Microsoft Entra pode ser um usuário ou grupo do Microsoft Entra. Um logon SQL não pode criar logons do Microsoft Entra.
Usando o SQL Server Management Studio (SSMS), faça logon no Banco de Dados SQL com a conta de administrador do Microsoft Entra configurada para o servidor.
Execute a seguinte consulta:
Use master CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER GO
Verifique o login criado em
sys.server_principals
. Execute a seguinte consulta:SELECT name, type_desc, type, is_disabled FROM sys.server_principals WHERE type_desc like 'external%'
Você veria uma saída semelhante à seguinte:
Name type_desc type is_disabled bob@contoso.com EXTERNAL_LOGIN E 0
O login
bob@contoso.com
foi criado no banco de dados virtualmaster
.
Criar usuário a partir de um login do Microsoft Entra
Agora que criamos um login do Microsoft Entra, podemos criar um usuário do Microsoft Entra no nível de banco de dados que é mapeado para o login do Microsoft Entra no banco de dados virtual
master
. Continuaremos a usar nosso exemplobob@contoso.com
para criar um usuário no banco de dados virtualmaster
, pois queremos demonstrar a adição do usuário a funções especiais. Somente um administrador do Microsoft Entra ou administrador do servidor SQL pode criar usuários no banco de dados virtualmaster
.Estamos usando o banco de dados virtual
master
, mas você pode alternar para um banco de dados de sua escolha se quiser criar usuários em outros bancos de dados. Execute a seguinte consulta.Use master CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
Gorjeta
Embora não seja necessário usar aliases de usuário do Microsoft Entra (por exemplo,
bob@contoso.com
), é uma prática recomendada usar o mesmo alias para usuários do Microsoft Entra e logins do Microsoft Entra.Verifique o usuário criado em
sys.database_principals
. Execute a seguinte consulta:SELECT name, type_desc, type FROM sys.database_principals WHERE type_desc like 'external%'
Você veria uma saída semelhante à seguinte:
Name type_desc type bob@contoso.com EXTERNAL_USER E
Nota
A sintaxe existente para criar um usuário do Microsoft Entra sem um login do Microsoft Entra ainda é suportada. A execução da sintaxe a seguir cria um usuário contido no banco de dados dentro do banco de dados específico ao qual você está conectado. É importante ressaltar que esse usuário não está associado a nenhum login, mesmo que exista um login com o mesmo nome no banco de dados virtual master
.
Por exemplo, CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER
.
Conceder funções de nível de servidor a logons do Microsoft Entra
Você pode adicionar logons às funções fixas no nível do servidor, como a função ##MS_DefinitionReader##, ##MS_ServerStateReader## ou ##MS_ServerStateManager##.
Nota
As funções de nível de servidor mencionadas aqui não são suportadas para grupos do Microsoft Entra.
ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateManager## ADD MEMBER [AzureAD_object];
As permissões não são efetivas até que o usuário se reconecte. Libere o cache DBCC também:
DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS
Para verificar quais logons do Microsoft Entra fazem parte de funções no nível do servidor, execute a seguinte consulta:
SELECT roles.principal_id AS RolePID,roles.name AS RolePName,
server_role_members.member_principal_id AS MemberPID, members.name AS MemberPName
FROM sys.server_role_members AS server_role_members
INNER JOIN sys.server_principals AS roles
ON server_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.server_principals AS members
ON server_role_members.member_principal_id = members.principal_id;
Conceder funções especiais para usuários do Microsoft Entra
Funções especiais para o Banco de dados SQL podem ser atribuídas aos usuários no banco de dados virtual master
.
Para conceder uma das funções especiais de banco de dados a um usuário, o usuário deve existir no banco de dados virtual master
.
Para adicionar um usuário a uma função, você pode executar a seguinte consulta:
ALTER ROLE [dbmanager] ADD MEMBER [AzureAD_object]
Para remover um usuário de uma função, execute a seguinte consulta:
ALTER ROLE [dbmanager] DROP MEMBER [AzureAD_object]
AzureAD_object
pode ser um usuário, grupo ou entidade de serviço do Microsoft Entra na ID do Microsoft Entra.
No nosso exemplo, criamos o usuário bob@contoso.com
. Vamos dar ao usuário as funções dbmanager e loginmanager.
Execute a seguinte consulta:
ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com] ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
Verifique a atribuição de função de banco de dados executando a seguinte consulta:
SELECT DP1.name AS DatabaseRoleName, isnull (DP2.name, 'No members') AS DatabaseUserName FROM sys.database_role_members AS DRM RIGHT OUTER JOIN sys.database_principals AS DP1 ON DRM.role_principal_id = DP1.principal_id LEFT OUTER JOIN sys.database_principals AS DP2 ON DRM.member_principal_id = DP2.principal_id WHERE DP1.type = 'R'and DP2.name like 'bob%'
Você veria uma saída semelhante à seguinte:
DatabaseRoleName DatabaseUserName dbmanager bob@contoso.com loginmanager bob@contoso.com
Opcional - Desativar um login
A sintaxe DDL ALTER LOGIN (Transact-SQL) pode ser usada para habilitar ou desabilitar um logon do Microsoft Entra no Banco de Dados SQL do Azure.
ALTER LOGIN [bob@contoso.com] DISABLE
Para que as DISABLE
alterações ou ENABLE
tenham efeito imediato, o cache de autenticação e o cache TokenAndPermUserStore devem ser limpos usando os seguintes comandos T-SQL:
DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS
Verifique se o login foi desativado executando a seguinte consulta:
SELECT name, type_desc, type
FROM sys.server_principals
WHERE is_disabled = 1
Um caso de uso para isso seria permitir somente leitura em réplicas geográficas, mas negar a conexão em um servidor primário.
Consulte também
Para mais informações e exemplos, consulte: