Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric
Este artigo ensina-lhe como usar a sintaxe T-SQL Object_ID para criar logins e utilizadores do Microsoft Entra com nomes de visualização não únicos nas bases de dados Azure SQL, Fabric SQL, Azure SQL Managed Instance e SQL Server 2025 e versões posteriores.
Observação
Podes criar utilizadores na base de dados SQL do Fabric, mas não logins.
Visão geral
O Microsoft Entra ID suporta 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 pode causar erros ao criar o login ou o utilizador no SQL Server, Azure SQL Database e Azure SQL Managed Instance.
Por exemplo, se a aplicação myapp não for única, pode deparar-se com 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 o Microsoft Entra ID permite nomes de exibição duplicados para a aplicação Microsoft Entra (principal do serviço), enquanto SQL Server e Azure SQL requerem nomes únicos para criar logins e utilizadores do Microsoft Entra. Para mitigar este problema, a instrução Data Definition Language (DDL) para criar logins e utilizadores foi estendida para incluir o ID de Objeto do recurso Azure com a WITH OBJECT_ID cláusula.
Observação
A maioria dos nomes de exibição não únicos no ID do Microsoft Entra está relacionada com princípios de serviço, embora ocasionalmente os nomes de grupos também possam ser não únicos. Os nomes principais de utilizador do Microsoft Entra são únicos, pois dois utilizadores não podem ter o mesmo nome principal de utilizador. No entanto, pode ser criado um registo de aplicação (principal de serviço) com um nome de exibição que seja igual ao nome principal de utilizador.
Se o nome de exibição do principal do serviço não for um duplicado, a instrução predefinida CREATE LOGIN ou CREATE USER deve ser usada. A extensão WITH OBJECT_ID é um item de reparação para resolução de problemas, destinado ao uso com entidades de serviço não exclusivas. Não é recomendado usá-lo com um princípio de serviço único. Usar a extensão WITH OBJECT_ID para uma entidade de serviço sem adicionar um sufixo será executado com êxito, mas não será óbvio para qual entidade de serviço o login ou usuário foi criado. É recomendável criar um alias usando um sufixo para identificar exclusivamente o principal de serviço. A WITH OBJECT_ID extensão é suportada para SQL Server 2025 e versões posteriores.
O T-SQL cria sintaxe de login/utilizador para nomes de visualização não únicos
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 T-SQL DDL para criar logins ou utilizadores com o ID do Objeto, pode evitar o erro 33131 e também especificar um alias para o login ou utilizador criado com o ID do Objeto. Por exemplo, o exemplo T-SQL seguinte cria um login myapp4466e usando o ID aaaaaaaa-0000-1111-2222-bbbbbbbbbbbbdo Objeto da aplicação .
CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER
WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'
- Para executar esta consulta T-SQL, o ID do Objeto especificado deve existir no tenant Microsoft Entra onde reside o recurso SQL. Caso contrário, o
CREATEcomando 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 login ou utilizador deve conter o nome principal original do serviço, estendido por um sufixo definido pelo utilizador ao usar a
CREATE LOGINinstrução ouCREATE USER. Como boa prática, o sufixo pode incluir uma parte inicial do seu ID de Objeto. Por exemplo,myapp2ba6cpara o IDbbbbbbbb-1111-2222-3333-ccccccccccccdo Objeto . No entanto, também pode definir um sufixo personalizado. Não é necessário formar o sufixo a partir do ID do Objeto.
Esta convenção de nomenclatura é recomendada para associar explicitamente o utilizador da base de dados ou iniciar sessão novamente ao seu objeto no Microsoft Entra ID.
Observação
O alias cumpre a especificação T-SQL para sysname, incluindo um comprimento máximo de 128 caracteres. Recomendamos limitar o sufixo aos primeiros cinco caracteres do ID do Objeto.
O nome de exibição do principal do serviço no Microsoft Entra ID não está sincronizado com o login de base de dados nem com o alias de utilizador. Executar CREATE LOGIN ou CREATE USER não afeta o nome de exibição no portal do Azure. Da mesma forma, modificar o nome de exibição do ID Microsoft Entra não afetará o login da base de dados nem o alias do utilizador.
Identificar o utilizador criado para a aplicação
Para princípios de serviço não únicos, é importante verificar se o alias Microsoft Entra está associado à aplicação correta. Para verificar se o utilizador foi criado para o princípio de serviço correto (aplicação):
Obtenha o ID da aplicação ou o ID do objeto do grupo Microsoft Entra a partir do utilizador criado no Azure SQL ou SQL Server. Veja as seguintes consultas:
Para obter o ID da aplicação do principal de serviço do utilizador criado, execute a seguinte consulta:
SELECT CAST(sid as uniqueidentifier) ApplicationID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c'Exemplo de saída:
A identificação da aplicação é convertida a partir do número de identificação de segurança (SID) para o nome de login ou utilizador especificado, o que pode ser confirmado ao executar a seguinte consulta T-SQL e ao comparar 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:
Para obter o ID de Objeto do grupo Microsoft Entra relativo ao utilizador criado, execute a seguinte consulta:
SELECT CAST(sid as uniqueidentifier) ObjectID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b'Exemplo de saída:
Para verificar o SID do grupo Microsoft Entra a partir do utilizador criado, execute a seguinte consulta:
SELECT SID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b'Exemplo de saída:
Para obter o ID do Objeto e o ID da Aplicação da aplicação usando PowerShell, execute o seguinte comando:
Get-AzADApplication -DisplayName "myapp2ba6c"
Vá ao portal Azure e, na sua aplicação Enterprise ou no recurso do grupo Microsoft Entra, verifique respetivamente o ID da Aplicação ou o ID do Objeto . Vê se corresponde ao que obtivemos na consulta anterior.
Observação
Ao criar um utilizador a partir de um principal de serviço, o ID do Objeto é necessário ao usar a WITH OBJECT_ID cláusula com a CREATE instrução T-SQL. Isto é diferente do ID da aplicação que é devolvido quando tentas verificar o alias no SQL Server. Usando este processo de verificação, pode identificar a entidade de serviço ou grupo associado ao alias SQL no Microsoft Entra ID, e evitar possíveis erros ao criar logins ou utilizadores usando um ID de Objeto.
Encontrar o ID de Objeto correto
Para informações sobre o ID de Objeto de um principal de serviço, veja Objeto principal de serviço. Pode localizar o ID de Objeto do principal de serviço listado ao lado do nome da aplicação no portal Azure, em aplicações empresariais.
Advertência
O ID de Objeto obtido na página de Visão Geral do Registo de Aplicações é diferente do ID de Objeto obtido na página de Visão Geral das Aplicações Empresariais. Se estiver na página de Visão Geral de Registo de Aplicações, selecione a aplicação Gerida cujo nome no diretório local está ligado para navegar até ao ID de Objeto correto na página de Visão Geral de Aplicações Empresariais.
Conteúdo relacionado
- Entidades de (Mecanismo de Banco de Dados)
- CRIAR LOGIN (Transact-SQL)
- CRIAR USUÁRIO (Transact-SQL)