Skip to content

Latest commit

 

History

History
604 lines (491 loc) · 39.6 KB

permissions-database-engine.md

File metadata and controls

604 lines (491 loc) · 39.6 KB
titledescriptionauthorms.authorms.reviewerms.datems.servicems.subservicems.topicms.customf1_keywordshelpviewer_keywordsmonikerRange
Permissions (Database Engine)
Consult this complete list of SQL Server permissions to find out which permissions apply to platforms that you use.
VanMSFT
vanto
randolphwest
05/17/2024
sql
security
conceptual
ignite-2024
sql13.swb.databaseuser.permissions.database.f1--May use common.permissions
sql13.swb.databaseuser.permissions.object.f1--May use common.permissions
REFERENCES permission
permissions [SQL Server]
security [SQL Server], permissions
naming conventions [SQL Server]
>=aps-pdw-2016 || =azuresqldb-current || =azure-sqldw-latest || >=sql-server-2016 || >=sql-server-linux-2017 || =azuresqldb-mi-current || =fabric

Permissions (Database Engine)

[!INCLUDE sql-asdb-asdbmi-asa-pdw-fabricse-fabricdw-fabricsqldb]

Every [!INCLUDE ssNoVersion] securable has associated permissions that can be granted to a principal. Permissions in the [!INCLUDE ssDE] are managed at the server level assigned to logins and server roles, and at the database level assigned to database users and database roles. The model for [!INCLUDE ssazure-sqldb] has the same system for the database permissions, but the server level permissions aren't available. This article contains the complete list of permissions. For a typical implementation of the permissions, see Getting Started with Database Engine Permissions.

The total number of permissions for [!INCLUDE sssql22-md] is 292. [!INCLUDE ssazure-sqldb] exposes 292 permissions. Most permissions apply to all platforms, but some don't. For example, most server level permissions can't be granted on [!INCLUDE ssazure-sqldb], and a few permissions only make sense on [!INCLUDE ssazure-sqldb]. New permissions are being introduced gradually with new releases. [!INCLUDE ssSQLv15_md] exposes 248 permissions.[!INCLUDE sssql17-md] exposed 238 permissions. [!INCLUDE sssql16-md] exposed 230 permissions. [!INCLUDE ssSQL14] exposed 219 permissions. [!INCLUDE ssSQL11] exposed 214 permissions. [!INCLUDE sql2008r2] exposed 195 permissions. The sys.fn_builtin_permissions article specifies which permissions are new in recent versions.

In [!INCLUDE fabric-sqldb], only database-level users and roles are supported. Server-level logins, roles, and the sa account are not available. In [!INCLUDE fabric-sqldb], Microsoft Entra ID for database users is the only supported authentication method. For more information, see Authorization in SQL database in Microsoft Fabric.

Once you understand the permissions required, you can apply server level permissions to logins or server roles, and database level permissions to users or database roles, by using the GRANT, REVOKE, and DENY statements. For example:

GRANTSELECTON SCHEMA::HumanResources TO role_HumanResourcesDept; REVOKESELECTON SCHEMA::HumanResources TO role_HumanResourcesDept;

For tips on planning a permissions system, see Getting Started with Database Engine Permissions.

Permissions naming conventions

The following describes the general conventions that are followed for naming permissions:

  • CONTROL

    Confers ownership-like capabilities on the grantee. The grantee effectively has all defined permissions on the securable. A principal that has been granted CONTROL can also grant permissions on the securable. Because the [!INCLUDE ssNoVersion] security model is hierarchical, CONTROL at a particular scope implicitly includes CONTROL on all the securables under that scope. For example, CONTROL on a database implies all permissions on the database, all permissions on all assemblies in the database, all permissions on all schemas in the database, and all permissions on objects within all schemas within the database.

  • ALTER

    Confers the ability to change the properties, except ownership, of a particular securable. When granted on a scope, ALTER also bestows the ability to alter, create, or drop any securable that is contained within that scope. For example, ALTER permission on a schema includes the ability to create, alter, and drop objects from the schema.

  • ALTER ANY <Server Securable>, where Server Securable can be any server securable.

    Confers the ability to create, alter, or drop individual instances of the Server Securable. For example, ALTER ANY LOGIN confers the ability to create, alter, or drop any login in the instance.

  • ALTER ANY <Database Securable>, where Database Securable can be any securable at the database level.

    Confers the ability to CREATE, ALTER, or DROP individual instances of the Database Securable. For example, ALTER ANY SCHEMA confers the ability to create, alter, or drop any schema in the database.

  • TAKE OWNERSHIP

    Enables the grantee to take ownership of the securable on which it is granted.

  • IMPERSONATE <Login>

    Enables the grantee to impersonate the login.

  • IMPERSONATE <User>

    Enables the grantee to impersonate the user.

  • CREATE <Server Securable>

    Confers to the grantee the ability to create the Server Securable.

  • CREATE <Database Securable>

    Confers to the grantee the ability to create the Database Securable.

  • CREATE <Schema-contained Securable>

    Confers the ability to create the schema-contained securable. However, ALTER permission on the schema is required to create the securable in a particular schema.

  • VIEW DEFINITION

    Enables the grantee to access metadata.

  • REFERENCES

    The REFERENCES permission on a table is needed to create a FOREIGN KEY constraint that references that table.

    The REFERENCES permission is needed on an object to create a FUNCTION or VIEW with the WITH SCHEMABINDING clause that references that object.

