Инструкция GRANT (Transact-SQL)

Область применения: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics Analytics Platform System (PDW)

Предоставляет разрешения на защищаемый объект участнику. Общий подход заключается в том, чтобы предоставить <некоторые разрешения> на <некоторый объект><некоторому пользователю, имени входа или группе> (GRANT…ON…TO). Общее описание разрешений см. в разделе Разрешения (ядро СУБД).

Article link iconСинтаксические обозначения в Transact-SQL

Синтаксис

-- Syntax for SQL Server and Azure SQL Database  
  
-- Simplified syntax for GRANT  
GRANT { ALL [ PRIVILEGES ] }  
      | permission [ ( column [ ,...n ] ) ] [ ,...n ]  
      [ ON [ class :: ] securable ] TO principal [ ,...n ]   
      [ WITH GRANT OPTION ] [ AS principal ]  
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse  
  
GRANT
    <permission> [ ,...n ]  
    [ ON [ <class_type> :: ] securable ]
    TO principal [ ,...n ]  
    [ WITH GRANT OPTION ]  
[;]  
  
<permission> ::=  
{ see the tables below }  
  
<class_type> ::=  
{  
      LOGIN  
    | DATABASE  
    | OBJECT  
    | ROLE  
    | SCHEMA  
    | USER  
}  

Примечание

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

ALL
Этот параметр устарел и сохранен только для поддержки обратной совместимости. Он не предоставляет все возможные разрешения. Предоставление разрешения ALL эквивалентно предоставлению следующих разрешений:

  • Если защищаемым объектом является база данных, аргумент ALL относится к разрешениям BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE и CREATE VIEW.

  • Если защищаемым объектом является скалярная функция, аргумент ALL относится к разрешениям EXECUTE и REFERENCES.

  • Если защищаемым объектом является функция с табличным значением, аргумент ALL относится к разрешениям DELETE, INSERT, REFERENCES, SELECT и UPDATE.

  • Если защищаемая сущность является хранимой процедурой, аргумент ALL подразумевает разрешение EXECUTE.

  • Если защищаемым объектом является таблица, аргумент ALL относится к разрешениям DELETE, INSERT, REFERENCES, SELECT и UPDATE.

  • Если защищаемым объектом является представление, аргумент ALL относится к разрешениям DELETE, INSERT, REFERENCES, SELECT и UPDATE.

PRIVILEGES
Включено для обеспечения совместимости с требованиями ISO. Не изменяет работу ALL.

permission
Имя разрешения. Допустимые сопоставления разрешений защищаемых объектов описаны в разделах, перечисленных ниже.

column
Указывает имя столбца таблицы, на который предоставляется разрешение. Необходимы скобки ().

class
Указывает класс защищаемого объекта, для которого предоставляется разрешение. Квалификатор области :: является обязательным.

securable
Указывает защищаемый объект, на который предоставляется разрешение.

TO principal
Имя участника. Состав участников, которым можно предоставлять разрешения, меняется в зависимости от защищаемого объекта. Допустимые сочетания описаны в разделах, перечисленных ниже.

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

AS principal
Используйте предложение AS principal, чтобы указать, что участник, записанный как предоставляющий разрешение, должен быть участником, отличным от пользователя, выполняющего инструкцию. Предположим, что пользователь Мария — это участник 12, пользователь Павел — участник 15. Мария выполняет GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;. В таблице sys.database_permissions для параметра grantor_prinicpal_id будет указано значение 15 (Павел), хотя инструкция была выполнена пользователем 12 (Мария).

Использовать предложение AS обычно не рекомендуется, за исключением необходимости явного определения цепочки разрешения. Дополнительные сведения см. в подразделе Сводка по алгоритму проверки разрешений раздела Разрешения (ядро СУБД).

AS в данной инструкции не дает возможность олицетворять другого пользователя.

Remarks

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

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

Предоставление разрешения удаляет DENY или REVOKE для этого разрешения на данный защищаемый объект. Если то же разрешение запрещено для более высокой области действия, которая содержит данный защищаемый объект, то DENY имеет более высокий приоритет. Но отмена разрешения, выданного в более высокой области действия, не получает такого приоритета.

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

Внимание!

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

Системная хранимая процедура sp_helprotect сообщает о разрешениях на доступ к защищаемым объектам уровня базы данных.

WITH GRANT OPTION

Инструкция GRANT ... WITH GRANT OPTION указывает, что получающему разрешение участнику безопасности дана возможность предоставления определенных разрешений другим учетным записям безопасности. Если участник, получивший данное разрешение, является ролью или группой Windows, то для последующего предоставления разрешения объекта пользователям, которые не являются членами этой группы или роли, необходимо использовать предложение AS. Поскольку именно пользователь, а не группа или роль, может исполнить инструкцию GRANT, при предоставлении разрешения определенный член группы или роли должен использовать предложение AS для явного вызова членства в роли или группе. В следующем примере рассматривается порядок использования разрешения WITH GRANT OPTION, предоставленного роли или группе Windows.

