fn_my_permissions()

Z dokumentacji technet ( http://msdn.microsoft.com/en-us/library/ms176097%28v=sql.105%29.aspx )

Returns a list of the permissions effectively granted to the principal on a securable.

Przy pomocy tego polecenia możemy w szybki sposób sprawdzić nasze uprawnia względem konkretnego obiektu. Obiektem może być serwer, baza i oczywiście wszystkie inne, do których dostęp zarządzany jest przez uprawnienia sql server.
Funkcja przyjmuje dwa argumenty, pierwszy dotyczy ewentualnej nazwy obiektu, druga wyznacza jej poziom.

Przykład 1:

Chcemy sprawdzić uprawnienia w kontekście serwera. Bez względu na bazę, do której jesteśmy aktualnie zapięci możemy wykonać:

Oczywiście ogrom uprawnień wynika z posiadanej przeze mnie roli sysadmin.

Przykład 2:

Sprawdzamy uprawnienia na konkretnej bazie i jako ktoś inny. W tym celu loguję się jako użytkownik testowy (‚test’), który ma jedynie uprawnienia public na bazie AdventureWorks2012, przechodzimy najpierw do niej a następnie wykonujemy zapytanie:

Przykład 3:

Chcemy uzyskać informację jaki dokładnie mamy dostęp do wszystkich obiektów w danej bazie. Ponieważ dostęp do obiektu może być zdefiniowany już na poziomie kolumny, w  wynikach otrzymamy dokładny opis dostępu do każdej kolumny, na której mamy jakieś uprawnienia. Dodajemy zatem użytkownikowi test uprawnienia do jednej tabeli (całej) oraz do pojedynczej kolumny w innej:

Sprawdzamy jakie uprawnienia dostanie użytkownik ‚test’ gdy uruchomi poniższe zapytanie:

 

Widzimy, że wraz z uprawnieniem select do tabeli HumanResources.Employee użytkownik dostał uprawnienia zarówno do wszystkich kolumn tej tabeli jak i do innych obiektów z nią związanych. W przypadku tabeli Person.Password dostęp został nadany tylko do pola ModifiedDate.

 

Wszystkie te informacje pozwala zwrócić jedynie fn_my_permissions(), bez konieczności poszukiwania uprawnień po innych obiektach systemowych.

POST PIERWOTNIE OPUBLIKOWANY JAKO TSQL NA DZIŚ #19

Dodaj komentarz