Chart of SQL Server permissions

[!INCLUDE database-engine-permissions]

Permissions applicable to specific securables

The following table lists major classes of permissions and the kinds of securables to which they might be applied.

PermissionApplies to
ALTERAll classes of objects except TYPE.
CONTROLAll classes of objects:

AGGREGATE,
APPLICATION ROLE,
ASSEMBLY,
ASYMMETRIC KEY,
AVAILABILITY GROUP,
CERTIFICATE,
CONTRACT,
CREDENTIALS,
DATABASE,
DATABASE SCOPED CREDENTIAL,
DEFAULT,
ENDPOINT,
FULLTEXT CATALOG,
FULLTEXT STOPLIST,
FUNCTION,
LOGIN,
MESSAGE TYPE,
PROCEDURE,
QUEUE,
REMOTE SERVICE BINDING,
ROLE,
ROUTE,
RULE,
SCHEMA,
SEARCH PROPERTY LIST,
SERVER,
SERVER ROLE,
SERVICE,
SYMMETRIC KEY,
SYNONYM,
TABLE,
TYPE,
USER,
VIEW, and
XML SCHEMA COLLECTION
DELETEAll classes of objects except DATABASE SCOPED CONFIGURATION, SERVER, and TYPE.
EXECUTECLR types, external scripts, procedures ([!INCLUDE tsql] and CLR), scalar and aggregate functions ([!INCLUDE tsql] and CLR), and synonyms
IMPERSONATELogins and users
INSERTSynonyms, tables and columns, views and columns. Permission can be granted at the database, schema, or object level.
RECEIVE[!INCLUDE ssSB] queues
REFERENCESAGGREGATE,
ASSEMBLY,
ASYMMETRIC KEY,
CERTIFICATE,
CONTRACT,
CREDENTIAL (applies to [!INCLUDE sql-server-2022] and later),
DATABASE,
DATABASE SCOPED CREDENTIAL,
FULLTEXT CATALOG,
FULLTEXT STOPLIST,
FUNCTION,
MESSAGE TYPE,
PROCEDURE,
QUEUE,
RULE,
SCHEMA,
SEARCH PROPERTY LIST,
SEQUENCE OBJECT,
SYMMETRIC KEY,
TABLE,
TYPE,
VIEW, and
XML SCHEMA COLLECTION
SELECTSynonyms, tables and columns, views and columns. Permission can be granted at the database, schema, or object level.
TAKE OWNERSHIPAll classes of objects except DATABASE SCOPED CONFIGURATION, LOGIN, SERVER, and USER.
UPDATESynonyms, tables and columns, views and columns. Permission can be granted at the database, schema, or object level.
VIEW CHANGE TRACKINGSchemas and tables
VIEW DEFINITIONAll classes of objects except DATABASE SCOPED CONFIGURATION, and SERVER.

Caution

The default permissions that are granted to system objects at the time of setup are carefully evaluated against possible threats and need not be altered as part of hardening the [!INCLUDE ssNoVersion] installation. Any changes to the permissions on the system objects could limit or break the functionality and could potentially leave your [!INCLUDE ssNoVersion] installation in an unsupported state.

SQL Server permissions

The following table provides a complete list of [!INCLUDE ssNoVersion] permissions. [!INCLUDE ssazure-sqldb] permissions are only available for base securables that are supported. Server level permissions can't be granted in [!INCLUDE ssazure-sqldb], however in some cases database permissions are available instead.

Base securableGranular permissions on base securablePermission type codeSecurable that contains base securablePermission on container securable that implies granular permission on base securable
APPLICATION ROLEALTERALDATABASEALTER ANY APPLICATION ROLE
APPLICATION ROLECONTROLCLDATABASECONTROL
APPLICATION ROLEVIEW DEFINITIONVWDATABASEVIEW DEFINITION
ASSEMBLYALTERALDATABASEALTER ANY ASSEMBLY
ASSEMBLYCONTROLCLDATABASECONTROL
ASSEMBLYREFERENCESRFDATABASEREFERENCES
ASSEMBLYTAKE OWNERSHIPTODATABASECONTROL
ASSEMBLYVIEW DEFINITIONVWDATABASEVIEW DEFINITION
ASYMMETRIC KEYALTERALDATABASEALTER ANY ASYMMETRIC KEY
ASYMMETRIC KEYCONTROLCLDATABASECONTROL
ASYMMETRIC KEYREFERENCESRFDATABASEREFERENCES
ASYMMETRIC KEYTAKE OWNERSHIPTODATABASECONTROL
ASYMMETRIC KEYVIEW DEFINITIONVWDATABASEVIEW DEFINITION
AVAILABILITY GROUPALTERALSERVERALTER ANY AVAILABILITY GROUP
AVAILABILITY GROUPCONTROLCLSERVERCONTROL SERVER
AVAILABILITY GROUPTAKE OWNERSHIPTOSERVERCONTROL SERVER
AVAILABILITY GROUPVIEW DEFINITIONVWSERVERVIEW ANY DEFINITION
CERTIFICATEALTERALDATABASEALTER ANY CERTIFICATE
CERTIFICATECONTROLCLDATABASECONTROL
CERTIFICATEREFERENCESRFDATABASEREFERENCES
CERTIFICATETAKE OWNERSHIPTODATABASECONTROL
CERTIFICATEVIEW DEFINITIONVWDATABASEVIEW DEFINITION
CONTRACTALTERALDATABASEALTER ANY CONTRACT
CONTRACTCONTROLCLDATABASECONTROL
CONTRACTREFERENCESRFDATABASEREFERENCES
CONTRACTTAKE OWNERSHIPTODATABASECONTROL
CONTRACTVIEW DEFINITIONVWDATABASEVIEW DEFINITION
CREDENTIALCONTROLCLSERVERCONTROL SERVER
CREDENTIALREFERENCESRFSERVERALTER ANY CREDENTIAL
DATABASEADMINISTER DATABASE BULK OPERATIONSDABOSERVERCONTROL SERVER
DATABASEALTERALSERVERALTER ANY DATABASE
DATABASEALTER ANY APPLICATION ROLEALARSERVERCONTROL SERVER
DATABASEALTER ANY ASSEMBLYALASSERVERCONTROL SERVER
DATABASEALTER ANY ASYMMETRIC KEYALAKSERVERCONTROL SERVER
DATABASEALTER ANY CERTIFICATEALCFSERVERCONTROL SERVER
DATABASEALTER ANY COLUMN ENCRYPTION KEYALCK

