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

Применимо к:SQL Server Управляемый экземпляр SQL Azure

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

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

Синтаксис

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

Примечание.

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

Аргументы

[ sys. ]

Квалификатор систем требуется только в том случае, если вы ссылаетесь на представления каталога и динамические административные представления.

system_object

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

principal

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

Замечания

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

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

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

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

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

Необходимо находиться в master базе данных, чтобы предоставить разрешения, и субъект, которым вы предоставляете разрешения, должны быть пользователем в master базе данных. То есть, если они являются разрешениями на уровне сервера, вы не можете предоставить им субъекты-серверы, только субъекты базы данных.

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

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

SELECT *
FROM master.sys.database_permissions AS dp
INNER 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.

Примеры

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

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

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

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

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

USE master;
GO
GRANT EXECUTE ON xp_readmail TO Sylvester1;
GO