-- Execute the following as a database owner  
GRANT EXECUTE ON TestProc TO TesterRole WITH GRANT OPTION;  
EXEC sp_addrolemember TesterRole, User1;  
-- Execute the following as User1  
-- The following fails because User1 does not have the permission as the User1  
GRANT EXECUTE ON TestMe TO User2;  
-- The following succeeds because User1 invokes the TesterRole membership  
GRANT EXECUTE ON TestMe TO User2 AS TesterRole;  

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

Схему плакатного размера всех разрешений компонента Компонент Database Engine в формате PDF см. по ссылке https://aka.ms/sql-permissions-poster.

Разрешения

Объект, предоставляющий разрешение (или участник, указанный параметром AS), должен иметь либо само разрешение, выданное с помощью параметра GRANT OPTION, либо разрешение более высокого уровня, которое неявно включает предоставляемое. Если используется параметр AS, налагаются дополнительные ограничения. Дополнительные сведения см. в статьях, посвященных конкретным защищаемым объектам.

Владельцы объектов могут предоставлять разрешения на объекты, которыми они владеют. Участники, имеющие разрешение CONTROL на защищаемый объект, могут предоставлять разрешение на этот защищаемый объект.

Участники, которым предоставлено разрешение CONTROL SERVER, такие как члены предопределенной роли сервера <legacyBold>sysadmin</legacyBold>, могут предоставлять любое разрешение на любой защищаемый объект сервера. Участники, получившие разрешение CONTROL на базу данных, такие как члены предопределенной роли базы данных db_owner, могут предоставлять любое разрешение на любой защищаемый объект в базе данных. Владельцы разрешения CONTROL, связанного со схемой, могут предоставлять любые разрешения на работу с любыми объектами, содержащимися в данной схеме.

Примеры

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

Защищаемый объект Синтаксис GRANT
Роль приложения GRANT, предоставление разрешений на участника базы данных (Transact-SQL)
Сборка Разрешения для сборки GRANT (Transact-SQL)
Асимметричный ключ GRANT, предоставление разрешения на ассиметричный ключ (Transact-SQL)
Группа доступности GRANT (предоставление) разрешений группы доступности (Transact-SQL)
Сертификат GRANT, предоставление разрешений на сертификаты (Transact-SQL)
Контракт GRANT, предоставление разрешения на компонент Service Broker (Transact-SQL)
База данных GRANT, предоставление разрешений на базу данных (Transact-SQL)
Учетные данные для базы данных GRANT, предоставление разрешений на учетные данные для базы данных (Transact-SQL)
Конечная точка GRANT, предоставление разрешений на конечные точки (Transact-SQL)
Полнотекстовый каталог GRANT, предоставление разрешений на полнотекстовые объекты (Transact-SQL)
Полнотекстовый список стоп-слов GRANT, предоставление разрешений на полнотекстовые объекты (Transact-SQL)
Функция GRANT, предоставление разрешений на объект (Transact-SQL)
Имя входа GRANT, предоставление разрешений участникам на уровне сервера (Transact-SQL)
Тип сообщений GRANT, предоставление разрешения на компонент Service Broker (Transact-SQL)
Объект GRANT, предоставление разрешений на объект (Transact-SQL)
Очередь GRANT, предоставление разрешений на объект (Transact-SQL)
Привязка удаленной службы GRANT, предоставление разрешения на компонент Service Broker (Transact-SQL)
Роль GRANT, предоставление разрешений на участника базы данных (Transact-SQL)
Маршрут GRANT, предоставление разрешения на компонент Service Broker (Transact-SQL)
схема GRANT, предоставления разрешения на схему (Transact-SQL)
Список свойств поиска Разрешение на список свойств поиска GRANT (Transact-SQL)
Сервер GRANT, предоставление разрешений на сервер (Transact-SQL)
Служба GRANT, предоставление разрешения на компонент Service Broker (Transact-SQL)
Хранимая процедура GRANT, предоставление разрешений на объект (Transact-SQL)
Симметричный ключ Разрешения GRANT на симметричный ключ (Transact-SQL)
Синоним GRANT, предоставление разрешений на объект (Transact-SQL)
Системные объекты GRANT, предоставление разрешений на системный объект (Transact-SQL)
Таблица GRANT, предоставление разрешений на объект (Transact-SQL)
Тип GRANT, предоставление разрешений на тип (Transact-SQL)
Пользователь GRANT, предоставление разрешений на участника базы данных (Transact-SQL)
Представление GRANT, предоставление разрешений на объект (Transact-SQL)
Коллекция схем XML GRANT, предоставление разрешения на коллекцию XML-схем (Transact-SQL)

См. также: