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

ОБЛАСТЬ ПРИМЕНЕНИЯ:даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Предоставляет разрешения на защищаемый объект участнику.Grants permissions on a securable to a principal. Общий подход заключается в том, чтобы предоставить <некоторые разрешения> на <некоторый объект> <некоторому пользователю, имени входа или группе> (GRANT…ON…TO).The general concept is to GRANT <some permission> ON <some object> TO <some user, login, or group>. Общее описание разрешений см. в разделе Разрешения (ядро СУБД).For a general discussion of permissions, see Permissions (Database Engine).

Значок ссылки на статью Синтаксические обозначения в Transact-SQLArticle link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

-- 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 SQL Data Warehouse 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  
}  

АргументыArguments

ALLALL
Этот параметр устарел и сохранен только для поддержки обратной совместимости.This option is deprecated and maintained only for backward compatibility. Он не предоставляет все возможные разрешения.It does not grant all possible permissions. Предоставление разрешения ALL эквивалентно предоставлению следующих разрешений:Granting ALL is equivalent to granting the following permissions:

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

  • Если защищаемым объектом является скалярная функция, аргумент ALL относится к разрешениям EXECUTE и REFERENCES.If the securable is a scalar function, ALL means EXECUTE and REFERENCES.

  • Если защищаемым объектом является функция с табличным значением, аргумент ALL относится к разрешениям DELETE, INSERT, REFERENCES, SELECT и UPDATE.If the securable is a table-valued function, ALL means DELETE, INSERT, REFERENCES, SELECT, and UPDATE.

  • Если защищаемая сущность является хранимой процедурой, аргумент ALL подразумевает разрешение EXECUTE.If the securable is a stored procedure, ALL means EXECUTE.

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

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

PRIVILEGESPRIVILEGES
Включено для обеспечения совместимости с требованиями ISO.Included for ISO compliance. Не изменяет работу ALL.Does not change the behavior of ALL.

permissionpermission
Имя разрешения.Is the name of a permission. Допустимые сопоставления разрешений защищаемых объектов описаны в разделах, перечисленных ниже.The valid mappings of permissions to securables are described in the subtopics listed below.

columncolumn
Указывает имя столбца таблицы, на который предоставляется разрешение.Specifies the name of a column in a table on which permissions are being granted. Необходимы скобки ().The parentheses () are required.

classclass
Указывает класс защищаемого объекта, для которого предоставляется разрешение.Specifies the class of the securable on which the permission is being granted. Квалификатор области :: является обязательным.The scope qualifier :: is required.

securablesecurable
Указывает защищаемый объект, на который предоставляется разрешение.Specifies the securable on which the permission is being granted.

TO principalTO principal
Имя участника.Is the name of a principal. Состав участников, которым можно предоставлять разрешения, меняется в зависимости от защищаемого объекта.The principals to which permissions on a securable can be granted vary, depending on the securable. Допустимые сочетания описаны в разделах, перечисленных ниже.See the subtopics listed below for valid combinations.

GRANT OPTIONGRANT OPTION
Показывает, что получающему разрешению будет также дана возможность предоставлять указанное разрешение другим участникам.Indicates that the grantee will also be given the ability to grant the specified permission to other principals.

AS principalAS principal
Используйте предложение AS principal, чтобы указать, что участник, записанный как предоставляющий разрешение, должен быть участником, отличным от пользователя, выполняющего инструкцию.Use the AS principal clause to indicate that the principal recorded as the grantor of the permission should be a principal other than the person executing the statement. Предположим, что пользователь Мария — это участник 12, пользователь Павел — участник 15.For example, presume that user Mary is principal_id 12 and user Raul is principal 15. Мария выполняет GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;. В таблице sys.database_permissions для параметра grantor_prinicpal_id будет указано значение 15 (Павел), хотя инструкция была выполнена пользователем 12 (Мария).Mary executes GRANT SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul; Now the sys.database_permissions table will indicate that the grantor_prinicpal_id was 15 (Raul) even though the statement was actually executed by user 13 (Mary).

