Разрешения объекта GRANT (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Управляемый экземпляр SQL Azure Конечная точка аналитики аналитики Synapse Analytics Analytics (PDW)SQL Analyticsв Microsoft FabricХранилище в Microsoft Fabric

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

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

Синтаксис

GRANT <permission> [ ,...n ] ON   
    [ OBJECT :: ][ schema_name ]. object_name [ ( column_name [ ,...n ] ) ]  
    TO <database_principal> [ ,...n ]   
    [ WITH GRANT OPTION ]  
    [ AS <database_principal> ]  
  
<permission> ::=  
    ALL [ PRIVILEGES ] | permission [ ( column_name [ ,...n ] ) ]  
  
<database_principal> ::=   
        Database_user   
    | Database_role   
    | Application_role   
    | Database_user_mapped_to_Windows_User   
    | Database_user_mapped_to_Windows_Group   
    | Database_user_mapped_to_certificate   
    | Database_user_mapped_to_asymmetric_key   
    | Database_user_with_no_login  

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

permission

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

ВСЕ

Предоставление ALL не включает все возможные разрешения, Предоставление ALL эквивалентно предоставлению всех разрешений ANSI-92, применимых к указанному объекту. Значение ALL различается для разных типов объектов

  • Разрешения на скалярные функции: EXECUTE, REFERENCES.
  • Разрешения на возвращающую табличное значение функцию: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
  • Разрешения на хранимые процедуры: EXECUTE.
  • Разрешения на таблицы: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
  • Разрешения на представления: DELETE, INSERT, REFERENCES, SELECT, UPDATE.

Внимание

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

PRIVILEGES

Включено для совместимости с ANSI-92. Не изменяет работу ALL.

column_name

Указывает имя столбца в таблице, представление или функции с табличным значением, на которых предоставляется разрешение. Указание круглых скобок ( ) обязательно. В столбце могут предоставляться только разрешения SELECT, REFERENCES, UPDATE и UNMASK. column_name можно указать в предложении разрешений или после защищаемого имени.

Внимание

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

ON [ OBJECT :: ] [ schema_name ] . object_name

Указывает объект, на который предоставляется разрешение. Фраза OBJECT необязательна, если указан аргумент schema_name. Если же она указана, указание квалификатора области (::) обязательно. Если не указан аргумент schema_name, подразумевается схема по умолчанию. Если указан аргумент schema_name, обязательно указание квалификатора области схемы (.).

TO <database_principal>

Участник, которому предоставляется разрешение.

WITH GRANT OPTION

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

AS <database_principal>

Указывает участника, от которого участник, выполняющий данный запрос, наследует право на предоставление разрешения.

Database_user
Указывает пользователя базы данных.

Database_role
Указывает роль базы данных.

Application_role
Указывает роль приложения.

Database_user_mapped_to_Windows_User
Указывает пользователя базы данных, сопоставленного с пользователем Windows.

Database_user_mapped_to_Windows_Group
Указывает пользователя базы данных, сопоставленного с группой Windows.

Database_user_mapped_to_certificate
Указывает пользователя базы данных, сопоставленного с сертификатом.

Database_user_mapped_to_asymmetric_key
Указывает пользователя базы данных, сопоставленного с асимметричным ключом.

Database_user_with_no_login
Указывает пользователя базы данных, не сопоставленного с субъектом серверного уровня.

Замечания

Важно!

Сочетание ALTER и REFERENCE разрешения в некоторых случаях могут позволить участнику просматривать данные или выполнять несанкционированные функции. Например, пользователь с ALTER разрешением на таблицу и REFERENCE разрешение на функцию может создать вычисляемый столбец по функции и выполнить его. В этом случае пользователю также потребуется SELECT разрешение на вычисляемый столбец.

Сведения об объектах доступны через различные представления каталога. Дополнительные сведения см. в разделе Представления каталога объектов (Transact-SQL).

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

Разрешение объекта Содержится в разрешении объекта Содержится в разрешении схемы
ALTER CONTROL ALTER
CONTROL CONTROL CONTROL
DELETE CONTROL DELETE
EXECUTE CONTROL EXECUTE
INSERT CONTROL INSERT
RECEIVE CONTROL CONTROL
REFERENCES CONTROL REFERENCES
SELECT RECEIVE SELECT
TAKE OWNERSHIP CONTROL CONTROL
UPDATE CONTROL UPDATE
VIEW CHANGE TRACKING CONTROL VIEW CHANGE TRACKING
VIEW DEFINITION CONTROL VIEW DEFINITION

Разрешения

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

При использовании параметра AS налагаются следующие дополнительные требования.

AS Необходимо дополнительное разрешение
пользователь базы данных; IMPERSONATE разрешение на пользователя, членство в фиксированной db_securityadmin роли базы данных, членство в db_owner фиксированной роли базы данных или членство в фиксированной sysadmin роли сервера.
пользователь базы данных, сопоставленный с именем входа Windows; IMPERSONATE разрешение на пользователя, членство в фиксированной db_securityadmin роли базы данных, членство в db_owner фиксированной роли базы данных или членство в фиксированной sysadmin роли сервера.
Пользователь базы данных, сопоставленный группе Windows Членство в группе Windows, членство в db_securityadmin фиксированной роли базы данных, членство в db_owner фиксированной роли базы данных или членство в фиксированной sysadmin роли сервера.
пользователь базы данных, сопоставленный с сертификатом; Членство в предопределенных ролевой db_securityadmin роли базы данных, членство в db_owner фиксированной роли базы данных или членство в фиксированной sysadmin роли сервера.
пользователь базы данных, сопоставленный с асимметричным ключом; Членство в предопределенных ролевой db_securityadmin роли базы данных, членство в db_owner фиксированной роли базы данных или членство в фиксированной sysadmin роли сервера.
Пользователь базы данных, не сопоставленный ни с одним участником на уровне сервера IMPERSONATE разрешение на пользователя, членство в фиксированной db_securityadmin роли базы данных, членство в db_owner фиксированной роли базы данных или членство в фиксированной sysadmin роли сервера.
роль базы данных; ALTER разрешение на роль, членство в фиксированной db_securityadmin роли базы данных, членство в db_owner фиксированной роли базы данных или членство в фиксированной sysadmin роли сервера.
Роль приложения ALTER разрешение на роль, членство в фиксированной db_securityadmin роли базы данных, членство в db_owner фиксированной роли базы данных или членство в фиксированной sysadmin роли сервера.

Примеры

А. Предоставление разрешения SELECT для таблицы

В следующем примере предоставляется разрешение SELECT пользователю RosaQdM на таблицу Person.Address в базе данных AdventureWorks2022.

Этот пример не работает в Microsoft Fabric, так как он использует пользователя для входа, прошедшего проверку подлинности SQL, но этот же пример будет работать для пользователя Microsoft Entra ID Fabric, например RosaQdM@contoso.com.

GRANT SELECT ON OBJECT::Person.Address TO RosaQdM;  
GO  

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

В следующем примере предоставляется разрешение EXECUTE на хранимую процедуру HumanResources.uspUpdateEmployeeHireInfo роли приложения Recruiting11.

USE AdventureWorks2022;   
GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo  
    TO Recruiting11;  
GO   

C. Предоставление разрешения REFERENCES для представления с помощью GRANT OPTION

В следующем примере предоставляется разрешение REFERENCES на столбец BusinessEntityID в представлении HumanResources.vEmployee пользователю Wanida с параметром GRANT OPTION.

Этот пример не работает в Microsoft Fabric, так как он использует пользователя для входа, прошедшего проверку подлинности SQL, но этот же пример будет работать для пользователя Microsoft Entra ID Fabric, например Wanida@contoso.com.

GRANT REFERENCES (BusinessEntityID) ON OBJECT::HumanResources.vEmployee   
    TO Wanida WITH GRANT OPTION;  
GO  

D. Предоставление разрешения SELECT для таблицы без использования фразы OBJECT

В следующем примере предоставляется разрешение SELECT пользователю RosaQdM на таблицу Person.Address в базе данных AdventureWorks2022.

Этот пример не работает в Microsoft Fabric, так как он использует пользователя для входа, прошедшего проверку подлинности SQL, но этот же пример будет работать для пользователя Microsoft Entra ID Fabric, например RosaQdM@contoso.com.

GRANT SELECT ON Person.Address TO RosaQdM;  
GO  

Д. Предоставление разрешения SELECT для таблицы учетной записи домена

В следующем примере предоставляется разрешение SELECT пользователю AdventureWorks2022\RosaQdM на таблицу Person.Address в базе данных AdventureWorks2022.

Этот пример, как записано, не работает в Microsoft Fabric, так как он использует учетную запись домена, но этот же пример будет работать для пользователя Microsoft Entra ID Fabric, например RosaQdM@contoso.com.

GRANT SELECT ON Person.Address TO [AdventureWorks2022\RosaQdM];  
GO  

F. Предоставление разрешения EXECUTE на процедуру роли

В следующем примере создается роль, а затем ей предоставляется разрешение EXECUTE на процедуру uspGetBillOfMaterials в базе данных AdventureWorks2022.

CREATE ROLE newrole ;  
GRANT EXECUTE ON dbo.uspGetBillOfMaterials TO newrole ;  
GO  

G. Предоставление разрешения UNMASK для столбца

В следующем примере предоставляется UNMASK разрешение, часть динамического маскирования данных, для столбца email в таблице Data.Membership пользователю OutreachCoordinator.

Динамическое маскирование данных в настоящее время не поддерживается в Microsoft Fabric.

GRANT UNMASK ON OBJECT::Data.Membership (email) to OutreachCoordinator;
GO