Compartilhar via


Logons do Microsoft Entra e usuários com nomes de exibição não exclusivos

Aplica-se a: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric

Este artigo ensina como usar a sintaxe T-SQL Object_ID para criar logons e usuários do Microsoft Entra com nomes de exibição não exclusivos no Banco de Dados SQL do Azure, no Banco de Dados SQL do Fabric, na Instância Gerenciada de SQL do Azure e no SQL Server 2025 e nas versões posteriores.

Observação

Você pode criar usuários no Banco de Dados SQL do Fabric, mas não logons.

Visão geral

A ID do Microsoft Entra dá suporte à autenticação para entidades de serviço. No entanto, usar um serviço principal com um nome de exibição que não é único no Microsoft Entra ID leva a erros ao criar o logon ou usuário no SQL Server, no Azure SQL Database e na Instância Gerenciada do Azure SQL.

Por exemplo, se o aplicativo myapp não for exclusivo, você poderá encontrar o seguinte erro:

Msg 33131, Level 16, State 1, Line 4 
Principal 'myapp' has a duplicate display name. Make the display name unique in Azure Active Directory and execute this statement again. 

Ao tentar executar a seguinte instrução T-SQL:

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

A WITH OBJECT_ID extensão

O erro de nome de exibição duplicado ocorre porque a ID do Microsoft Entra permite nomes de exibição duplicados para o aplicativo Microsoft Entra (entidade de serviço), enquanto o SQL Server e o Azure SQL exigem nomes exclusivos para criar logons e usuários do Microsoft Entra. Para atenuar esse problema, a instrução DDL (Linguagem de Definição de Dados) para criar logons e usuários foi estendida para incluir a ID de Objeto do recurso do Azure com a WITH OBJECT_ID cláusula.

Observação

A maioria dos nomes de exibição não únicos na Microsoft Entra ID está relacionada aos principais de serviço, embora ocasionalmente os nomes de grupo também possam ser não únicos. Os nomes principais de usuário do Microsoft Entra são únicos, já que dois usuários não podem ter o mesmo nome principal de usuário. No entanto, um registro de aplicativo (entidade de serviço) pode ser criado com um nome de exibição que seja o mesmo que um nome principal de usuário.

Se o nome de exibição da entidade de serviço não for duplicado, a instrução CREATE LOGIN ou CREATE USER padrão deverá ser usada. A WITH OBJECT_ID extensão é um item de reparo de solução de problemas implementado para uso com entidades de serviço não exclusivas. Não é recomendável usá-la com uma entidade de serviço exclusiva. Usar a extensão WITH OBJECT_ID para uma entidade de serviço sem adicionar um sufixo será uma ação executada com êxito, mas não será óbvio para qual entidade de serviço o logon ou o usuário foi criado. É recomendável criar um alias ao usar um sufixo para identificar exclusivamente a entidade de serviço. A WITH OBJECT_ID extensão tem suporte para o SQL Server 2025 e versões posteriores.

T-SQL cria sintaxe de logon/usuário para nomes de exibição nãouniques

CREATE LOGIN [login_name] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'objectid'
CREATE USER [user_name] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'objectid'

Com a extensão de suporte do DDL do T-SQL para criar logons ou usuários com a ID do Objeto, você pode evitar o erro 33131 e também especificar um alias para o logon ou usuário criado com a ID do Objeto. Por exemplo, o exemplo T-SQL a seguir cria um logon myapp4466e usando a ID aaaaaaaa-0000-1111-2222-bbbbbbbbbbbbdo objeto do aplicativo.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' 
  • Para executar essa consulta T-SQL, a ID de Objeto especificada deve existir no locatário do Microsoft Entra em que o recurso SQL reside. Caso contrário, o CREATE comando falhará com a mensagem de erro: Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission.
  • O nome de usuário ou logon deve conter o nome principal do serviço original estendido por um sufixo definido pelo usuário ao usar a instrução CREATE LOGIN ou a instrução CREATE USER. Como prática recomendada, o sufixo pode incluir uma parte inicial de sua ID de Objeto. Por exemplo, myapp2ba6c para a ID bbbbbbbb-1111-2222-3333-ccccccccccccdo objeto. No entanto, você também pode definir um sufixo personalizado. Não é necessário formar o sufixo da ID do objeto.

