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 assignedManaged identityselezionare On, poi Save e YesAbilitazioneattendere qualche secondo per l'abilitazioneAbilitatoLato 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 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.
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 procedureT-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: