GRANT Разрешения на схему (Transact-SQL)

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

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

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

Syntax

GRANT permission  [ ,...n ] ON SCHEMA :: schema_name  
    TO database_principal [ ,...n ]  
    [ WITH GRANT OPTION ]  
    [ AS granting_principal ]  

Arguments

permission
Разрешение на работу со схемой, которое может быть предоставлено. Список разрешений см. в подразделе «Примечания» далее в этом разделе.

SCHEMA ::schema_name
Схема, на работу с которой предоставляется разрешение. Квалификатор области :: является обязательным.

database_principal
Участник, которому предоставляется разрешение. Один из следующих:

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

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

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

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

Remarks

Important

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

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

Разрешение на схему Содержится в разрешении схемы Содержится в разрешении базы данных
ALTER CONTROL ИЗМЕНЕНИЕ ЛЮБОГО SCHEMA
CONTROL CONTROL CONTROL
CREATE SEQUENCE ALTER ИЗМЕНЕНИЕ ЛЮБОГО SCHEMA
DELETE CONTROL DELETE
EXECUTE CONTROL EXECUTE
INSERT CONTROL INSERT
REFERENCES CONTROL REFERENCES
SELECT CONTROL SELECT
ВОЗЬМИТЕ ОТВЕТСТВЕННОСТЬ CONTROL CONTROL
UPDATE CONTROL UPDATE
VIEW ОТСЛЕЖИВАНИЕ ИЗМЕНЕНИЙ CONTROL CONTROL
VIEW ОПРЕДЕЛЕНИЕ CONTROL VIEW ОПРЕДЕЛЕНИЕ

Caution

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

Например, эта проблема может возникнуть в следующих сценариях. Предполагается, что у пользователя U1 есть разрешение ALTER на схему S1. Пользователю U1 запрещен доступ к объекту таблицы T1 в схеме S2. Схемы S1 и S2 принадлежат одному и тому же владельцу.

Пользователь U1 имеет CREATE PROCEDURE разрешение на базу данных и разрешение EXECUTE на схеме S1. Поэтому пользователь U1 может создать хранимую процедуру, а затем получить доступ к запрещенному объекту T1 из этой хранимой процедуры.

Пользователь U1 имеет CREATE SYNONYM разрешение на базу данных и разрешение SELECT на схеме S1. Поэтому пользователь U1 может создать в схеме S1 синоним для запрещенного объекта T1, а затем получить доступ к этому объекту с помощью синонима.

Пользователь U1 имеет CREATE VIEW разрешение на базу данных и разрешение SELECT на схеме S1. Поэтому пользователь U1 может создать в схеме S1 представления для запроса данных из запрещенного объекта T1, а затем получить доступ к этому объекту с помощью представления.

Permissions

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

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

КАК granting_principal Необходимо дополнительное разрешение
пользователь базы данных; Разрешение 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.

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

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

Examples

A. Предоставление INSERT разрешения на схему HumanResources гостям

GRANT INSERT ON SCHEMA :: HumanResources TO guest;  

B. Предоставление пользователю базы данных WilJo разрешения SELECT на схему Person

GRANT SELECT ON SCHEMA :: Person TO WilJo WITH GRANT OPTION;