HAS_PERMS_BY_NAME (języka Transact-SQL)

Wynikiem jest skuteczne uprawnień bieżącego użytkownika na zabezpieczany.Funkcja pokrewne fn_my_permissions.

Topic link iconKonwencje składni języka Transact-SQL

HAS_PERMS_BY_NAME ( securable , securable_class , permission  
        [ , sub-securable ] [ , sub-securable_class ] )

Argumenty

  • securable
    Jest nazwą zabezpieczany.If the securable is the server itself, this value should be set to NULL.securable is a scalar expression of type sysname.Brak Brak domyślnej.

  • securable_class
    Is the name of the class of securable against which the permission is tested.securable_class is a scalar expression of type nvarchar(60).

  • permission
    Niepustych wartość skalarna wyrażenie typu sysname które reprezentuje nazwę uprawnienia do sprawdzenia. Brak Brak domyślnej.Nazwa uprawnień ANY jest symbol wieloznaczny.

  • sub-securable
    Opcjonalne wyrażenie wartość skalarna typu sysname które reprezentuje nazwę sub-obiekt zabezpieczanych, od którego jest badany uprawnienia. Wartość domyślna jest równa NULL.

    Uwaga

    W wersjach SQL Server za pomocą SQL Server 2008 Z dodatkiem usługa Pack 2, sub securables nie można użyć nawiasów w formularzu "[sub name'.Użycie "ad nazwa" zamiast niego.

  • sub-securable_class
    Opcjonalne wyrażenie wartość skalarna typu nvarchar(60) reprezentujące klasy zabezpieczany subentity w stosunku do którego jest badany uprawnienia. Wartość domyślna jest równa NULL.

Zwracane typy

int

Zwraca wartość NULL, jeśli kończy się niepowodzeniem.

Remarks

Wbudowana funkcja sprawdza, czy bieżący podmiot ma określonego skuteczne uprawnień w określonej zabezpieczany.HAS_PERMS_BY_NAME zwraca 1, gdy użytkownik ma uprawnienia skuteczne na zabezpieczanych, 0, gdy użytkownik nie ma skutecznego uprawnień na zabezpieczany i jeśli klasy zabezpieczany lub uprawnienie nie jest prawidłowy.Uprawnienie do skutecznego jest jedną z następujących czynności:

  • Uprawnienia udzielone bezpośrednio do głównej i nie są odrzucane.

  • Implikowane przez wyższego poziom uprawnień posiadanych przez głównej i nie odmówiono uprawnienia.

  • Uprawnienia udzielone roli lub grupie, do której główny element członkowski i nie są odrzucane.

  • Uprawnienia roli lub grupie, której członkiem jest główny, a nie odmówiono.

Ocena uprawnienie jest zawsze przeprowadzane w kontekście zabezpieczeń wywołującego.Aby ustalić, czy innego użytkownika, ma uprawnienie do skutecznego, obiekt wywołujący musi mieć uprawnienie do PERSONIFIKACJI na tego użytkownika.

Dla obiektów poziom schematu jedno-, dwu- lub trzy części niepustych nazwy są akceptowane.Dla obiektów bazy danych poziom nazwa jednej części jest akceptowane z zerową wartość znaczenie "bieżącego bazą".Do samego serwera wymagana jest wartość null (znaczenie "bieżącego serwera „).Ta funkcja nie może sprawdzić uprawnień serwer połączony lub na użytkownika systemu Windows, dla którego został utworzony nie podmiotu poziomie serwera.

Następująca kwerenda zwróci listę wbudowanych zabezpieczany klas:

   SELECT class_desc FROM sys.fn_builtin_permissions(default)

Używane są następujące metody sortowania:

  • sortowanie bieżącej bazy danych: Securables poziom bazy danych, zawierające securables nie zawarty w schematu; securables schematu o zakresie jednego lub dwóch części; miejsce docelowe bazy danych, korzystając z trzech części nazwy.

  • Sortowanie bazy danych: Securables poziom serwera.

  • 'ANY' nie jest obsługiwana poziom kolumna kontroli.Należy określić odpowiednie uprawnienie.

Przykłady

A.Czy mam uprawnienie VIEW SERVER STATE poziomie serwera?

SELECT HAS_PERMS_BY_NAME(null, null, 'VIEW SERVER STATE');

B.Am I możliwość PERSONIFIKACJI serwera głównego PS?

SELECT HAS_PERMS_BY_NAME('Ps', 'LOGIN', 'IMPERSONATE');

C.Czy mam żadnych uprawnień w bieżącej bazie danych?

SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');

D.Czy baza danych ma główny PD oficjalnie uprawnienia w bieżącej bazie danych?

Załóżmy, obiekt wywołujący ma uprawnienie do PERSONIFIKACJI na kapitał Pd.

EXECUTE AS user = 'Pd'
GO
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');
GO
REVERT;
GO

E.Czy mogę utworzyć tabele i procedur w schemacie S?

W poniższym przykładzie wymaga ALTER uprawnienia w S i CREATE PROCEDURE uprawnienie w bazie danych i podobnie w przypadku tabel.

SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE PROCEDURE')
    & HAS_PERMS_BY_NAME('S', 'SCHEMA', 'ALTER') AS _can_create_procs,
    HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE TABLE') &
    HAS_PERMS_BY_NAME('S', 'SCHEMA', 'ALTER') AS _can_create_tables;

F.Które tabele czy mam uprawnienie SELECT?

SELECT HAS_PERMS_BY_NAME
(QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name), 
    'OBJECT', 'SELECT') AS have_select, * FROM sys.tables;

G.Czy mam uprawnienie INSERT tabela sprzedawców w AdventureWorks?

W poniższym przykładzie założono AdventureWorks Moje bieżącego kontekstu bazy danych i używa nazwy dwóch części.

SELECT HAS_PERMS_BY_NAME('Sales.SalesPerson', 'OBJECT', 'INSERT');

W poniższym przykładzie założenia, nie informacje o moim bieżącego kontekstu bazy danych i używa nazwy trzy części.

SELECT HAS_PERMS_BY_NAME('AdventureWorks.Sales.SalesPerson', 
    'OBJECT', 'INSERT');

H.Które kolumny tabela T czy mam uprawnienie SELECT?

SELECT name AS column_name, 
    HAS_PERMS_BY_NAME('T', 'OBJECT', 'SELECT', name, 'COLUMN') 
    AS can_select 
    FROM sys.columns AS c 
    WHERE c.object_id=object_id('T');