Использовать предложение AS обычно не рекомендуется, за исключением необходимости явного определения цепочки разрешения.Using the AS clause is typically not recommended unless you need to explicitly define the permission chain. Дополнительные сведения см. в подразделе Сводка по алгоритму проверки разрешений раздела Разрешения (ядро СУБД).For more information, see the Summary of the Permission Check Algorithm section of Permissions (Database Engine).

AS в данной инструкции не дает возможность олицетворять другого пользователя.The use of AS in this statement does not imply the ability to impersonate another user.

RemarksRemarks

Полное описание синтаксиса инструкции GRANT сложно.The full syntax of the GRANT statement is complex. Предыдущая диаграмма синтаксиса была упрощена, чтобы продемонстрировать ее структуру.The syntax diagram above was simplified to draw attention to its structure. Полное описание синтаксиса предоставления разрешений на конкретные защищаемые объекты приведено в статьях, перечисленных ниже.Complete syntax for granting permissions on specific securables is described in the articles listed below.

Инструкция REVOKE может использоваться для удаления уже выданных прав доступа, а инструкция DENY может использоваться, чтобы предотвратить получение участником определенного разрешения посредством инструкции GRANT.The REVOKE statement can be used to remove granted permissions, and the DENY statement can be used to prevent a principal from gaining a specific permission through a GRANT.

Предоставление разрешения удаляет DENY или REVOKE для этого разрешения на данный защищаемый объект.Granting a permission removes DENY or REVOKE of that permission on the specified securable. Если то же разрешение запрещено для более высокой области действия, которая содержит данный защищаемый объект, то DENY имеет более высокий приоритет.If the same permission is denied at a higher scope that contains the securable, the DENY takes precedence. Но отмена разрешения, выданного в более высокой области действия, не получает такого приоритета.But revoking the granted permission at a higher scope does not take precedence.

Разрешения уровня базы данных выдаются в пределах области указанной базы данных.Database-level permissions are granted within the scope of the specified database. Если пользователю нужны разрешения на объекты в другой базе данных, необходимо создать для него учетную запись в этой базе данных или предоставить ему разрешение на доступ как к текущей, так и к другим базам данных.If a user needs permissions to objects in another database, create the user account in the other database, or grant the user account access to the other database, as well as the current database.

Внимание!

Запрет (DENY) уровня таблицы имеет меньший приоритет, чем разрешение (GRANT) уровня столбца.A table-level DENY does not take precedence over a column-level GRANT. Эта несовместимость в иерархии разрешений предусмотрена в целях гарантии обратной совместимости.This inconsistency in the permissions hierarchy has been preserved for the sake of backward compatibility. В будущем выпуске она будет удалена.It will be removed in a future release.

Системная хранимая процедура sp_helprotect сообщает о разрешениях на доступ к защищаемым объектам уровня базы данных.The sp_helprotect system stored procedure reports permissions on a database-level securable.

WITH GRANT OPTIONWITH GRANT OPTION

Инструкция GRANT ... WITH GRANT OPTION указывает, что получающему разрешение участнику безопасности дана возможность предоставления определенных разрешений другим учетным записям безопасности.The GRANT ... WITH GRANT OPTION specifies that the security principal receiving the permission is given the ability to grant the specified permission to other security accounts. Если участник, получивший данное разрешение, является ролью или группой Windows, то для последующего предоставления разрешения объекта пользователям, которые не являются членами этой группы или роли, необходимо использовать предложение AS.When the principal that receives the permission is a role or a Windows group, the AS clause must be used when the object permission needs to be further granted to users who are not members of the group or role. Поскольку именно пользователь, а не группа или роль, может исполнить инструкцию GRANT, при предоставлении разрешения определенный член группы или роли должен использовать предложение AS для явного вызова членства в роли или группе.Because only a user, rather than a group or role, can execute a GRANT statement, a specific member of the group or role must use the AS clause to explicitly invoke the role or group membership when granting the permission. В следующем примере рассматривается порядок использования разрешения WITH GRANT OPTION, предоставленного роли или группе Windows.The following example shows how the WITH GRANT OPTION is used when granted to a role or Windows group.

-- 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 ServerChart of SQL Server Permissions

Схему плакатного размера всех разрешений компонента Компонент Database EngineDatabase Engine в формате PDF см. по ссылке https://aka.ms/sql-permissions-poster.For a poster sized chart of all Компонент Database EngineDatabase Engine permissions in pdf format, see https://aka.ms/sql-permissions-poster.

РазрешенияPermissions

Объект, предоставляющий разрешение (или участник, указанный параметром AS), должен иметь либо само разрешение, выданное с помощью параметра GRANT OPTION, либо разрешение более высокого уровня, которое неявно включает предоставляемое.The grantor (or the principal specified with the AS option) must have either the permission itself with GRANT OPTION, or a higher permission that implies the permission being granted. Если используется параметр AS, налагаются дополнительные ограничения.If using the AS option, additional requirements apply. Дополнительные сведения см. в статьях, посвященных конкретным защищаемым объектам.See the securable-specific article for details.

Владельцы объектов могут предоставлять разрешения на объекты, которыми они владеют.Object owners can grant permissions on the objects they own. Участники, имеющие разрешение CONTROL на защищаемый объект, могут предоставлять разрешение на этот защищаемый объект.Principals with CONTROL permission on a securable can grant permission on that securable.

Участники, которым предоставлено разрешение CONTROL SERVER, такие как члены предопределенной роли сервера <legacyBold>sysadmin</legacyBold>, могут предоставлять любое разрешение на любой защищаемый объект сервера.Grantees of CONTROL SERVER permission, such as members of the sysadmin fixed server role, can grant any permission on any securable in the server. Участники, получившие разрешение CONTROL на базу данных, такие как члены предопределенной роли базы данных db_owner, могут предоставлять любое разрешение на любой защищаемый объект в базе данных.Grantees of CONTROL permission on a database, such as members of the db_owner fixed database role, can grant any permission on any securable in the database. Владельцы разрешения CONTROL, связанного со схемой, могут предоставлять любые разрешения на работу с любыми объектами, содержащимися в данной схеме.Grantees of CONTROL permission on a schema can grant any permission on any object within the schema.

ПримерыExamples

В приведенной ниже таблице перечислены защищаемые объекты и статьи, в которых описывается синтаксис инструкций по работе с ними.The following table lists the securables and the articles that describe the securable-specific syntax.