Applies to [!INCLUDE ssNoVersion] ([!INCLUDE sssql16-md] through current), [!INCLUDE ssazure-sqldb].
SERVERCONTROL SERVER
DATABASEALTER ANY COLUMN MASTER KEYALCM

Applies to [!INCLUDE ssNoVersion] ([!INCLUDE sssql16-md] through current), [!INCLUDE ssazure-sqldb].
SERVERCONTROL SERVER
DATABASEALTER ANY CONTRACTALSCSERVERCONTROL SERVER
DATABASEALTER ANY DATABASE AUDITALDASERVERALTER ANY SERVER AUDIT
DATABASEALTER ANY DATABASE DDL TRIGGERALTGSERVERCONTROL SERVER
DATABASEALTER ANY DATABASE EVENT NOTIFICATIONALEDSERVERALTER ANY EVENT NOTIFICATION
DATABASEALTER ANY DATABASE EVENT SESSIONAADSSERVERALTER ANY EVENT SESSION
DATABASEALTER ANY DATABASE EVENT SESSION ADD EVENTLDAESERVERALTER ANY EVENT SESSION ADD EVENT
DATABASEALTER ANY DATABASE EVENT SESSION ADD TARGETLDATSERVERALTER ANY EVENT SESSION ADD TARGET
DATABASEALTER ANY DATABASE EVENT SESSION DISABLEDDESSERVERALTER ANY EVENT SESSION DISABLE
DATABASEALTER ANY DATABASE EVENT SESSION DROP EVENTLDDESERVERALTER ANY EVENT SESSION DROP EVENT
DATABASEALTER ANY DATABASE EVENT SESSION DROP TARGETLDDTSERVERALTER ANY EVENT SESSION DROP TARGET
DATABASEALTER ANY DATABASE EVENT SESSION ENABLEEDESSERVERALTER ANY EVENT SESSION ENABLE
DATABASEALTER ANY DATABASE EVENT SESSION OPTIONLDSOSERVERALTER ANY EVENT SESSION OPTION
DATABASEALTER ANY DATABASE SCOPED CONFIGURATIONALDC

Applies to [!INCLUDE ssNoVersion] ([!INCLUDE sssql16-md] through current), [!INCLUDE ssazure-sqldb].
SERVERCONTROL SERVER
DATABASEALTER ANY DATASPACEALDSSERVERCONTROL SERVER
DATABASEALTER ANY EXTERNAL DATA SOURCEAEDSSERVERCONTROL SERVER
DATABASEALTER ANY EXTERNAL FILE FORMATAEFFSERVERCONTROL SERVER
DATABASEALTER ANY EXTERNAL JOBAESJSERVERCONTROL SERVER
DATABASEALTER ANY EXTERNAL LANGUAGEALLASERVERCONTROL SERVER
DATABASEALTER ANY EXTERNAL LIBRARYALELSERVERCONTROL SERVER
DATABASEALTER ANY EXTERNAL STREAMAESTSERVERCONTROL SERVER
DATABASEALTER ANY FULLTEXT CATALOGALFTSERVERCONTROL SERVER
DATABASEALTER ANY MASKAAMK

Applies to [!INCLUDE ssNoVersion] ([!INCLUDE sssql16-md] through current), [!INCLUDE ssazure-sqldb].
SERVERCONTROL SERVER
DATABASEALTER ANY MESSAGE TYPEALMTSERVERCONTROL SERVER
DATABASEALTER ANY REMOTE SERVICE BINDINGALSBSERVERCONTROL SERVER
DATABASEALTER ANY ROLEALRLSERVERCONTROL SERVER
DATABASEALTER ANY ROUTEALRTSERVERCONTROL SERVER
DATABASEALTER ANY SCHEMAALSMSERVERCONTROL SERVER
DATABASEALTER ANY SECURITY POLICYALSP

