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

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

Значок ссылки на разделСинтаксические обозначения в 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.

Примеры

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

DENY EXECUTE ON sys.xp_cmdshell TO public;
GO