Account di accesso e utenti Microsoft Entra con nomi visualizzati non univoci (anteprima)

Si applica a:Database SQL di AzureIstanza gestita di SQL di Azure

Questo articolo illustra come usare la sintassi di Object_ID T-SQL per creare account di accesso e utenti Microsoft Entra con nomi visualizzati non univoci in database SQL di Azure e Istanza gestita di SQL di Azure.

Nota

L'uso di WITH OBJECT_ID per creare utenti e account di accesso in Azure SQL è una funzione attualmente in anteprima.

Panoramica

Microsoft Entra ID supporta l’autenticazione per le entità servizio. Tuttavia, l'uso di un'entità servizio con un nome visualizzato non univoco nel Microsoft Entra ID comporta errori durante la creazione dell'account di accesso o utente in Azure SQL.

Ad esempio, se l'applicazione myapp non è univoca, potrebbe verificarsi l'errore seguente:

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. 

Quando si prova a eseguire l'istruzione T-SQL seguente:

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER 

L’estensione WITH OBJECT_ID

L'errore di nome visualizzato duplicato si verifica perché Microsoft Entra ID consente nomi visualizzati duplicati per l'applicazione Microsoft Entra (entità servizio), mentre Azure SQL richiede nomi univoci per creare account di accesso e utenti di Microsoft Entra. Per prevenire questo problema, l'istruzione DDL (Data Definition Language) per creare account di accesso e gli utenti è stata estesa in modo da includere l'ID oggetto della risorsa di Azure con la clausola WITH OBJECT_ID.

Nota

L'estensione WITH OBJECT_ID è attualmente disponibile in anteprima pubblica.

La maggior parte dei nomi visualizzati non univoci in Microsoft Entra ID è correlata alle entità servizio, anche se occasionalmente i nomi di gruppo possono anche non essere univoci. I nomi delle entità utente di Microsoft Entra sono univoci, perché due utenti non possono avere la stessa entità utente. Tuttavia, è possibile creare una registrazione dell'app (entità servizio) con un nome visualizzato identico a quello di un’entità utente.

Se il nome visualizzato dell'entità servizio non è duplicato, è necessario usare l'istruzione CREATE LOGIN o CREATE USER predefinite. L'estensione WITH OBJECT_ID è in anteprima pubblica ed è un elemento di ripristino, per la risoluzione dei problemi, implementato per l'uso con entità servizio non univoche. Non è consigliabile usarlo con un'entità servizio univoca. L'uso dell'estensione WITH OBJECT_ID per un'entità servizio senza l’aggiunta di un suffisso verrà eseguito correttamente, ma non risulterà chiaro per quale entità servizio sarà stato creato l'account di accesso o l'utente. È consigliabile creare un alias usando un suffisso per identificare in modo univoco l'entità servizio. L'estensione WITH OBJECT_ID non è supportata da SQL Server.

Sintassi di creazione di account di accesso/utente T-SQL per nomi visualizzati non univoci

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

Con l'estensione di supporto DDL T-SQL per creare account di accesso o utenti con l'ID oggetto, è possibile evitare l'errore 33131 e specificare anche un alias per l'account di accesso o l'utente creato con l'ID oggetto. Ad esempio, il codice seguente creerà un account di accesso myapp4466e usando l'ID oggetto applicativo 4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = '4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx' 
  • Per eseguire la query precedente, l'ID oggetto specificato deve esistere nel tenant di Microsoft Entra in cui risiede la risorsa Azure SQL. In caso contrario, il comando CREATE avrà esito negativo con il messaggio di errore: Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission.
  • L'account di accesso o il nome utente devono contenere il nome dell'entità servizio originale esteso da un suffisso definito dall'utente quando si usa l'istruzione CREATE LOGIN o CREATE USER. Come procedura consigliata, il suffisso può includere una parte iniziale del relativo ID oggetto. Ad esempio, myapp2ba6c per l'ID oggetto 2ba6c0a3-cda4-4878-a5ca-xxxxxxxxxxxx. Tuttavia, è anche possibile definire un suffisso personalizzato. Non è necessario basare il suffisso sull'ID oggetto.

Questa convenzione di denominazione è consigliata per associare in modo esplicito l'utente del database o l'account di accesso al relativo oggetto in Microsoft Entra ID.

Nota

L'alias è conforme alla specifica T-SQL per sysname, inclusa la lunghezza massima di 128 caratteri. È consigliabile limitare il suffisso ai primi 5 caratteri dell'ID oggetto.

Il nome visualizzato dell'entità servizio in Microsoft Entra ID non viene sincronizzato con l'account di accesso del database o l'alias utente. L'esecuzione di CREATE LOGIN o CREATE USER non influisce sul nome visualizzato nel portale di Azure. Analogamente, la modifica del nome visualizzato di Microsoft Entra ID non influirà sull'account di accesso del database o sull'alias utente.

Identificare l'utente creato per l'applicazione

Per le entità servizio non univoche, è importante verificare che l'alias Microsoft Entra sia associato all'applicazione corretta. Per verificare che l'utente sia stato creato per l'entità servizio corretta (applicazione):

  1. Ottenere l'ID applicazione dell'applicazione o l'ID oggetto del gruppo Microsoft Entra dall'utente creato in database SQL. Provare le query seguenti:

    • Per ottenere l'ID applicazione dell'entità servizio dall'utente creato, eseguire la query seguente:

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

      Output di esempio:

      Screenshot of SSMS output for the Application ID.

      L'ID applicazione viene convertito dal numero di identificazione di sicurezza (SID) per l'account di accesso o il nome utente specificato, ed è possibile confermarlo eseguendo la query seguente e confrontando le ultime cifre e le date di creazione:

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

      Output di esempio:

      Screenshot of SSMS output for the SID of the application.

    • Per ottenere l'ID oggetto del gruppo Microsoft Entra creato dall'utente, eseguire la query seguente:

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

      Output di esempio:

      Screenshot of SSMS output for the Object ID of the Microsoft Entra group.

      Per controllare il SID del gruppo Microsoft Entra creato dall'utente, eseguire la query seguente:

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

      Output di esempio:

      Screenshot of SSMS output for the SID of the group.

    • Per ottenere l'ID oggetto e l'ID applicazione dell'applicazione usando PowerShell, eseguire il comando seguente:

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Passare al portale di Azure e, nella risorsa dell'applicazione aziendale o del gruppo Microsoft Entra, controllare rispettivamente l'ID applicazione o l'ID oggetto. Verificare che corrisponda a quello ottenuto dalla query precedente.

Nota

Quando si crea un utente da un'entità servizio, l'ID oggetto è obbligatorio quando si usa la clausola WITH OBJECT_ID con l'istruzione T-SQL CREATE. Questo valore è diverso dall'ID applicazione restituito quando si tenta di verificare l'alias in Azure SQL. Usando questo processo di verifica, è possibile identificare l'entità servizio o il gruppo associato all'alias SQL in Microsoft Entra ID ed evitare possibili errori durante la creazione di account di accesso o utenti con un ID oggetto.

Ricerca dell'ID oggetto corretto

Per informazioni sull'ID oggetto di un'entità servizio, vedere Oggetto entità servizio. È possibile individuare l'ID oggetto dell'entità servizio elencata accanto al nome dell'applicazione nel portale di Azure nella sezione Applicazioni aziendali.

Avviso

L'ID oggetto ottenuto nella pagina di panoramica della registrazione dell’app è diverso dall'ID oggetto ottenuto nella pagina di panoramica delle applicazioni aziendali. Nella pagina di panoramica della registrazione dell’app, selezionare il nome dell'applicazione di collegamento applicazione gestita nella directory locale per passare all'ID oggetto corretto nella pagina di panoramica delle applicazioni aziendali.