Роль приложенияApplication Role GRANT, предоставление разрешений на участника базы данных (Transact-SQL)GRANT Database Principal Permissions (Transact-SQL)
СборкаAssembly GRANT, предоставление разрешений на сборку (Transact-SQL)GRANT Assembly Permissions (Transact-SQL)
Асимметричный ключAsymmetric Key GRANT, предоставление разрешений на асимметричный ключ (Transact-SQL)GRANT Asymmetric Key Permissions (Transact-SQL)
Группа доступностиAvailability Group GRANT, предоставление разрешений на группу доступности (Transact-SQL)GRANT Availability Group Permissions (Transact-SQL)
СертификатCertificate GRANT, предоставление разрешений на сертификат (Transact-SQL)GRANT Certificate Permissions (Transact-SQL)
КонтрактContract GRANT, предоставление разрешений на Service Broker (Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
База данныхDatabase GRANT, предоставление разрешений на базу данных (Transact-SQL)GRANT Database Permissions (Transact-SQL)
Учетные данные для базы данныхDatabase Scoped Credential GRANT, предоставление разрешений на учетные данные для базы данных (Transact-SQL)GRANT Database Scoped Credential (Transact-SQL)
Конечная точкаEndpoint GRANT, предоставление разрешений на конечную точку (Transact-SQL)GRANT Endpoint Permissions (Transact-SQL)
Полнотекстовый каталогFull-Text Catalog GRANT, предоставление разрешений на полнотекстовые объекты (Transact-SQL)GRANT Full-Text Permissions (Transact-SQL)
Полнотекстовый список стоп-словFull-Text Stoplist GRANT, предоставление разрешений на полнотекстовые объекты (Transact-SQL)GRANT Full-Text Permissions (Transact-SQL)
КомпонентFunction GRANT, предоставление разрешений на объект (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Имя входаLogin GRANT, предоставление разрешений участникам на уровне сервера (Transact-SQL)GRANT Server Principal Permissions (Transact-SQL)
Тип сообщенийMessage Type GRANT, предоставление разрешений на Service Broker (Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
ОбъектObject GRANT, предоставление разрешений на объект (Transact-SQL)GRANT Object Permissions (Transact-SQL)
ОчередьQueue GRANT, предоставление разрешений на объект (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Привязка удаленной службыRemote Service Binding GRANT, предоставление разрешений на Service Broker (Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
РольRole GRANT, предоставление разрешений на участника базы данных (Transact-SQL)GRANT Database Principal Permissions (Transact-SQL)
МаршрутRoute GRANT, предоставление разрешений на Service Broker (Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
СхемаSchema GRANT, предоставление разрешений на схему (Transact-SQL)GRANT Schema Permissions (Transact-SQL)
Список свойств поискаSearch Property List GRANT, предоставление разрешений на список свойств поиска (Transact-SQL)GRANT Search Property List Permissions (Transact-SQL)
СерверServer GRANT, предоставление разрешений на сервер (Transact-SQL)GRANT Server Permissions (Transact-SQL)
СлужбаService GRANT, предоставление разрешений на Service Broker (Transact-SQL)GRANT Service Broker Permissions (Transact-SQL)
Хранимая процедураStored Procedure GRANT, предоставление разрешений на объект (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Симметричный ключSymmetric Key GRANT, предоставление разрешений на симметричный ключ (Transact-SQL)GRANT Symmetric Key Permissions (Transact-SQL)
СинонимSynonym GRANT, предоставление разрешений на объект (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Системные объектыSystem Objects GRANT, предоставление разрешения на системный объект (Transact-SQL)GRANT System Object Permissions (Transact-SQL)
ТаблицаTable GRANT, предоставление разрешений на объект (Transact-SQL)GRANT Object Permissions (Transact-SQL)
ТипType GRANT, предоставление разрешений на тип (Transact-SQL)GRANT Type Permissions (Transact-SQL)
ПользовательUser GRANT, предоставление разрешений на участника базы данных (Transact-SQL)GRANT Database Principal Permissions (Transact-SQL)
ПредставлениеView GRANT, предоставление разрешений на объект (Transact-SQL)GRANT Object Permissions (Transact-SQL)
Коллекция схем XMLXML Schema Collection GRANT, предоставление разрешений на коллекцию XML-схем (Transact-SQL)GRANT XML Schema Collection Permissions (Transact-SQL)

См. также:See Also

DENY (Transact-SQL) DENY (Transact-SQL)
REVOKE (Transact-SQL) REVOKE (Transact-SQL)
sp_addlogin (Transact-SQL) sp_addlogin (Transact-SQL)
sp_adduser (Transact-SQL) sp_adduser (Transact-SQL)
sp_changedbowner (Transact-SQL) sp_changedbowner (Transact-SQL)
sp_dropuser (Transact-SQL) sp_dropuser (Transact-SQL)
sp_helprotect (Transact-SQL) sp_helprotect (Transact-SQL)
sp_helpuser (Transact-SQL)sp_helpuser (Transact-SQL)