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


DENY, запрет разрешений на сервере (Transact-SQL)

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

Отзывает разрешения на сервере.

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

Синтаксис

DENY permission [ ,...n ]   
    TO <grantee_principal> [ ,...n ]  
    [ CASCADE ]  
    [ AS <grantor_principal> ]   
  
<grantee_principal> ::= SQL_Server_login   
    | SQL_Server_login_mapped_to_Windows_login  
    | SQL_Server_login_mapped_to_Windows_group  
    | SQL_Server_login_mapped_to_certificate  
    | SQL_Server_login_mapped_to_asymmetric_key  
    | server_role  
  
<grantor_principal> ::= SQL_Server_login   
    | SQL_Server_login_mapped_to_Windows_login  
    | SQL_Server_login_mapped_to_Windows_group  
    | SQL_Server_login_mapped_to_certificate  
    | SQL_Server_login_mapped_to_asymmetric_key  
    | server_role  

Аргументы

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

CASCADE
Обозначает, что разрешение запрещается для указанного участника и всех других участников, которым этот участник предоставил разрешение. Требуется, если участник имеет разрешение с параметром GRANT OPTION.

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

AS <grantor_principal>
Указывает участника, от которого участник, выполняющий данный запрос, получает право на запрещение разрешения. Используйте предложение субъекта AS, чтобы указать, что субъект, записанный как объект, отзывающий разрешение, должен быть субъектом, отличным от пользователя, выполняющего инструкцию. Предположим, что пользователь Мария — это участник 12, пользователь Павел — участник 15. Мария выполняет DENY SELECT ON OBJECT::X TO Steven WITH GRANT OPTION AS Raul;. В таблице sys.database_permissions для параметра grantor_prinicpal_id инструкции отмены указано значение 15 (Павел), хотя инструкция была выполнена пользователем 12 (Мария).

AS в данной инструкции не дает возможность олицетворять другого пользователя.

SQL_Server_login
Указывает имя входа SQL Server.

SQL_Server_login_mapped_to_Windows_login
Указывает имя входа SQL Server, сопоставленное с именем входа Windows.

SQL_Server_login_mapped_to_Windows_group
Указывает имя входа SQL Server, сопоставленное с группой Windows.

SQL_Server_login_mapped_to_certificate
Указывает имя входа SQL Server, сопоставленное с сертификатом.

SQL_Server_login_mapped_to_asymmetric_key
Указывает имя входа SQL Server, сопоставленное с асимметричным ключом.

server_role
Указывает роль сервера.

Замечания

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

Сведения о разрешениях для сервера можно просмотреть в представлении каталога sys.server_permissions, а сведения о субъектах на уровне сервера — в представлении каталога sys.server_principals. Сведения о членстве ролей сервера можно просмотреть в представлении каталога sys.server_role_members.

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

Разрешение сервера Подразумевается в разрешении сервера
ADMINISTER BULK OPERATIONS CONTROL SERVER
ALTER ANY AVAILABILITY GROUP

