2012-10-08 21 views
5

Quando si definiscono le autorizzazioni effettive, mi riferisco alle autorizzazioni elencate quando si entra nelle proprietà di un database in SQL Server Management Studio, fare clic su "Autorizzazioni" e quindi fare clic sulla scheda "Efficace".Come determinare le autorizzazioni effettive per un utente di un database SQL Server tramite C#?

Finora, sono stato in grado di determinare le autorizzazioni esplicite con il seguente codice:

using Microsoft.SqlServer.Management.Smo; 
... 
DatabasePermissionInfo[] permissions = database.EnumDatabasePermissions("username"); 

Tuttavia, ho ancora bisogno di ottenere le autorizzazioni valide. In questo scenario, ho aggiunto un accesso per un utente e gli ho assegnato il ruolo di db_datareader e db_datawriter per un database tramite Mappatura utenti.

Nelle autorizzazioni per il database, le autorizzazioni effettive elencate sono CONNECT, DELETE, INSERT, SELECT, e UPDATE, ma le autorizzazioni esplicite elencano solo i collegamenti (che è l'unica cosa che il codice precedente riporta indietro). Quindi esiste un modo per recuperare anche le autorizzazioni effettive?

Grazie.

+0

prova questo articolo precedente di StackOverflow dovrebbe aiutare http://stackoverflow.com/questions/962482/sql-permissions-to-add-data-and-how-to-verify – MethodMan

risposta

5

Credo che si può chiamare sys.fn_my_permissions:

execute as user = 'SomeUserName' -- Set this to the user name you wish to check 
select * from fn_my_permissions(null, 'DATABASE') -- Leave these arguments, don't change to MyDatabaseName 
order by subentity_name, permission_name 
revert 

Questo mi ha dato gli stessi risultati come l'opzione SSMS lei ha citato.

+0

La sua risposta è eccellente ma per la situazione in cui hai migrato la tua istanza e cambiato i tuoi utenti e login nel processo. Quindi non è possibile utilizzare la tecnica "esegui come utente" e dovrai utilizzare altri metodi. La risposta fornita dall'utente645280 è ottima in questo caso. – Hansjp

Problemi correlati