Разрешения системного объекта GRANT (Transact-SQL)
Область применения: SQL Server Управляемый экземпляр SQL Azure
Предоставляет разрешения на доступ к таким системным объектам, как системные хранимые процедуры, расширенные хранимые процедуры, функции и представления.
Соглашения о синтаксисе Transact-SQL
Синтаксис
GRANT { SELECT | EXECUTE } ON [ sys. ] system_object TO principal
[ ; ]
Аргументы
[ 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