Применимо к: SQL Server (SQL Server 2012 (11.x) до текущей версии.
CONTROL SERVER
ALTER ANY CONNECTION CONTROL SERVER
ALTER ANY CREDENTIAL CONTROL SERVER
ALTER ANY DATABASE CONTROL SERVER
ALTER ANY ENDPOINT CONTROL SERVER
ALTER ANY EVENT NOTIFICATION CONTROL SERVER
ALTER ANY EVENT SESSION CONTROL SERVER
ALTER ANY LINKED SERVER CONTROL SERVER
ALTER ANY LOGIN CONTROL SERVER
ALTER ANY SERVER AUDIT CONTROL SERVER
ALTER ANY SERVER ROLE

Применимо к: SQL Server (SQL Server 2012 (11.x) до текущей версии.
CONTROL SERVER
ALTER RESOURCES CONTROL SERVER
ALTER SERVER STATE CONTROL SERVER
ALTER SETTINGS CONTROL SERVER
ALTER TRACE CONTROL SERVER
AUTHENTICATE SERVER CONTROL SERVER
CONNECT ANY DATABASE

Область применения: SQL Server (SQL Server 2014 (12.x) до текущей версии.
CONTROL SERVER
CONNECT SQL CONTROL SERVER
CONTROL SERVER CONTROL SERVER
CREATE ANY DATABASE ALTER ANY DATABASE
CREATE AVAILABILITY GROUP

Применимо к: SQL Server (SQL Server 2012 (11.x) до текущей версии.
ALTER ANY AVAILABILITY GROUP
CREATE DDL EVENT NOTIFICATION ALTER ANY EVENT NOTIFICATION
CREATE ENDPOINT … ALTER ANY ENDPOINT
CREATE SERVER ROLE

Применимо к: SQL Server (SQL Server 2012 (11.x) до текущей версии.
ALTER ANY SERVER ROLE
CREATE TRACE EVENT NOTIFICATION ALTER ANY EVENT NOTIFICATION
EXTERNAL ACCESS ASSEMBLY CONTROL SERVER
IMPERSONATE ANY LOGIN

Область применения: SQL Server (SQL Server 2014 (12.x) до текущей версии.
CONTROL SERVER
SELECT ALL USER SECURABLES

Область применения: SQL Server (SQL Server 2014 (12.x) до текущей версии.
CONTROL SERVER
SHUTDOWN CONTROL SERVER
UNSAFE ASSEMBLY CONTROL SERVER
VIEW ANY DATABASE VIEW ANY DEFINITION
VIEW ANY DEFINITION CONTROL SERVER
VIEW SERVER STATE ALTER SERVER STATE

В SQL Server 2014 (12.x) добавлены следующие три разрешения сервера.

Разрешение CONNECT ANY DATABASE
Предоставьте разрешение CONNECT ANY DATABASE имени входа, которому нужно подключиться ко всем существующим базам данных и ко всем новым базам, которые могут быть созданы в будущем. Не предоставляет каких-либо разрешений в базах данных за пределами соединения. Объединение с SELECT ALL USER SECURABLES или VIEW SERVER STATE , чтобы разрешить процесс аудита просматривать все данные или все состояния базы данных в экземпляре SQL Server.

Разрешение IMPERSONATE ANY LOGIN
После предоставления разрешает процессу среднего уровня олицетворять учетную запись клиентов, подключающихся к ней, так как она подключается к базам данных. При запрещении имени входа с высоким уровнем прав может быть запрещено олицетворение других имен входа. Например, имени входа с разрешением CONTROL SERVER можно запретить олицетворение других имен входа.

Разрешение SELECT ALL USER SECURABLES
После предоставления имя входа, например аудитор, сможет просматривать данные во всех базах данных, к которым может подключаться пользователь. При запрещении предотвращает доступ к объектам, если они не будут находиться в схеме sys.

Разрешения

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

Примеры

А. Запрет разрешения CONNECT SQL для пользователя SQL Server с указанным именем входа и участников, которым этот пользователь его предоставил

В следующем примере запрещается CONNECT SQL разрешение на вход Annika SQL Server и субъекты, которым она предоставила разрешение.

USE master;  
DENY CONNECT SQL TO Annika CASCADE;  
GO  

B. Запрет разрешения CREATE ENDPOINT для пользователя SQL Server с помощью параметра AS

В следующем примере разрешение CREATE ENDPOINT запрещается для пользователя ArifS. Пример использует параметр AS для указания пользователя MandarP в качестве участника, от которого текущий участник получает права для выполнения.

USE master;  
DENY CREATE ENDPOINT TO ArifS AS MandarP;  
GO  

См. также

GRANT (Transact-SQL)
DENY (Transact-SQL)
DENY, запрет разрешений на сервере (Transact-SQL)
REVOKE, отмена разрешений сервера (Transact-SQL)
Иерархия разрешений (ядро СУБД)
sys.fn_builtin_permissions (Transact-SQL)
sys.fn_my_permissions (Transact-SQL)
HAS_PERMS_BY_NAME (Transact-SQL)