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

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

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

Синтаксис

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

Аргументы

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

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

principal
Задает участника, у которого отменяется разрешение.

Замечания

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

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

Внимание

Запрет разрешений в системных объектах вызовет ошибки в зависящих от них приложениях. СРЕДА SQL Server Management Studio использует представления каталога и может не работать должным образом, если изменить разрешения по умолчанию для представлений каталога.

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

Разрешения на системные объекты будут сохранены во время обновления 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.

Примеры

В следующем примере запрещается разрешение EXECUTE на xp_cmdshell для public.

DENY EXECUTE ON sys.xp_cmdshell TO public;  
GO  

См. также

Соглашения о синтаксисе Transact-SQL
sys.database_permissions (Transact-SQL)
Grant System Object Permissions (Transact-SQL)
REVOKE System Object Permissions (Transact-SQL)