Поделиться через


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

См. также

Справочник

Синтаксические обозначения в Transact-SQL (Transact-SQL)

sys.database_permissions (Transact-SQL)

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

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