HAS_PERMS_BY_NAME (Transact-SQL)

Ocenia czynne uprawnienia bieżącego użytkownika na zabezpieczany.Pokrewne funkcja jest fn_my_permissions.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

Argumenty

  • securable
    Jest nazwą zabezpieczany.Jeśli zabezpieczany samego serwera, wartość ta powinna być zestaw na NULL.securablewartość skalarnawyrażenie typu sysname.Brak domyślnego.

  • securable_class
    Jest to nazwa klasy zabezpieczany przeciwko któremu bada się uprawnienia.securable_classwartość skalarnawyrażenie typu nvarchar(60).

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

  • sub-securable
    Opcjonalne wartość skalarna wyrażenie typu sysname , reprezentuje nazwę zabezpieczany sub -obiekt wobec którego badane jest uprawnienie.Wartością domyślną jest NULL.

    Ostrzeżenie

    W wersjach SQL Server przez SQL Server 2008 Service Pack 2, sub securables nie można użyć nawiasów w formie ' [pod nazwą".Użycie 'pod nazwą" zamiast.

  • sub-securable_class
    Opcjonalne wartość skalarna wyrażenie typu nvarchar(60) reprezentujące klasy subentity zabezpieczany , przeciwko której uprawnienie jest badany.Wartością domyślną jest NULL.

Zwracane typy

int

Zwraca wartość NULL, gdy kwerenda nie powiedzie się.

Uwagi

Wbudowana funkcja sprawdza, czy bieżący podmiot ma szczególne uprawnienia skuteczne na określonego zabezpieczany.HAS_PERMS_BY_NAME zwraca wartość 1, jeśli użytkownik ma uprawnienie skuteczne na zabezpieczany, 0, gdy użytkownik nie ma skutecznego uprawnień na zabezpieczanyi NULL gdy zabezpieczany klasy lub uprawnień jest nieprawidłowy.Czynne uprawnienia jest jedną z następujących czynności:

  • Uprawnienia udzielone bezpośrednio do kapitału, a nie odmówiono.

  • Uprawnienia wprost przez wyższe-poziom uprawnień posiadanych przez głównego zobowiązanego i nie odmówiono.

  • Uprawnienia przyznane roli lub grupy, które główny zobowiązany jest element członkowskii nie odmówiono.

  • Uprawnienia roli lub grupie, której główny zobowiązany jest element członkowskii nie odmówiono.

Ocena uprawnienie jest zawsze przeprowadzane w kontekście zabezpieczeń wywołującego.Aby ustalić, czy inny użytkownik ma uprawnienia skuteczne, obiekt wywołujący musi mieć uprawnienia PERSONIFIKUJ na tego użytkownika.

Dla schematupoziom podmioty, jedno-, dwu- lub trzech części niepustych nazwy są akceptowane.Dlapoziom obiektów bazy danych — nazwa jednej części jest akceptowane z null wartość znaczenie "bieżącej bazy danych".Samego serwera wymagana jest wartość null (znaczenie "bieżącego serwera").Ta funkcja nie może sprawdzić uprawnienia na serwer połączony lub na użytkownika systemu Windows, dla którego został utworzony nie podmiotpoziom serwera.

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

   SELECT class_desc FROM sys.fn_builtin_permissions(default)

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

  • Bieżąca baza danych sortowanie: Baza danych —poziom securables zawierające securables nie jest zawarty w schemacie; securables o zakresie schematu jednej lub dwóch części; miejsce docelowe baza danych podczas korzystania z nazwy trzech części.

  • mastersortowaniebazy danych Serwer - securablespoziom .

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

Przykłady

A.Czy ma serwer -poziom uprawnień stan WIDOKU serwera?

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

B.Mogę PERSONIFIKUJ serwera Ps głównej?

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 bazy danych głównych Pd mają uprawnienie do bieżącej bazy danych?

Założono wywołujący ma uprawnienia PERSONIFIKUJ na podmiot Pd.

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

E.W schemacie s można tworzyć tabele i procedury?

Poniższy przykład wymaga ALTER uprawnień w S i CREATE PROCEDURE uprawnień w bazie danych i podobnie dla 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 należy wybrać uprawnienia?

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

G.Czy ma uprawnienia do WSTAWIANIA sprzedawcy tabela w AdventureWorks2008R2?

W poniższym przykładzie założono AdventureWorks2008R2 jest mój bieżący kontekst bazy danych i używa nazwy dwóch części.

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

W poniższym przykładzie czyni żadnych założeń mój bieżący kontekst bazy danych i używa nazwy trzech części.

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

H.Które kolumny tabela t należy 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');