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


ЗАПРЕТ разрешения системного объекта (Transact-SQL)

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

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

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

Синтаксис

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

Аргументы

[ sys. ]

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

system_object

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

основной

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

Замечания

Эту инструкцию можно использовать для запрета разрешений для определенных хранимых процедур, расширенных хранимых процедур, табличных функций, скалярных функций, представлений каталога, представлений совместимости, 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
     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.

Примеры

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

DENY EXECUTE ON sys.xp_cmdshell TO PUBLIC;
GO