2012-10-08 6 views
5

Kiedy mówię o skutecznych uprawnieniach, mam na myśli uprawnienia wymienione po przejściu do właściwości bazy danych w SQL Server Management Studio, kliknij "Uprawnienia", a następnie kliknij kartę "Skuteczna".Jak określić skuteczne uprawnienia dla użytkownika bazy danych SQL Server za pośrednictwem C#?

Do tej pory udało się ustalić wyraźne uprawnienia z następującego kodu:

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

Ja jednak nadal potrzebne do uzyskania skutecznych uprawnień. W tym scenariuszu dodałem login dla użytkownika i nadałem mu rolę db_datareader i db_datawriter dla bazy danych za pomocą mapowania użytkownika.

W uprawnieniach do bazy danych wymieniono wymienione uprawnienia efektywne: CONNECT, DELETE, INSERT, SELECT, i UPDATE, ale lista dozwolonych uprawnień jawnie się łączy (co jest jedyną rzeczą, którą powyższy kod cofa). Czy istnieje sposób, aby programowo pobrać skuteczne uprawnienia?

Dzięki.

+0

spróbować tego stackoverflow poprzedni wpis powinien pomóc http://stackoverflow.com/questions/962482/sql-permissions-to-add-data-and-how-to-verify – MethodMan

Odpowiedz

5

Wierzę, że można zadzwonić 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 

To dało mi takie same wyniki jak w opcji SSMS pan wspomniał.

+0

Jego odpowiedź jest doskonała, ale dla sytuacji, w której migrowałeś twoją instancję i zmieniłeś w niej użytkowników i loginy. Wtedy nie możesz użyć techniki "wykonaj jako użytkownik" i będziesz musiał użyć innych metod. Odpowiedź podana przez user645280 jest w tym przypadku świetna. – Hansjp