sys.database_permissions (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Vrátí řádek pro každé oprávnění nebo oprávnění výjimky sloupce v databázi. Pro sloupce existuje řádek pro každé oprávnění, které se liší od odpovídajícího oprávnění na úrovni objektu. Pokud je oprávnění sloupce stejné jako odpovídající oprávnění objektu, neexistuje pro něj žádný řádek a použité oprávnění je objekt.

Important

Oprávnění na úrovni sloupce přepisuje oprávnění na úrovni objektu ve stejné entitě.

Název sloupce Datový typ Description
class tinyint Identifikuje třídu, pro kterou existuje oprávnění. Další informace naleznete v tématu sys.securable_classes (Transact-SQL).

0 = Databáze
1 = objekt nebo sloupec
3 = schéma
4 = objekt zabezpečení databáze
5 = Sestavení – platí pro: SQL Server 2008 (10.0.x) a novější verze.
6 = Typ
10 = Kolekce schémat XML –
platí pro: SQL Server 2008 (10.0.x) a novější verze.
15 = Typ zprávy – platí pro: SQL Server 2008 (10.0.x) a novější verze.
16 = Servisní kontrakt – platí pro: SQL Server 2008 (10.0.x) a novější verze.
17 = Služba – platí pro: SQL Server 2008 (10.0.x) a novější verze.
18 = Vazba vzdálené služby – platí pro: SQL Server 2008 (10.0.x) a novější verze.
19 = Trasa – platí pro: SQL Server 2008 (10.0.x) a novější verze.
23 = katalogFull-Text – platí pro: SQL Server 2008 (10.0.x) a novější verze.
24 = symetrický klíč – platí pro: SQL Server 2008 (10.0.x) a novější verze.
25 = Certifikát – platí pro: SQL Server 2008 (10.0.x) a novější verze.
26 = Asymetrický klíč – platí pro: SQL Server 2008 (10.0.x) a novější verze.
29 = Fulltext Stoplist - platí pro: SQL Server 2008 (10.0.x) a novější verze.
31 = Seznam vlastností vyhledávání – platí pro: SQL Server 2008 (10.0.x) a novější verze.
32 = Přihlašovací údaje s vymezeným oborem databáze – platí pro: SQL Server 2016 (13.x) a novější verze.
34 = Externí jazyk – platí pro: SQL Server 2019 (15.x) a novější verze.
class_desc nvarchar(60) Popis třídy, pro kterou existuje oprávnění.

DATABASE

OBJECT_OR_COLUMN

SCHEMA

DATABASE_PRINCIPAL

ASSEMBLY

TYPE

XML_SCHEMA_COLLECTION

MESSAGE_TYPE

SERVICE_CONTRACT

SERVICE

REMOTE_SERVICE_BINDING

ROUTE

FULLTEXT_CATALOG

SYMMETRIC_KEYS

CERTIFICATE

ASYMMETRIC_KEY

FULLTEXT STOPLIST

SEARCH PROPERTY LIST

DATABASE SCOPED CREDENTIAL

EXTERNAL LANGUAGE
major_id int ID věci, na které existuje oprávnění, interpretováno podle třídy. Obvykle major_id jednoduše druh ID, který se vztahuje na to, co třída představuje.

0 = samotná databáze

>0 = Object-IDs pro uživatelské objekty

<0 = Object-IDs pro systémové objekty
minor_id int Secondary-ID věcí, na kterých existuje oprávnění, interpretováno podle třídy. minor_id je často nula, protože pro třídu objektu není k dispozici žádná podkategorie. V opačném případě se jedná o Column-ID tabulky.
grantee_principal_id int ID instančního objektu databáze, ke kterému jsou udělena oprávnění.
grantor_principal_id int ID instančního objektu databáze udělovače těchto oprávnění.
type char(4) Typ oprávnění databáze. Seznam typů oprávnění najdete v další tabulce.
permission_name nvarchar(128) Jméno povolení.
state char(1) Povolení uvádí:

D = Odepřít

R = Odvolat

G = Grant

W = Grant s opcí na grant
state_desc nvarchar(60) Popis stavu oprávnění:

DENY

REVOKE

GRANT

GRANT_WITH_GRANT_OPTION

Oprávnění k databázi

Jsou možné následující typy oprávnění.

Typ oprávnění Název oprávnění Platí pro zabezpečitelné
AADS ALTER ANY DATABASEEVENT SESSION DATABASE
AAMK ZMĚNIT JAKOUKOLIV MASKU DATABASE
AEDS Změnit libovolný EXTERNAL DATA SOURCE DATABASE
AEFF Změnit libovolný EXTERNAL FILE FORMAT DATABASE
AL ALTER APPLICATION ROLE, ASSEMBLY, , ASYMMETRIC KEYCERTIFICATE, CONTRACT, , DATABASE, FULLTEXT CATALOG, MESSAGE TYPEOBJEKT, REMOTE SERVICE BINDING, , ROLE, ROUTE, SCHEMASERVICE, , SYMMETRIC KEYUSERXML SCHEMA COLLECTION
ALAK Změnit libovolný ASYMMETRIC KEY DATABASE
ALAR Změnit libovolný APPLICATION ROLE DATABASE
ALAS Změnit libovolný ASSEMBLY DATABASE
ALCF Změnit libovolný CERTIFICATE DATABASE
ALDS ZMĚNIT JAKÝKOLIV DATOVÝ PROSTOR DATABASE
ALED ALTER ANY DATABASEEVENT NOTIFICATION DATABASE
ALFT Změnit libovolný FULLTEXT CATALOG DATABASE
ALMT Změnit libovolný MESSAGE TYPE DATABASE
ALRL Změnit libovolný ROLE DATABASE
ALRT Změnit libovolný ROUTE DATABASE
ALSB Změnit libovolný REMOTE SERVICE BINDING DATABASE
ALSC Změnit libovolný CONTRACT DATABASE
ALSK Změnit libovolný SYMMETRIC KEY DATABASE
ALSM Změnit libovolný SCHEMA DATABASE
ALSV Změnit libovolný SERVICE DATABASE
ALTG UPRAVTE LIBOVOLNÉ DATABASE DDL TRIGGER DATABASE
ALUS Změnit libovolný USER DATABASE
AUTH AUTHENTICATE DATABASE
BADB BACKUP DATABASE DATABASE
BALO BACKUP PROTOKOL DATABASE
CL CONTROL APPLICATION ROLE ASSEMBLY ASYMMETRIC KEY CERTIFICATE, , CONTRACT, DATABASE, , FULLTEXT CATALOG, MESSAGE TYPEOBJEKT, REMOTE SERVICE BINDING, ROLE, , ROUTE, SCHEMASERVICE, , SYMMETRIC KEY, , TYPE, USERXML SCHEMA COLLECTION
CO CONNECT DATABASE
CORP REPLIKACE CONNECT DATABASE
CP CHECKPOINT DATABASE
CRAG CREATE AGGREGATE DATABASE
CRAK CREATE ASYMMETRIC KEY DATABASE
CRAS CREATE ASSEMBLY DATABASE
CRCF CREATE CERTIFICATE DATABASE
CRDB CREATE DATABASE DATABASE
CRDF CREATE DEFAULT DATABASE
CRED CREATE DATABASE DDL EVENT NOTIFICATION DATABASE
CRFN CREATE FUNCTION DATABASE
CRFT CREATE FULLTEXT CATALOG DATABASE
CRMT CREATE MESSAGE TYPE DATABASE
CRPR CREATE PROCEDURE DATABASE
CRQU CREATE QUEUE DATABASE
CRRL CREATE ROLE DATABASE
CRRT CREATE ROUTE DATABASE
CRRU CREATE RULE DATABASE
CRSB CREATE REMOTE SERVICE BINDING DATABASE
CRSC CREATE CONTRACT DATABASE
CRSK CREATE SYMMETRIC KEY DATABASE
CRSM CREATE SCHEMA DATABASE
CRSN CREATE SYNONYM DATABASE
CRSO platí pro: SQL Server 2012 (11.x) a novější verze.

CREATE SEQUENCE
DATABASE
CRSV CREATE SERVICE DATABASE
CRTB CREATE TABLE DATABASE
CRTY CREATE TYPE DATABASE
CRVW CREATE VIEW DATABASE
CRXS platí pro: SQL Server 2008 (10.0.x) a novější verze.

CREATE XML SCHEMA COLLECTION
DATABASE
DABO SPRAVOVAT DATABASE HROMADNÉ OPERACE DATABASE
DL DELETE DATABASE, OBJEKT, SCHEMA
EAES SPUŠTĚNÍ LIBOVOLNÉHO EXTERNÍHO SKRIPTU DATABASE
EX EXECUTE ASSEMBLY, , DATABASEOBJEKT, SCHEMA, TYPE, XML SCHEMA COLLECTION
IM IMPERSONATE USER
IN INSERT DATABASE, OBJEKT, SCHEMA
RC RECEIVE OBJECT
RF REFERENCES ASSEMBLY, ASYMMETRIC KEY, , CERTIFICATECONTRACT, , DATABASE, FULLTEXT CATALOG, MESSAGE TYPEOBJEKT, SCHEMA, , SYMMETRIC KEY, TYPEXML SCHEMA COLLECTION
SL SELECT DATABASE, OBJEKT, SCHEMA
SN SEND SERVICE
SPLN SHOWPLAN DATABASE
SUQN PŘIHLÁŠENÍ K ODBĚRU OZNÁMENÍ DOTAZŮ DATABASE
TO PŘEVEZMĚTE ODPOVĚDNOST ASSEMBLY, ASYMMETRIC KEY, , CERTIFICATECONTRACT, , DATABASE, FULLTEXT CATALOG, MESSAGE TYPEOBJEKT, REMOTE SERVICE BINDING, , ROLE, ROUTE, SCHEMASERVICE, , SYMMETRIC KEY, , TYPEXML SCHEMA COLLECTION
UP UPDATE DATABASE, OBJEKT, SCHEMA
VW VIEW DEFINICE APPLICATION ROLE ASSEMBLY ASYMMETRIC KEY CERTIFICATE, , CONTRACT, DATABASE, , FULLTEXT CATALOG, MESSAGE TYPEOBJEKT, REMOTE SERVICE BINDING, ROLE, , ROUTE, SCHEMASERVICE, , SYMMETRIC KEY, , TYPE, USERXML SCHEMA COLLECTION
VWCK VIEW JAKÁKOLI COLUMN ENCRYPTION KEY DEFINICE DATABASE
VWCM VIEW JAKÁKOLI COLUMN MASTER KEY DEFINICE DATABASE
VWCT VIEW SLEDOVÁNÍ ZMĚN TABLE, SCHEMA
VWDS VIEW DATABASE STÁT DATABASE

REVOKE a oprávnění pro výjimky ve sloupcích

Ve většině případů příkaz REVOKE odstraní nebo GRANTDENY entry z sys.database_permissions.

Nicméně je možné udělat GRANTDENY oprávnění na objektu a pak REVOKE toto oprávnění na sloupci. Toto povolení k výjimce ve sloupci se zobrazí jako REVOKE v sys.database_permissions. Podívejte se na následující příklad:

GRANT SELECT ON Person.Person TO [Sales];

REVOKE SELECT ON Person.Person(AdditionalContactInfo) FROM [Sales];

Tato oprávnění se v sys.database_permissions zobrazí jako jedno GRANT (v tabulce) a jedno REVOKE (ve sloupci).

Important

REVOKE se liší od DENY, protože Sales hlavní subjekt může mít stále přístup ke sloupci prostřednictvím jiných oprávnění. Kdybychom povolení zamítli místo jejich odebrání, nemohli bychom zobrazit obsah sloupce, Sales protože DENY vždy převyšuje GRANT.

Permissions

Každý uživatel může zobrazit vlastní oprávnění. Pro zobrazení oprávnění pro ostatní uživatele je potřeba VIEW DEFINOVAT, ZMĚNIT JAKÉKOLI USER, nebo jakékoli oprávnění na uživateli. Pro zobrazení uživatelsky definovaných rolí je potřeba ALTER JAKÝKOLI ROLE, nebo členství v roli (například veřejné).

Viditelnost metadat v zobrazeních katalogu je omezená na zabezpečitelné, které uživatel vlastní nebo na kterých uživatel udělil určité oprávnění. Další informace naleznete v tématu konfigurace viditelnosti metadat.

Oprávnění pro SQL Server 2022 a novější

Vyžaduje oprávnění VIEW SECURITY DEFINITION k databázi.

Examples

A. Výpis všech oprávnění objektů zabezpečení databáze

Následující dotaz zobrazí seznam oprávnění explicitně udělených nebo odepřených objektům zabezpečení databáze.

Important

Oprávnění pevných databázových rolí se v sys.database_permissionsnezobrazují . Instanční objekty databáze proto můžou mít další oprávnění, která tady nejsou uvedená.

SELECT pr.principal_id
    ,pr.name
    ,pr.type_desc
    ,pr.authentication_type_desc
    ,pe.state_desc
    ,pe.permission_name  
FROM sys.database_principals AS pr  
INNER JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = pr.principal_id;  

B. Výpis oprávnění k objektům schématu v databázi

Následující dotaz spojí sys.database_principals a sys.database_permissions k sys.objects a sys.schemas k výpisu oprávnění udělených nebo odepřených konkrétním objektům schématu.

SELECT pr.principal_id
    ,pr.name
    ,pr.type_desc
    ,pr.authentication_type_desc
    ,pe.state_desc
    ,pe.permission_name
    ,s.name + '.' + o.name AS ObjectName
FROM sys.database_principals AS pr
INNER JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = pr.principal_id
INNER JOIN sys.objects AS o ON pe.major_id = o.object_id
INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id
WHERE pe.class = 1;

C. Seznam oprávnění pro konkrétní objekt

Pomocí předchozího příkladu můžete dotazovat oprávnění specifická pro jeden databázový objekt.

Představte si například následující podrobná oprávnění udělená uživateli databáze vukázkové databáze :

GRANT SELECT ON dbo.vAssocSeqOrders TO [test];

Vyhledejte podrobná oprávnění přiřazená k dbo.vAssocSeqOrders:

SELECT pr.principal_id
    ,pr.name
    ,pr.type_desc
    ,pr.authentication_type_desc
    ,pe.state_desc
    ,pe.permission_name
    ,s.name + '.' + o.name AS ObjectName
FROM sys.database_principals AS pr
INNER JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = pr.principal_id
INNER JOIN sys.objects AS o ON pe.major_id = o.object_id
INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id
WHERE pe.class = 1
    AND o.name = 'vAssocSeqOrders'
    AND s.name = 'dbo';

Vrátí výstup:

principal_id    name    type_desc    authentication_type_desc    state_desc    permission_name    ObjectName
5    test    SQL_USER    INSTANCE    GRANT    SELECT    dbo.vAssocSeqOrders

Další kroky