Ho lavorato al mio primo progetto Entity Framework. Come parte del progetto, creerò una serie di rapporti SSRS. Per connettermi al database ho bisogno di avere un utente di Report che acceda solo al database specifico sul server. In passato ho sempre scritto uno script per aggiungere utenti del database ma voglio sapere c'è un modo in cui posso farlo usando Entity Framework invece?
Dovresti dire a EF di usare le stored procedure appropriate per farlo. Potresti anche avvolgerli in uno sproc of your own che avvolge i comandi rilevanti. Non esiste un metodo di tipo nativo "CreateReportsUser" in EF che io conosca.
Edit: Probabilmente avrei dovuto fornire questo riferimento per essere una risposta "completa". Scuse.
Ecco come puoi fare ciò che consiglio: Come chiamare Stored Procedure in Entity Framework 6 (Code-First)?
Supponendo che l'utente abbia già un accesso definito a livello di SQL Server (Sicurezza> Login), è possibile chiamare il seguente metodo dal metodo seme inizializzatore DB per aggiungere l'utente al database:
private void AddDbUser(MyDataContext myDB)
{
string accountDomainName = "AccountDomainName"; // replace with user's login domain
string accountLoginID = "AccountLoginID"; // replace with user's login ID
string sql =
"USE [MyDB]" +
"CREATE USER [MyNewUser] FOR LOGIN [" + accountDomainName + "\\" + accountLoginID + "]" +
"ALTER AUTHORIZATION ON SCHEMA::[db_datareader] TO [" + accountLoginID + "]" +
"ALTER AUTHORIZATION ON SCHEMA::[db_datawriter] TO [" + accountLoginID + "]" +
"EXEC sp_addrolemember N'db_datawriter', N'" + accountLoginID + "'" +
"EXEC sp_addrolemember N'db_datareader', N'" + accountLoginID + "'";
myDB.Database.ExecuteSqlCommand(sql);
}
L'esatta SQL necessaria può variare. Per generare l'SQL per lo scenario, è possibile aprire la finestra di dialogo Aggiungi utente in SSMS (Database> Utenti> Nuovo utente ...), compilare i campi e fare clic sul pulsante "Script" nella parte superiore anziché premere OK al parte inferiore. Nota che tutte le linee "GO" dovranno essere rimosse dallo script generato prima di incollarlo nel metodo sopra.