Разрешения: GRANT, DENY, REVOKE

Область применения:Azure Synapse Analytics Analytics Platform System (PDW)SQL analyticsв хранилище Microsoft Fabric в Microsoft Fabric

Используйте инструкции GRANT и DENY , чтобы предоставить или запретить разрешение (например , UPDATE) для защищаемого объекта (например, базы данных, таблицы, представления и т. д.) субъекту безопасности (имени входа, пользователя базы данных или роли базы данных). Используйте REVOKE, чтобы удалить или отклонить разрешение.

Разрешения уровня сервера применяются к именам входа. Разрешения уровня базы данных применяются к пользователям и ролям базы данных.

Чтобы увидеть, какие разрешения были предоставлены и отклонены, воспользуйтесь запросами к представлениям sys.server_permissions и sys.database_permissions. Разрешения субъекта безопасности, которые не были явно предоставлены или отклонены, могут наследоваться с помощью членства в роли, у которой есть разрешения. Разрешения предопределенных ролей базы данных не могут быть изменены и не отображаются в представлениях sys.server_permissions и sys.database_permissions.

  • GRANT явным образом предоставляет одно или несколько разрешений.

  • DENY явным образом отклоняет одно или несколько разрешений для субъекта.

  • REVOKE удаляет существующие разрешения GRANT или DENY.

Соглашения о синтаксисе Transact-SQL

Синтаксис

-- Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
GRANT   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    TO principal [ ,...n ]  
    [ WITH GRANT OPTION ]  
[;]  
  
DENY   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    TO principal [ ,...n ]  
    [ CASCADE ]  
[;]  
  
REVOKE   
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]   
    [ FROM | TO ] principal [ ,...n ]  
    [ CASCADE ]  
[;]  
  
<permission> ::=  
{ see the tables below }  
  
<class_type> ::=  
{  
      LOGIN  
    | DATABASE  
    | OBJECT  
    | ROLE  
    | SCHEMA  
    | USER  
}  

Аргументы

<permission>[ ,...n ]
Одно или несколько разрешений для предоставления, запрета или отмены.

ON [ <тип_класса> :: ] защищаемый_объект Предложение ON указывает защищаемый объект для предоставления, запрета или отмены разрешений.

<тип_класса> Тип класса защищаемого объекта. Это может быть один из следующих типов: LOGIN, DATABASE, OBJECT, SCHEMA, ROLE и USER. Разрешения также могут предоставляться для типа класса SERVERclass_type, но тип класса SERVER для этих разрешений не указывается. DATABASE не указывается, если разрешение включает слово DATABASE (например, ALTER ANY DATABASE). Если аргумент тип_класса указан и тип разрешения не ограничен классом сервера или базы данных, считается, что используется класс OBJECT.

securable
Имя входа, база данных, таблица, представление, схема, процедура, роль или пользователь, которым необходимо предоставить или запретить или для которых необходимо отменить разрешения. Имя объекта можно указать с помощью правил именования трех частей, описанных в соглашениях синтаксиса Transact-SQL.

TO principal [ ,...n ]
Один или несколько субъектов, которым предоставляются или для которых отклоняются или отменяются разрешения. Субъект — это имя входа, пользователь базы данных или роль базы данных.

FROM principal [ ,...n ]
Один или несколько субъектов, для которых отменяются разрешения. Субъект — это имя входа, пользователь базы данных или роль базы данных. FROM может использоваться только в инструкции REVOKE. TO может использоваться в инструкциях GRANT, DENY или REVOKE.

WITH GRANT OPTION
Показывает, что получающему разрешению будет также дана возможность предоставлять указанное разрешение другим участникам.

CASCADE
Обозначает, что разрешение отклоняется или отменяется для указанного субъекта и всех остальных субъектов, которым этот субъект предоставил разрешение. Требуется, если у субъекта есть разрешение с параметром GRANT OPTION.

GRANT OPTION FOR
Указывает, что возможность предоставлять указанное разрешение будет отменена. Данный аргумент необходим при использовании аргумента CASCADE.

Важно!

Если субъект обладает указанным разрешением без параметра GRANT, будет отменено само разрешение.

Разрешения