Essa convenção de nomenclatura é recomendada para associar explicitamente o usuário ou login do banco de dados ao seu objeto no Microsoft Entra ID.

Observação

O alias segue a especificação T-SQL para sysname, incluindo um comprimento máximo de 128 caracteres. Recomendamos limitar o sufixo aos cinco primeiros caracteres da ID do objeto.

O nome de exibição do principal de serviço no Microsoft Entra ID não é sincronizado com o logon do banco de dados ou o alias do usuário. Executar CREATE LOGIN ou CREATE USER não afetará o nome de exibição no portal do Azure. Da mesma forma, modificar o nome de exibição do Microsoft Entra ID não afetará o login do banco de dados ou o alias do usuário.

Identificar o usuário criado para o aplicativo

Para entidades de serviço não específicas, é importante verificar se o alias do Microsoft Entra está vinculado ao aplicativo correto. Para verificar se o usuário foi criado para a entidade de serviço correta (aplicativo):

  1. Obtenha a ID do aplicativo ou a ID do objeto do grupo Microsoft Entra do usuário criado no SQL do Azure ou no SQL Server. Consulte as seguintes consultas:

    • Para obter o ID do aplicativo do principal do serviço criado pelo usuário, execute a seguinte consulta:

      SELECT CAST(sid as uniqueidentifier) ApplicationID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      Exemplo de saída:

      Captura de tela da saída de consulta do SSMS (SQL Server Management Studio) para a ID do aplicativo.

      O ID do Aplicativo é convertido do SID (número de identificação de segurança) para o nome de usuário ou nome de logon especificado, que podemos confirmar executando a próxima consulta T-SQL e comparando os últimos dígitos e as datas de criação.

      SELECT SID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      Exemplo de saída:

      Captura de tela da saída de consulta do SSMS (SQL Server Management Studio) para o SID do aplicativo.

    • Para obter a ID de objeto do grupo Microsoft Entra do usuário criado, execute a seguinte consulta:

      SELECT CAST(sid as uniqueidentifier) ObjectID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      Exemplo de saída:

      Captura de tela da saída de consulta do SSMS (SQL Server Management Studio) para a ID de objeto do grupo Microsoft Entra.

      Para verificar o SID do grupo Microsoft Entra do usuário criado, execute a seguinte consulta:

      SELECT SID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      Exemplo de saída:

      Captura de tela da saída de consulta do SSMS (SQL Server Management Studio) para o SID do grupo.

    • Para obter a ID do objeto e a ID do aplicativo usando o PowerShell, execute o seguinte comando:

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Vá para o portal do Azure e, no aplicativo Enterprise ou no recurso de grupo do Microsoft Entra, verifique a ID do aplicativo ou a ID do objeto , respectivamente. Veja se ele corresponde ao obtido da consulta anterior.

Observação

Ao criar um usuário a partir de uma entidade de serviço, é necessário o ID do objeto ao usar a cláusula WITH OBJECT_ID com a instrução T-SQL CREATE. Isso é diferente da ID do aplicativo que é retornada quando você está tentando verificar o alias no SQL Server. Usando esse processo de verificação, você pode identificar o principal de serviço ou o grupo associado ao alias do SQL no Microsoft Entra ID e evitar possíveis erros ao criar logins ou usuários com uma ID de objeto.

Localizando a ID correta do objeto

Para obter informações sobre a ID do objeto de um principal de serviço, consulte Objeto principal de serviço. Você pode localizar a ID do objeto da entidade de serviço listada ao lado do nome do aplicativo no portal do Azure em aplicativos empresariais.

Aviso

O ID do objeto obtido na página Visão Geral do Registro de Aplicativo é diferente do ID do Objeto obtido na página Visão Geral de Aplicativos Empresariais. Se você estiver na página Visão geral do registro do aplicativo, selecione o aplicativo gerenciado vinculado no nome do aplicativo de diretório local para navegar até a ID de Objeto correta na página Visão geral dos aplicativos empresariais .