Applies to [!INCLUDE ssNoVersion] ([!INCLUDE sssql16-md] through current), [!INCLUDE ssazure-sqldb].
SERVERCONTROL SERVER
DATABASEALTER ANY SENSITIVITY CLASSIFICATIONAASC
Applies to [!INCLUDE ssNoVersion] (SQL Server 2019 (15.x) through current), [!INCLUDE ssazure-sqldb].
SERVERCONTROL SERVER
DATABASEALTER ANY SERVICEALSVSERVERCONTROL SERVER
DATABASEALTER ANY SYMMETRIC KEYALSKSERVERCONTROL SERVER
DATABASEALTER ANY USERALUSSERVERCONTROL SERVER
DATABASEALTER LEDGERALRSERVERCONTROL
DATABASEALTER LEDGER CONFIGURATIONALCSERVERCONTROL SERVER
DATABASEAUTHENTICATEAUTHSERVERAUTHENTICATE SERVER
DATABASEBACKUP DATABASEBADBSERVERCONTROL SERVER
DATABASEBACKUP LOGBALOSERVERCONTROL SERVER
DATABASECHECKPOINTCPSERVERCONTROL SERVER
DATABASECONNECTCOSERVERCONTROL SERVER
DATABASECONNECT REPLICATIONCORPSERVERCONTROL SERVER
DATABASECONTROLCLSERVERCONTROL SERVER
DATABASECREATE AGGREGATECRAGSERVERCONTROL SERVER
DATABASECREATE ANY DATABASE EVENT SESSIONCRDSSERVERCREATE ANY EVENT SESSION
DATABASECREATE ASSEMBLYCRASSERVERCONTROL SERVER
DATABASECREATE ASYMMETRIC KEYCRAKSERVERCONTROL SERVER
DATABASECREATE CERTIFICATECRCFSERVERCONTROL SERVER
DATABASECREATE CONTRACTCRSCSERVERCONTROL SERVER
DATABASECREATE DATABASECRDBSERVERCREATE ANY DATABASE
DATABASECREATE DATABASE DDL EVENT NOTIFICATIONCREDSERVERCREATE DDL EVENT NOTIFICATION
DATABASECREATE DEFAULTCRDFSERVERCONTROL SERVER
DATABASECREATE EXTERNAL LANGUAGECRLASERVERCONTROL SERVER
DATABASECREATE EXTERNAL LIBRARYCRELSERVERCONTROL SERVER
DATABASECREATE FULLTEXT CATALOGCRFTSERVERCONTROL SERVER
DATABASECREATE FUNCTIONCRFNSERVERCONTROL SERVER
DATABASECREATE MESSAGE TYPECRMTSERVERCONTROL SERVER
DATABASECREATE PROCEDURECRPRSERVERCONTROL SERVER
DATABASECREATE QUEUECRQUSERVERCONTROL SERVER
DATABASECREATE REMOTE SERVICE BINDINGCRSBSERVERCONTROL SERVER
DATABASECREATE ROLECRRLSERVERCONTROL SERVER
DATABASECREATE ROUTECRRTSERVERCONTROL SERVER
DATABASECREATE RULECRRUSERVERCONTROL SERVER
DATABASECREATE SCHEMACRSMSERVERCONTROL SERVER
DATABASECREATE SERVICECRSVSERVERCONTROL SERVER
DATABASECREATE SYMMETRIC KEYCRSKSERVERCONTROL SERVER
DATABASECREATE SYNONYMCRSNSERVERCONTROL SERVER
DATABASECREATE TABLECRTBSERVERCONTROL SERVER
DATABASECREATE TYPECRTYSERVERCONTROL SERVER
DATABASECREATE USERCUSRSERVERCONTROL SERVER
DATABASECREATE VIEWCRVWSERVERCONTROL SERVER
DATABASECREATE XML SCHEMA COLLECTIONCRXSSERVERCONTROL SERVER
DATABASEDELETEDLSERVERCONTROL SERVER
DATABASEDROP ANY DATABASE EVENT SESSIONDRDSSERVERDROP ANY EVENT SESSION
DATABASEENABLE LEDGERELSERVERCONTROL
DATABASEEXECUTEEXSERVERCONTROL SERVER
DATABASEEXECUTE ANY EXTERNAL ENDPOINTEAEESERVERCONTROL SERVER
DATABASEEXECUTE ANY EXTERNAL SCRIPTEAES

Applies to [!INCLUDE ssNoVersion] ([!INCLUDE sssql16-md] through current).
SERVERCONTROL SERVER
DATABASEINSERTINSERVERCONTROL SERVER
DATABASEKILL DATABASE CONNECTIONKIDC

Only applies to [!INCLUDE ssazure-sqldb]. Use ALTER ANY CONNECTION in [!INCLUDE ssNoVersion].
SERVERALTER ANY CONNECTION
DATABASEREFERENCESRFSERVERCONTROL SERVER
DATABASESELECTSLSERVERCONTROL SERVER
DATABASESHOWPLANSPLNSERVERALTER TRACE
DATABASESUBSCRIBE QUERY NOTIFICATIONSSUQNSERVERCONTROL SERVER
DATABASETAKE OWNERSHIPTOSERVERCONTROL SERVER
DATABASEUNMASKUMSK