Чтобы предоставить разрешение, объект, предоставляющий разрешение, должен иметь либо само разрешение, выданное с помощью параметра GRANT OPTION, либо разрешение более высокого уровня, которое неявно включает предоставляемое разрешение. Владельцы объектов могут предоставлять разрешения на объекты, которыми они владеют. Субъекты, имеющие разрешение CONTROL для защищаемого объекта, могут предоставлять разрешение для этого защищаемого объекта. Члены предопределенных ролей базы данных db_owner и db_securityadmin могут предоставлять любые разрешения в базе данных.

Общие замечания

Отклонение или отмена разрешений для субъекта не повлияет на уже выполняемые запросы, которые прошли авторизацию. Чтобы немедленно ограничить доступ, необходимо отменить активные запросы или завершить текущие сеансы.

Примечание.

Большинство предопределенных ролей сервера не доступны в этом выпуске. Вместо этого используйте пользовательские роли базы данных. Имена входа не могут быть добавлены в предопределенную роль сервера sysadmin. Для предоставления разрешения CONTROL SERVER требуется членство в предопределенной роли сервера sysadmin.

Для некоторых инструкций требуется несколько разрешений. Например, чтобы создать таблицу, необходимы разрешения CREATE TABLE в базе данных и разрешение ALTER SCHEMA для таблицы, которая будет содержать таблицу.

Система платформы аналитики (PDW) иногда выполняет хранимые процедуры для распространения действий пользователей на вычислительные узлы. Поэтому разрешение на выполнение для всей базы данных не может быть отклонено. (Например DENY EXECUTE ON DATABASE::<name> TO <user>; , произойдет сбой.) В качестве обходного действия запретить разрешение на выполнение для пользовательских схем или определенных объектов (процедур).

В Microsoft Fabric в настоящее время невозможно явно выполнить CREATE USER. При выполнении GRANT или DENY пользователь будет автоматически создан.

В Microsoft Fabric разрешения на уровне сервера не управляются.

Явные и неявные разрешения

Явное разрешение — это разрешение GRANT или DENY, предоставляемое субъекту с помощью инструкции GRANT или DENY.

Неявное разрешение — разрешение GRANT или DENY, которое субъект (имя входа, пользователь или роль базы данных) унаследовал от другой роли базы данных.

Неявное разрешение также может быть унаследовано от покрытия или родительского разрешения. Например, разрешение UPDATE для таблицы может быть унаследовано, если у схемы, содержащей таблицу, есть разрешение UPDATE или если у таблицы есть разрешение CONTROL.

Цепочки владения

Если несколько объектов базы данных последовательно обращаются друг к другу, такая последовательность называется цепочкой. Хотя такие цепочки не существуют независимо, когда SQL Server проходит по ссылкам в цепочке, SQL Server оценивает разрешения для составляющих объектов по-разному, чем если бы он был доступ к объектам отдельно. Цепочка владения влияет на управление безопасностью. Дополнительные сведения о цепочках владения см. в разделе Цепочки владения и в разделе Руководство: цепочки владения и переключение контекста.

Список разрешений

Разрешения уровня сервера

Разрешения уровня сервера можно назначать, отклонять и отменять для учетных записей.

Разрешения, которые применяются к серверам

  • CONTROL SERVER

  • ADMINISTER BULK OPERATIONS

  • ALTER ANY CONNECTION

  • ALTER ANY DATABASE

  • CREATE ANY DATABASE

  • ALTER ANY EXTERNAL DATA SOURCE

  • ALTER ANY EXTERNAL FILE FORMAT

  • ALTER ANY LOGIN

  • ALTER SERVER STATE

  • CONNECT SQL

  • VIEW ANY DEFINITION

  • VIEW ANY DATABASE

  • VIEW SERVER STATE

Разрешения, которые применяются к именам входа

  • CONTROL ON LOGIN

  • ALTER ON LOGIN

  • IMPERSONATE ON LOGIN

  • VIEW DEFINITION

Разрешения уровня базы данных

Разрешения уровня базы данных могут предоставляться, отклоняться и отменяться для пользователей базы данных и пользовательских ролей базы данных.

Разрешения, которые применяются ко всем классам базы данных

  • ПРОИЗВОДИТЕЛЬНОСТИ

  • ИЗМЕНИТЬ

  • VIEW DEFINITION

Разрешения, которые применяются ко всем классам базы данных за исключением пользователей

  • TAKE OWNERSHIP

