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

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

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

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

Синтаксис

DENY <permission> [ ,...n ] ON   
    [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]  
        TO <database_principal> [ ,...n ]   
    [ CASCADE ]  
        [ AS <database_principal> ]  
  
<permission> ::=  
    ALL [ PRIVILEGES ] | permission [ ( column [ ,...n ] ) ]  
  
<database_principal> ::=   
        Database_user   
    | Database_role   
    | Application_role   
    | Database_user_mapped_to_Windows_User   
    | Database_user_mapped_to_Windows_Group   
    | Database_user_mapped_to_certificate   
    | Database_user_mapped_to_asymmetric_key   
    | Database_user_with_no_login  

Аргументы

permission
Обозначает разрешение, которое можно запретить для содержащегося в схеме объекта. Список разрешений см. в подразделе "Примечания" далее в этом разделе.

ВСЕ
Запрет разрешения ALL не запрещает все возможные разрешения. Запрет ALL эквивалентен запрету всех разрешений ANSI-92, применимых к данному объекту. Значение ALL различается для разных типов объектов

  • Разрешения на скалярные функции: EXECUTE, REFERENCES.
  • Разрешения на возвращающую табличное значение функцию: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
  • Разрешения на хранимые процедуры: EXECUTE.
  • Разрешения на таблицы: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
  • Разрешения на представления: DELETE, INSERT, REFERENCES, SELECT, UPDATE.

PRIVILEGES
Включено для совместимости с ANSI-92. Не изменяет работу ALL.

column
Указывает имя столбца в таблице, представлении или функции с табличным значением, для которых запрещается разрешение. Указание круглых скобок ( ) обязательно. Для столбца можно запрещать только разрешения SELECT, REFERENCES и UPDATE. Аргумент column может быть указан в предложении PERMISSIONS или после имени защищаемого объекта.

Внимание

Запрет (DENY) уровня таблицы имеет меньший приоритет, чем разрешение (GRANT) уровня столбца. Такая несогласованность в иерархии разрешений сохранена в целях обратной совместимости. В SQL Server такое поведение отличается, если сервер настроен для выполнения с конфигурацией "Common Criteria Compliance Enabled". Но обычно ее следует использовать с осторожностью, а не во всех случаях.

ON [ OBJECT :: ] [ schema_name ] . object_name
Указывает объект, для которого запрещается разрешение. Фраза OBJECT необязательна, если указан аргумент schema_name. Если же она указана, указание квалификатора области (::) обязательно. Если не указан аргумент schema_name, подразумевается схема по умолчанию. Если указан аргумент schema_name, обязательно указание квалификатора области схемы (.).

TO <database_principal>
Задает участника, для которого запрещается разрешение.

CASCADE
Указывает, что запрещаемое разрешение также запрещается для других участников, которым оно было предоставлено данным участником.

AS <database_principal>
Задает участника, от которого участник, выполняющий данный запрос, получает право на запрет разрешения.

Database_user
Указывает пользователя базы данных.

Database_role
Указывает роль базы данных.

Application_role
Указывает роль приложения.

Database_user_mapped_to_Windows_User
Указывает пользователя базы данных, сопоставленного с пользователем Windows.

Database_user_mapped_to_Windows_Group
Указывает пользователя базы данных, сопоставленного с группой Windows.

Database_user_mapped_to_certificate
Указывает пользователя базы данных, сопоставленного с сертификатом.

Database_user_mapped_to_asymmetric_key
Указывает пользователя базы данных, сопоставленного с асимметричным ключом.

Database_user_with_no_login
Указывает пользователя базы данных, не сопоставленного с субъектом серверного уровня.

Замечания

Сведения об объектах доступны через различные представления каталога. Дополнительные сведения см. в разделе Представления каталога объектов (Transact-SQL).

Объект является защищаемым на уровне схемы. Он содержится в схеме, которая является его родителем в иерархии разрешений. Наиболее специфичные и ограниченные разрешения, которые можно запретить для объекта, перечислены в следующей таблице вместе с общими разрешениями, неявно содержащими их.

Разрешение объекта Содержится в разрешении объекта Содержится в разрешении схемы
ИЗМЕНИТЬ ПРОИЗВОДИТЕЛЬНОСТИ ИЗМЕНИТЬ
ПРОИЗВОДИТЕЛЬНОСТИ ПРОИЗВОДИТЕЛЬНОСТИ ПРОИЗВОДИТЕЛЬНОСТИ
DELETE ПРОИЗВОДИТЕЛЬНОСТИ DELETE
Выполнение  ПРОИЗВОДИТЕЛЬНОСТИ Выполнение 
ВСТАВИТЬ ПРОИЗВОДИТЕЛЬНОСТИ ВСТАВИТЬ
ПРИЕМ ПРОИЗВОДИТЕЛЬНОСТИ ПРОИЗВОДИТЕЛЬНОСТИ
ССЫЛКИ ПРОИЗВОДИТЕЛЬНОСТИ ССЫЛКИ
SELECT ПРИЕМ SELECT
TAKE OWNERSHIP ПРОИЗВОДИТЕЛЬНОСТИ ПРОИЗВОДИТЕЛЬНОСТИ
UPDATE ПРОИЗВОДИТЕЛЬНОСТИ UPDATE
VIEW CHANGE TRACKING ПРОИЗВОДИТЕЛЬНОСТИ VIEW CHANGE TRACKING
VIEW DEFINITION ПРОИЗВОДИТЕЛЬНОСТИ VIEW DEFINITION

Разрешения

Необходимо разрешение CONTROL для данного объекта.

При использовании предложения AS указанный участник должен быть владельцем объекта, разрешения на который запрещаются для этого участника.

Примеры

В следующих примерах используется база данных AdventureWorks.

А. Запрет разрешения SELECT на таблицу

В следующем примере запрещается разрешение SELECT для пользователя RosaQdM на таблицу Person.Address.

DENY SELECT ON OBJECT::Person.Address TO RosaQdM;  
GO  

B. Запрет разрешения EXECUTE на хранимую процедуру

В следующем примере запрещается разрешение EXECUTE на хранимую процедуру HumanResources.uspUpdateEmployeeHireInfo для роли приложения под названием Recruiting11.

DENY EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo  
    TO Recruiting11;  
GO   

C. Запрет разрешения REFERENCES на представление с CASCADE

В следующем примере запрещается разрешение REFERENCES на столбец BusinessEntityID в представлении HumanResources.vEmployee для пользователя Wanida с CASCADE.

DENY REFERENCES (BusinessEntityID) ON OBJECT::HumanResources.vEmployee   
    TO Wanida CASCADE;  
GO  

См. также

GRANT, предоставление разрешений на объект (Transact-SQL)
РАЗРЕШЕНИЯ ОБЪЕКТА REVOKE (Transact-SQL)
Представления каталога объектов (Transact-SQL)
Разрешения (ядро СУБД)
Субъекты (ядро СУБД)
Защищаемые объекты
sys.fn_builtin_permissions (Transact-SQL)
HAS_PERMS_BY_NAME (Transact-SQL)
sys.fn_my_permissions (Transact-SQL)