App Services Managed identity e SQL Server
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.
Collegarsi con SQL Server Management Studio al database ed aggiungere la managed identity
poi dare i permessi di accesso
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
Ne caso di uso dei deployment slot, ogni slot avrà la sua identity univoca che sarà nella forma
ad esempio
In questo caso si può dare il permesso di esecuzione ad ogni singola store (poco pratico), oppure a livello di schema
Vedi anche Tutorial: Connect to SQL Database from .NET App Service without secrets using a managed identity.
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 assignedselezionare On, poi Save e Yesattendere qualche secondo per l'abilitazioneLato 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.Collegarsi con SQL Server Management Studio al database ed aggiungere la managed identity
T-SQL: Creazione utente
CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
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>
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.