Le Managed Identity dei Azure permettono di fare la stessa cosa che si faceva onprem con l'autenticazione integrata.
Ovvero permettono di accedere da un Azure App Services a Azure SQL databases senza dover specificare, in modo esplicito, le credenziali nella connection string.

App Services

L'abilitazione della Managed identity in un Azure App Services avviene accedendo al menù Settings / Identity / System assigned
Managed identity
Managed identity
selezionare On, poi Save e Yes
Abilitazione
Abilitazione
attendere qualche secondo per l'abilitazione
Abilitato
Abilitato
Lato Azure App Services la configurazione è finita.

SQL database

Il passo successivo è andare sul Azure SQL databases ed eseguire il T-SQL di abilitazione sul Database per concedere alla nuova identity i permessi di accesso.
description
description

Collegarsi con SQL Server Management Studio al database ed aggiungere la managed identity

T-SQL: Creazione utente

CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
poi dare i permessi di accesso

T-SQL: Aggiunta permessi

ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
--ALTER ROLE db_owner ADD MEMBER [<identity-name>];
GO

Identity name

L'identity name è la parte dell'host nel fullname dell'app service <identity-name>.azurewebsites.net.

Nel caso di una Azure App Services chiamato app-sgart-temp.azurewebsites.net l'identity name sarà app-sgart-temp.

Quindi l'istruzione T-SQL diventano

T-SQL: Creazione utente e permessi

CREATE USER [app-sgart-temp] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [app-sgart-temp];
ALTER ROLE db_datawriter ADD MEMBER [app-sgart-temp];
GO

Ne caso di uso dei deployment slot, ogni slot avrà la sua identity univoca che sarà nella forma

Text: Identity for slot

<app-name>/slots/<slot-name>
ad esempio

T-SQL: Creazione utente e permessi con slot

CREATE USER [app-sgart-temp/slot/prod] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [app-sgart-temp/slot/prod];
ALTER ROLE db_datawriter ADD MEMBER [app-sgart-temp/slot/prod];
GO

Store Procedure

Nel caso delle store procedure T-SQL, i permessi db_datareader e db_datawriter non sono sufficienti.

In questo caso si può dare il permesso di esecuzione ad ogni singola store (poco pratico), oppure a livello di schema

T-SQL

GRANT EXECUTE ON SCHEMA::<schema name>
    TO [<identity-name>];  
Se si usano solo store procedure per accedere al database non servono altri permessi oltre a quello di execute.

.NET Code

A questo punto, nel progetto .NET, è sufficiente modificare la connection string a Azure SQL databases in questo modo:

JSON: Connection string managed identity

"Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
Da notare la presenza di Authentication=Active Directory Default.
Richiede il package NuGet Microsoft.Data.SqlClient.

Vedi anche Tutorial: Connect to SQL Database from .NET App Service without secrets using a managed identity.
Tags:
Azure App Services1 Azure SQL databases1 .NET66 T-SQL66 Azure7 .NET Core26 SQL Server100
Potrebbe interessarti anche: