Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: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)