Applies to [!INCLUDE ssNoVersion] ([!INCLUDE sssql16-md] through current), [!INCLUDE ssazure-sqldb].
SERVERCONTROL SERVER
DATABASEUPDATEUPSERVERCONTROL SERVER
DATABASEVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONVWCK

Applies to [!INCLUDE ssNoVersion] ([!INCLUDE sssql16-md] through current), [!INCLUDE ssazure-sqldb].
SERVERVIEW SERVER STATE
DATABASEVIEW ANY COLUMN MASTER KEY DEFINITIONVWCM

Applies to [!INCLUDE ssNoVersion] ([!INCLUDE sssql16-md] through current), [!INCLUDE ssazure-sqldb].
SERVERVIEW SERVER STATE
DATABASEVIEW ANY SENSITIVITY CLASSIFICATIONVASCSERVERCONTROL SERVER
DATABASEVIEW CRYPTOGRAPHICALLY SECURED DEFINITIONVCDSERVERVIEW ANY CRYPTOGRAPHICALLY SECURED DEFINITION
DATABASEVIEW DATABASE PERFORMANCE STATEVDPSERVERVIEW SERVER PERFORMANCE STATE
DATABASEVIEW DATABASE SECURITY AUDITVDSASERVERCONTROL SERVER
DATABASEVIEW DATABASE SECURITY STATEVDSSERVERVIEW SERVER SECURITY STATE
DATABASEVIEW DATABASE STATEVWDSSERVERVIEW SERVER STATE
DATABASEVIEW DEFINITIONVWSERVERVIEW ANY DEFINITION
DATABASEVIEW LEDGER CONTENTVLCSERVERCONTROL
DATABASEVIEW SECURITY DEFINITIONVWSSERVERVIEW ANY SECURITY DEFINITION
DATABASEVIEW PERFORMANCE DEFINITIONVWPSERVERVIEW ANY PERFORMANCE DEFINITION
DATABASE SCOPED CREDENTIALALTERALDATABASECONTROL
DATABASE SCOPED CREDENTIALCONTROLCLDATABASECONTROL
DATABASE SCOPED CREDENTIALREFERENCESRFDATABASEREFERENCES
DATABASE SCOPED CREDENTIALTAKE OWNERSHIPTODATABASECONTROL
DATABASE SCOPED CREDENTIALVIEW DEFINITIONVWDATABASEVIEW DEFINITION
ENDPOINTALTERALSERVERALTER ANY ENDPOINT
ENDPOINTCONNECTCOSERVERCONTROL SERVER
ENDPOINTCONTROLCLSERVERCONTROL SERVER
ENDPOINTTAKE OWNERSHIPTOSERVERCONTROL SERVER
ENDPOINTVIEW DEFINITIONVWSERVERVIEW ANY DEFINITION
FULLTEXT CATALOGALTERALDATABASEALTER ANY FULLTEXT CATALOG
FULLTEXT CATALOGCONTROLCLDATABASECONTROL
FULLTEXT CATALOGREFERENCESRFDATABASEREFERENCES
FULLTEXT CATALOGTAKE OWNERSHIPTODATABASECONTROL
FULLTEXT CATALOGVIEW DEFINITIONVWDATABASEVIEW DEFINITION
FULLTEXT STOPLISTALTERALDATABASEALTER ANY FULLTEXT CATALOG
FULLTEXT STOPLISTCONTROLCLDATABASECONTROL
FULLTEXT STOPLISTREFERENCESRFDATABASEREFERENCES
FULLTEXT STOPLISTTAKE OWNERSHIPTODATABASECONTROL
FULLTEXT STOPLISTVIEW DEFINITIONVWDATABASEVIEW DEFINITION
LOGINALTERALSERVERALTER ANY LOGIN
LOGINCONTROLCLSERVERCONTROL SERVER
LOGINIMPERSONATEIMSERVERCONTROL SERVER
LOGINVIEW DEFINITIONVWSERVERVIEW ANY DEFINITION
MESSAGE TYPEALTERALDATABASEALTER ANY MESSAGE TYPE
MESSAGE TYPECONTROLCLDATABASECONTROL
MESSAGE TYPEREFERENCESRFDATABASEREFERENCES
MESSAGE TYPETAKE OWNERSHIPTODATABASECONTROL
MESSAGE TYPEVIEW DEFINITIONVWDATABASEVIEW DEFINITION
OBJECTALTERALSCHEMAALTER
OBJECTCONTROLCLSCHEMACONTROL
OBJECTDELETEDLSCHEMADELETE
OBJECTEXECUTEEXSCHEMAEXECUTE
OBJECTINSERTINSCHEMAINSERT
OBJECTRECEIVERCSCHEMACONTROL
OBJECTREFERENCESRFSCHEMAREFERENCES
OBJECTSELECTSLSCHEMASELECT
OBJECTTAKE OWNERSHIPTOSCHEMACONTROL
OBJECTUNMASKUMSKSCHEMAUNMASK
OBJECTUPDATEUPSCHEMAUPDATE
OBJECTVIEW CHANGE TRACKINGVWCTSCHEMAVIEW CHANGE TRACKING
OBJECTVIEW DEFINITIONVWSCHEMAVIEW DEFINITION
REMOTE SERVICE BINDINGALTERALDATABASEALTER ANY REMOTE SERVICE BINDING
REMOTE SERVICE BINDINGCONTROLCLDATABASECONTROL
REMOTE SERVICE BINDINGTAKE OWNERSHIPTODATABASECONTROL
REMOTE SERVICE BINDINGVIEW DEFINITIONVWDATABASEVIEW DEFINITION
ROLEALTERALDATABASEALTER ANY ROLE
ROLECONTROLCLDATABASECONTROL
ROLETAKE OWNERSHIPTODATABASECONTROL
ROLEVIEW DEFINITIONVWDATABASEVIEW DEFINITION
ROUTEALTERALDATABASEALTER ANY ROUTE
ROUTECONTROLCLDATABASECONTROL
ROUTETAKE OWNERSHIPTODATABASECONTROL
ROUTEVIEW DEFINITIONVWDATABASEVIEW DEFINITION
SCHEMAALTERALDATABASEALTER ANY SCHEMA
SCHEMACONTROLCLDATABASECONTROL
SCHEMACREATE SEQUENCECRSODATABASECONTROL
SCHEMADELETEDLDATABASEDELETE
SCHEMAEXECUTEEXDATABASEEXECUTE
SCHEMAINSERTINDATABASEINSERT
SCHEMAREFERENCESRFDATABASEREFERENCES
SCHEMASELECTSLDATABASESELECT
SCHEMATAKE OWNERSHIPTODATABASECONTROL
SCHEMAUNMASKUMSKDATABASEUNMASK
SCHEMAUPDATEUPDATABASEUPDATE
SCHEMAVIEW CHANGE TRACKINGVWCTDATABASEVIEW CHANGE TRACKING
SCHEMAVIEW DEFINITIONVWDATABASEVIEW DEFINITION
SEARCH PROPERTY LISTALTERALSERVERALTER ANY FULLTEXT CATALOG
SEARCH PROPERTY LISTCONTROLCLSERVERCONTROL
SEARCH PROPERTY LISTREFERENCESRFSERVERREFERENCES
SEARCH PROPERTY LISTTAKE OWNERSHIPTOSERVERCONTROL
SEARCH PROPERTY LISTVIEW DEFINITIONVWSERVERVIEW DEFINITION
SERVERADMINISTER BULK OPERATIONSADBONot applicableNot applicable
SERVERALTER ANY AVAILABILITY GROUPALAGNot applicableNot applicable
SERVERALTER ANY CONNECTIONALCONot applicableNot applicable
SERVERALTER ANY CREDENTIALALCDNot applicableNot applicable
SERVERALTER ANY DATABASEALDBNot applicableNot applicable
SERVERALTER ANY ENDPOINTALHENot applicableNot applicable
SERVERALTER ANY EVENT NOTIFICATIONALESNot applicableNot applicable
SERVERALTER ANY EVENT SESSIONAAESNot applicableNot applicable
SERVERALTER ANY EVENT SESSION ADD EVENTLSAENot applicableNot applicable
SERVERALTER ANY EVENT SESSION ADD TARGETLSATNot applicableNot applicable
SERVERALTER ANY EVENT SESSION DISABLEDESNot applicableNot applicable
SERVERALTER ANY EVENT SESSION DROP EVENTLSDENot applicableNot applicable
SERVERALTER ANY EVENT SESSION DROP TARGETLSDTNot applicableNot applicable
SERVERALTER ANY EVENT SESSION ENABLEEESNot applicableNot applicable
SERVERALTER ANY EVENT SESSION OPTIONLESONot applicableNot applicable
SERVERALTER ANY LINKED SERVERALLSNot applicableNot applicable
SERVERALTER ANY LOGINALLGNot applicableNot applicable
SERVERALTER ANY SERVER AUDITALAANot applicableNot applicable
SERVERALTER ANY SERVER ROLEALSRNot applicableNot applicable
SERVERALTER RESOURCESALRSNot applicableNot applicable
SERVERALTER SERVER STATEALSSNot applicableNot applicable
SERVERALTER SETTINGSALSTNot applicableNot applicable
SERVERALTER TRACEALTRNot applicableNot applicable
SERVERAUTHENTICATE SERVERAUTHNot applicableNot applicable
SERVERCONNECT ANY DATABASECADBNot applicableNot applicable
SERVERCONNECT SQLCOSQNot applicableNot applicable
SERVERCONTROL SERVERCLNot applicableNot applicable
SERVERCREATE ANY DATABASECRDBNot applicableNot applicable
SERVERCREATE AVAILABILITY GROUPCRACNot applicableNot applicable
SERVERCREATE DDL EVENT NOTIFICATIONCRDENot applicableNot applicable
SERVERCREATE ENDPOINTCRHENot applicableNot applicable
SERVERCREATE SERVER ROLECRSRNot applicableNot applicable
SERVERCREATE TRACE EVENT NOTIFICATIONCRTENot applicableNot applicable
SERVEREXTERNAL ACCESS ASSEMBLYXANot applicableNot applicable
SERVERIMPERSONATE ANY LOGINIALNot applicableNot applicable
SERVERSELECT ALL USER SECURABLESSUSNot applicableNot applicable
SERVERSHUTDOWNSHDNNot applicableNot applicable
SERVERUNSAFE ASSEMBLYXUNot applicableNot applicable
SERVERVIEW ANY DATABASEVWDBNot applicableNot applicable
SERVERVIEW ANY DEFINITIONVWADNot applicableNot applicable
SERVERVIEW SERVER STATEVWSSNot applicableNot applicable
SERVER ROLEALTERALSERVERALTER ANY SERVER ROLE
SERVER ROLECONTROLCLSERVERCONTROL SERVER
SERVER ROLETAKE OWNERSHIPTOSERVERCONTROL SERVER
SERVER ROLEVIEW DEFINITIONVWSERVERVIEW ANY DEFINITION
SERVICEALTERALDATABASEALTER ANY SERVICE
SERVICECONTROLCLDATABASECONTROL
SERVICESENDSNDATABASECONTROL
SERVICETAKE OWNERSHIPTODATABASECONTROL
SERVICEVIEW DEFINITIONVWDATABASEVIEW DEFINITION
SYMMETRIC KEYALTERALDATABASEALTER ANY SYMMETRIC KEY
SYMMETRIC KEYCONTROLCLDATABASECONTROL
SYMMETRIC KEYREFERENCESRFDATABASEREFERENCES
SYMMETRIC KEYTAKE OWNERSHIPTODATABASECONTROL
SYMMETRIC KEYVIEW DEFINITIONVWDATABASEVIEW DEFINITION
TYPECONTROLCLSCHEMACONTROL
TYPEEXECUTEEXSCHEMAEXECUTE
TYPEREFERENCESRFSCHEMAREFERENCES
TYPETAKE OWNERSHIPTOSCHEMACONTROL
TYPEVIEW DEFINITIONVWSCHEMAVIEW DEFINITION
USERALTERALDATABASEALTER ANY USER
USERCONTROLCLDATABASECONTROL
USERIMPERSONATEIMDATABASECONTROL
USERVIEW DEFINITIONVWDATABASEVIEW DEFINITION
XML SCHEMA COLLECTIONALTERALSCHEMAALTER
XML SCHEMA COLLECTIONCONTROLCLSCHEMACONTROL
XML SCHEMA COLLECTIONEXECUTEEXSCHEMAEXECUTE
XML SCHEMA COLLECTIONREFERENCESRFSCHEMAREFERENCES
XML SCHEMA COLLECTIONTAKE OWNERSHIPTOSCHEMACONTROL
XML SCHEMA COLLECTIONVIEW DEFINITIONVWSCHEMAVIEW DEFINITION