Разрешения, которые применяются только к базам данных

  • ALTER ANY DATABASE

  • ALTER ON DATABASE

  • ALTER ANY DATASPACE

  • ALTER ANY ROLE

  • ALTER ANY SCHEMA

  • ИЗМЕНИТЬ ПОЛЬЗОВАТЕЛЯ

  • BACKUP DATABASE

  • CONNECT ON DATABASE

  • СОЗДАТЬ ПРОЦЕДУРУ

  • CREATE ROLE

  • CREATE SCHEMA

  • СОЗДАТЬ ТАБЛИЦУ

  • СОЗДАТЬ ПРЕДСТАВЛЕНИЕ

  • SHOWPLAN

Разрешения, которые применяются только к пользователям

  • IMPERSONATE

Разрешения, которые применяются к базам данных, схемам и объектам

  • ИЗМЕНИТЬ

  • DELETE

  • ВЫПОЛНИТЬ

  • ВСТАВИТЬ

  • SELECT

  • UPDATE

  • ССЫЛКИ

Определение каждого типа разрешений см. в разделе Разрешения (ядро СУБД).

Диаграмма разрешений

На этой диаграмме графически представлены все разрешения. Это самый простой способ просмотра вложенной иерархии разрешений. Например, разрешение ALTER ON LOGIN можно предоставить само по себе, но оно также включается, если имени входа предоставляется разрешение CONTROL или ALTER ANY LOGIN.

APS security permissions poster

Разрешения по умолчанию

Разрешения по умолчанию приведены в следующем списке:

  • При создании имени входа с помощью инструкции CREATE LOGIN новое имя входа получает разрешение CONNECT SQL.

  • Все имена входа являются участниками роли сервера public и не могут быть удалены из роли public.

  • При создании пользователя базы данных с разрешением CREATE USER пользователь базы данных получает разрешение CONNECT в базе данных.

  • Все субъекты, включая роль public, по умолчанию не имеют явных или неявных разрешений.

  • Если имя входа и пользователь становятся владельцами базы данных или объекта, у имени входа или пользователя всегда есть разрешения для базы данных или объекта. Разрешения владельца не могут быть изменены и не отображаются как явные разрешения. Инструкции GRANT, DENY и REVOKE не оказывают влияния на владельцев.

  • У имени входа sa есть все разрешения на устройстве. Как и разрешения владельца, разрешения sa не могут быть изменены и не отображаются как явные разрешения. Инструкции GRANT, DENY и REVOKE не оказывают влияния на имя входа sa. Имя входа sa не может быть переименовано.

  • Для использования инструкции USE не требуются разрешения. Любой субъект может выполнить инструкцию USE с любой базой данных.

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

А. Предоставление разрешения уровня сервера для имени входа

Две следующие инструкции предоставляют разрешение уровня сервера для имени входа.

GRANT CONTROL SERVER TO [Ted];  
GRANT ALTER ANY DATABASE TO Mary;  

B. Предоставление разрешения уровня сервера для имени входа

В следующем примере разрешение уровня сервера для имени входа предоставляется субъекту сервера (другому имени входа).

GRANT  VIEW DEFINITION ON LOGIN::Ted TO Mary;  

C. Предоставление разрешения уровня базы данных пользователю

В следующем примере разрешение уровня базы данных для пользователя предоставляется субъекту базы данных (другому пользователю).

GRANT VIEW DEFINITION ON USER::[Ted] TO Mary;  

D. Предоставление, отклонение и отмена разрешения схемы

Следующая инструкция GRANT предоставляет Yuen возможность выбора данных из любой таблицы или представления в схеме dbo.

GRANT SELECT ON SCHEMA::dbo TO [Yuen];  

Следующая инструкция DENY запрещает Yuen выбирать данные из всех таблиц и представлений в схеме dbo. Пользователь Yuen не сможет считать данные, даже если у него есть разрешение, полученное другим способом, например через членство в роли.

DENY SELECT ON SCHEMA::dbo TO [Yuen];  

Следующая инструкция REVOKE удаляет разрешение DENY. Теперь явные разрешения пользователя Yuen нейтральны. Yuen может выбирать данные из любой таблицы с помощью неявных разрешений, например, членства в роли.

REVOKE SELECT ON SCHEMA::dbo TO [Yuen];  

Д. Демонстрация необязательного предложения OBJECT::

Поскольку OBJECT является классом по умолчанию для разрешения инструкции, следующие две инструкции одинаковы. Предложение OBJECT:: является необязательным.

GRANT UPDATE ON OBJECT::dbo.StatusTable TO [Ted];  
GRANT UPDATE ON dbo.StatusTable TO [Ted];