GRANT, предоставление разрешений на системный объект (Transact-SQL)

Область применения: SQL Server (все поддерживаемые версии)

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

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

Синтаксис

  
GRANT { SELECT | EXECUTE } ON [ sys.]system_object TO principal   

Примечание

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

Аргументы

[ sys.] .
Квалификатор sys обязателен только при обращении к представлениям каталогов и к динамическим административным представлениям.

system_object
Задает объект, для которого предоставляется разрешение.

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

Комментарии

Данная инструкция может быть использована для предоставления разрешений на доступ к определенным хранимым процедурам, расширенным хранимым процедурам, функциям с табличным значением, скалярным функциям, представлениям, представлениям каталогов и совместимостей, представлениям INFORMATION_SCHEMA, динамическим административным представлениям, а также системным таблицам, установленным SQL Server. Каждый из этих системных объектов существует в виде уникальной записи в базе данных ресурсов сервера (mssqlsystemresource). Она доступна только для чтения. Ссылка на объект представляется в виде записи в схеме sys для каждой базы данных. Разрешение на выполнение или выбор системного объекта может быть предоставлено, запрещено или отозвано.

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

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

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

При обновлении SQL Server разрешения на доступ к системным объектам сохраняются.

Системные объекты отображаются в представлении каталога sys.system_objects. Разрешения на доступ к системным объектам отображаются в представлении каталога sys.database_permissions в базе данных master.

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

SELECT * FROM master.sys.database_permissions AS dp   
    JOIN sys.system_objects AS so  
    ON dp.major_id = so.object_id  
    WHERE dp.class = 1 AND so.parent_object_id = 0 ;  
GO  

Разрешения

Необходимо разрешение CONTROL SERVER.

Примеры

A. Предоставление разрешения SELECT на представление

В ходе выполнения следующего примера имени входа SQL Server предоставляется разрешение Sylvester1 на выбор представления, отображающего имена входа SQL Server. Затем предоставляется дополнительное разрешение на просмотр метаданных имен входа SQL Server, принадлежащих другим пользователям.

USE AdventureWorks2012;  
GRANT SELECT ON sys.sql_logins TO Sylvester1;  
GRANT VIEW SERVER STATE to Sylvester1;  
GO  

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

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

GRANT EXECUTE ON xp_readmail TO Sylvester1;  
GO  

См. также

sys.system_objects (Transact-SQL)
sys.database_permissions (Transact-SQL)
REVOKE, отмена разрешения на системные объекты (Transact-SQL)
DENY, запрет разрешений на системные объекты (Transact-SQL)