New granular permissions added to SQL Server 2022

The following permissions are added to SQL Server 2022:

  • 10 new permissions have been added to allow access to system metadata.

  • 18 new permissions have been added for extended events.

  • 9 new permissions have been added with regard to security-related objects.

  • 4 permissions have been added for Ledger.

  • 3 additional database permissions.

For more information, see New granular permissions for SQL Server 2022 and Azure SQL to improve adherence with PoLP.

Access to system metadata permissions

Server level:

  • VIEW ANY SECURITY DEFINITION
  • VIEW ANY PERFORMANCE DEFINITION
  • VIEW SERVER SECURITY STATE
  • VIEW SERVER PERFORMANCE STATE
  • VIEW ANY CRYPTOGRAPHICALLY SECURED DEFINITION

Database level:

  • VIEW DATABASE SECURITY STATE
  • VIEW DATABASE PERFORMANCE STATE
  • VIEW SECURITY DEFINITION
  • VIEW PERFORMANCE DEFINITION
  • VIEW CRYPTOGRAPHICALLY SECURED DEFINITION

Extended events permissions

Server level:

  • CREATE ANY EVENT SESSION
  • DROP ANY EVENT SESSION
  • ALTER ANY EVENT SESSION OPTION
  • ALTER ANY EVENT SESSION ADD EVENT
  • ALTER ANY EVENT SESSION DROP EVENT
  • ALTER ANY EVENT SESSION ENABLE
  • ALTER ANY EVENT SESSION DISABLE
  • ALTER ANY EVENT SESSION ADD TARGET
  • ALTER ANY EVENT SESSION DROP TARGET

