РАЗРЕШЕНИЯ (Transact-SQL)

Применимо к:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureБаза данных SQL в Microsoft Fabric

Возвращает битовую карту, указывающую разрешения на инструкции, объекты и столбцы для текущего пользователя.

Внимание

Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется. Вместо него используйте функции fn_my_permissions и Has_Perms_By_Name. Постоянное использование функции PERMISSIONS может привести к понижению производительности.

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

Синтаксис

PERMISSIONS ( [ objectid [ , 'column' ] ] )  

Аргументы

objectid
Идентификатор защищаемого объекта. Если аргумент objectid не указан, то значение битовой карты содержит разрешения на выполнение инструкций для текущего пользователя; в противном случае битовая карта содержит разрешения в отношении защищаемого объекта для текущего пользователя. Указанный защищаемый объект должен находиться в текущей базе данных. Для определения значения аргумента objectid следует использовать функцию OBJECT_ID.

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

Типы возвращаемых данных

int

Замечания

РАЗРЕШЕНИЯ могут использоваться для определения, обладает ли текущий пользователь необходимыми разрешениями для выполнения оператора или разрешения GRANT другому пользователю.

Возвращаемые данные о разрешениях представляют собой 32-разрядную битовую карту.

Младшие 16 разрядов отражают разрешения, предоставленные пользователю, и разрешения, применяемые к группам Windows и предопределенным ролям сервера, членство в которых имеет текущий пользователь. Например, возвращенное значение 66 (шестнадцатеричное значение 0x42), когда объект не указан, указывает на разрешение пользователя выполнять CREATE TABLE операторы (десятичное значение 2) и BACKUPDATABASE (десятичное значение 64).

Верхние 16 бит отражают права доступа, которые пользователь может GRANT предоставлять другим пользователям. Старшие 16 разрядов интерпретируются точно так же, как и младшие 16 разрядов, описанные в следующих таблицах, но они сдвинуты влево на 16 разрядов (умножены на 65536). Например, 0x8 (десятичное число 8) — это бит, указывающий INSERT на разрешение при указании objectid . В то время как 0x80000 (десятичное значение 524288) указывает на возможность разрешения GRANTINSERT , поскольку 524288 = 8 x 65536.

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

В таблице ниже приведены разряды, которым соответствуют разрешения на выполнение инструкций (аргумент objectid не указан).

Разряд (дес.) Разряд (шест.) Разрешение на инструкцию
1 0x1 CREATE DATABASE (только главная база данных)
2 0x2 CREATE TABLE
4 0x4 CREATE PROCEDURE
8 0x8 CREATE VIEW
16 0x10 CREATE RULE
32 0x20 CREATE DEFAULT
64 0x40 BACKUP DATABASE
128 0x80 BACKUP ЖУРНАЛА
256 0x100 Зарезервировано

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

Разряд (дес.) Разряд (шест.) Разрешение на инструкцию
1 0x1 ВЫБЕРИТЕ ВСЕХ
2 0x2 UPDATE ВСЕ
4 0x4 ССЫЛКИ ВСЕ
8 0x8 INSERT
16 0x10 DELETE
32 0x20 EXECUTE (только процедуры)
4096 0x1000 SELECT ANY (по крайней мере один столбец)
8192 0x2000 UPDATE ЛЮБОЙ
16384 0x4000 ССЫЛКИ ЛЮБЫЕ

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

Разряд (дес.) Разряд (шест.) Разрешение на инструкцию
1 0x1 SELECT
2 0x2 UPDATE
4 0x4 ССЫЛКИ

Значение NULL возвращается, если указанный параметр представляет собой NULL или недопустим (например, объект, заданный аргументом objectid, или столбец не существуют). Битовые значения для неприменимых разрешений (например, разрешение EXECUTE для таблицы, разряды 0x20) не определены.

Для определения каждого установленного бита в битовой карте, возвращаемой функцией PERMISSIONS, используйте оператор побитового AND (&).

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

Примеры

А. Использование функции PERMISSIONS с разрешениями на выполнение инструкций

В следующем примере определяется, может ли текущий пользователь выполнить инструкцию CREATE TABLE.

IF PERMISSIONS()&2=2  
   CREATE TABLE test_table (col1 INT)  
ELSE  
   PRINT 'ERROR: The current user cannot create a table.';  

B. Использование функции PERMISSIONS с разрешениями на объекты

В следующем примере определяется, может ли текущий пользователь вставить строку данных в таблицу Address, находящуюся в базе данных AdventureWorks2025.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.Person.Address','U'))&8=8   
   PRINT 'The current user can insert data into Person.Address.'  
ELSE  
   PRINT 'ERROR: The current user cannot insert data into Person.Address.';  

В. Использование функции PERMISSIONS с разрешениями на выполнение инструкции GRANT

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

IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.Person.Address','U'))&0x80000=0x80000  
   PRINT 'INSERT on Person.Address is grantable.'  
ELSE  
   PRINT 'You may not GRANT INSERT permissions on Person.Address.';  

См. также

DENY (Transact-SQL)
GRANT (Transact-SQL)
OBJECT_ID (Transact-SQL)
REVOKE (Transact-SQL)
sp_helprotect (Transact-SQL)
Системные функции (Transact-SQL)