## Kedy použiť Keď dva účty s rovnakými rolami správajú inak, alebo pri audite práv. ## Ako čítať výsledok `state_desc` = GRANT / DENY / GRANT_WITH_GRANT_OPTION, `class_desc` určuje úroveň (DATABASE, SCHEMA, OBJECT_OR_COLUMN). Pri stĺpcových právach je vyplnený `column_name`. DENY má prednosť pred GRANT. > [!WARNING] > Nie je to výpočet efektívnych práv: dedenie z rolí, public, sysadmin, vlastníctvo a AD skupiny tu nie sú rozbalené. **Oprávnenia:** Viditeľnosť metadát oprávnení v cieľovej databáze. Spúšťa sa v cieľovej databáze. **Režim:** READ ONLY · **Verzia:** SQL Server 2016 – 2022 ## Súvisiace recepty - [Členstvo v databázových rolách](script.php?id=36&s=clenstvo-v-databazovych-rolach)
Skript
Explicitné GRANT / DENY v databáze
Všetky explicitne pridelené a odobraté práva v aktuálnej databáze – na úrovni databázy, schémy, objektu aj stĺpca.
Parametre skriptu doplň a kopíruj hotový skript
/* DeadlockCafe | Explicitné GRANT / DENY v databáze
Účel: Všetky explicitne pridelené a odobraté práva v aktuálnej databáze – na úrovni databázy, schémy, objektu aj stĺpca.
Režim: READ ONLY | SQL Server 2016 – 2022, on-premises
*/
SET NOCOUNT ON;
SELECT DB_NAME() AS database_name,
p.name AS grantee,
p.type_desc AS grantee_type,
pe.state_desc,
pe.permission_name,
pe.class_desc,
CASE WHEN pe.class_desc = 'OBJECT_OR_COLUMN' THEN OBJECT_SCHEMA_NAME(pe.major_id)
WHEN pe.class_desc = 'SCHEMA' THEN SCHEMA_NAME(pe.major_id)
END AS schema_name,
CASE WHEN pe.class_desc = 'OBJECT_OR_COLUMN' THEN OBJECT_NAME(pe.major_id) END AS object_name,
CASE WHEN pe.class_desc = 'OBJECT_OR_COLUMN' AND pe.minor_id > 0
THEN COL_NAME(pe.major_id, pe.minor_id) END AS column_name,
pe.major_id, pe.minor_id
FROM sys.database_permissions AS pe
JOIN sys.database_principals AS p ON p.principal_id = pe.grantee_principal_id
ORDER BY p.name, pe.class_desc, pe.permission_name;