All of these permissions are under the same parent-permission: ALTER ANY EVENT SESSION

Database level:

  • CREATE ANY DATABASE EVENT SESSION
  • DROP ANY DATABASE EVENT SESSION
  • ALTER ANY DATABASE EVENT SESSION OPTION
  • ALTER ANY DATABASE EVENT SESSION ADD EVENT
  • ALTER ANY DATABASE EVENT SESSION DROP EVENT
  • ALTER ANY DATABASE EVENT SESSION ENABLE
  • ALTER ANY DATABASE EVENT SESSION DISABLE
  • ALTER ANY DATABASE EVENT SESSION ADD TARGET
  • ALTER ANY DATABASE EVENT SESSION DROP TARGET

All these permissions are under the same parent-permission: ALTER ANY DATABASE EVENT SESSION

Security-related object permissions

  • CONTROL (CREDENTIAL)
  • CREATE LOGIN
  • CREATE USER
  • REFERENCES (CREDENTIAL)
  • UNMASK (OBJECT)
  • UNMASK (SCHEMA)
  • VIEW ANY ERROR LOG
  • VIEW SERVER SECURITY AUDIT
  • VIEW DATABASE SECURITY AUDIT

Ledger permissions

  • ALTER LEDGER
  • ALTER LEDGER CONFIGURATION
  • ENABLE LEDGER
  • VIEW LEDGER CONTENT

Other database permissions

  • ALTER ANY EXTERNAL JOB
  • ALTER ANY EXTERNAL STREAM
  • EXECUTE ANY EXTERNAL ENDPOINT

Summary of the permission check algorithm

Checking permissions can be complex. The permission check algorithm includes overlapping group memberships and ownership chaining, both explicit and implicit permission, and can be affected by the permissions on securable classes that contain the securable entity. The general process of the algorithm is to collect all the relevant permissions. If no blocking DENY is found, the algorithm searches for a GRANT that provides sufficient access. The algorithm contains three essential elements, the security context, the permission space, and the required permission.

Note

You cannot grant, deny, or revoke permissions to sa, dbo, the entity owner, information_schema, sys, or yourself.

  • Security context

    This is the group of principals that contribute permissions to the access check. These are permissions that are related to the current login or user, unless the security context was changed to another login or user by using the EXECUTE AS statement. The security context includes the following principals:

    • The login

    • The user

    • Role memberships

    • Windows group memberships

    • If module signing is being used, any login or user account for the certificate used to sign the module that the user is currently executing, and the associated role memberships of that principal.

  • Permission space

    This is the securable entity and any securable classes that contain the securable. For example, a table (a securable entity) is contained by the schema securable class and by the database securable class. Access can be affected by table-, schema-, database-, and server-level permissions. For more information, see Permissions Hierarchy (Database Engine).

  • Required permission

    The kind of permission that is required. For example, INSERT, UPDATE, DELETE, SELECT, EXECUTE, ALTER, CONTROL, and so on.

    Access can require multiple permissions, as in the following examples:

    • A stored procedure can require both EXECUTE permission on the stored procedure and INSERT permission on several tables that are referenced by the stored procedure.

    • A dynamic management view can require both VIEW SERVER STATE and SELECT permission on the view.

General steps of the algorithm

When the algorithm is determining whether to allow access to a securable, the precise steps that it uses can vary, depending on the principals and the securables that are involved. However, the algorithm performs the following general steps:

  1. Bypass the permission check if the login is a member of the sysadmin fixed server role or if the user is the dbo user in the current database.

  2. Allow access if ownership chaining is applicable and the access check on the object earlier in the chain passed the security check.

  3. Aggregate the server-level, database-level, and signed-module identities that are associated with the caller to create the security context.

  4. For that security context, collect all the permissions that are granted or denied for the permission space. The permission can be explicitly stated as a GRANT, GRANT WITH GRANT, or DENY; or the permissions can be an implied or covering permission GRANT or DENY. For example, CONTROL permission on a schema implies CONTROL on a table. And CONTROL on a table implies SELECT. Therefore, if CONTROL on the schema was granted, SELECT on the table is granted. If CONTROL was denied on the table, SELECT on the table is denied.

    [!NOTE]
    A GRANT of a column-level permission overrides a DENY at the object level. You can read more about his here: DENY Object Permissions (Transact-SQL).

  5. Identify the required permission.

  6. Fail the permission check if the required permission is directly or implicitly denied to any of the identities in the security context for the objects in the permission space.

  7. Pass the permission check if the required permission wasn't denied and the required permission contains a GRANT or a GRANT WITH GRANT permission either directly or implicitly to any of the identities in the security context for any object in the permission space.

Special considerations for column level permissions

Column level permissions are granted with the syntax <table_name>(<column _name>). For example:

GRANTSELECTON OBJECT::Customer(CustomerName) TO UserJoe;

A DENY on the table is overridden by a GRANT on a column. However, a subsequent DENY on the table will remove the column GRANT.

Examples

The examples in this section show how to retrieve permissions information.

A. Return the complete list of grantable permissions

The following statement returns all [!INCLUDE ssDE] permission by using the fn_builtin_permissions function. For more information, see sys.fn_builtin_permissions (Transact-SQL).

SELECT*FROM fn_builtin_permissions(default); GO

B. Return the permissions on a particular class of objects

The following example uses fn_builtin_permissions to view all the permissions that are available for a category of securable. The example returns permissions on assemblies.

SELECT*FROM fn_builtin_permissions('assembly'); GO

C. Return the permissions granted to the executing principal on an object

The following example uses fn_my_permissions to return a list of the effective permissions that are held by the calling principal on a specified securable. The example returns permissions on an object named Orders55. For more information, see sys.fn_my_permissions (Transact-SQL).

SELECT*FROM fn_my_permissions('Orders55', 'object'); GO

D. Return the permissions applicable to a specified object

The following example returns permissions applicable to an object called Yttrium. The built-in function OBJECT_ID is used to retrieve the ID of object Yttrium.

SELECT*FROMsys.database_permissionsWHERE major_id = OBJECT_ID('Yttrium'); GO

Related content

close