PERMISSIONS(Transact-SQL)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
현재 사용자의 문, 개체 또는 열 사용 권한을 나타내는 비트맵이 포함된 값을 반환합니다.
Important
SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요. fn_my_permissions 및 Has_Perms_By_Name을 대신 사용합니다. PERMISSIONS 함수를 계속 사용하면 성능이 저하될 수 있습니다.
구문
PERMISSIONS ( [ objectid [ , 'column' ] ] )
인수
objectid
보안 개체의 ID입니다. objectid를 지정하지 않으면 현재 사용자의 문 사용 권한이 비트맵 값에 포함됩니다. 이 값을 지정하면 현재 사용자의 해당 보안 개체에 대한 사용 권한이 비트맵 값에 포함됩니다. 지정한 보안 개체가 현재 데이터베이스에 있어야 합니다. OBJECT_ID 함수를 사용하여 objectid 값을 확인할 수 있습니다.
' column '
사용 권한 정보를 반환할 열의 선택적 이름입니다. 이 열은 objectid로 지정한 테이블에서 유효한 열 이름이어야 합니다.
반환 형식
int
설명
PERMISSIONS는 현재 사용자가 문을 실행하거나 다른 사용자에게 사용 권한을 부여할 수 있는 권한이 있는지 여부를 확인하는 데 사용할 수 있습니다.
사용 권한 정보는 32비트 비트맵으로 반환됩니다.
하위 16비트는 사용자에게 부여된 사용 권한 및 현재 사용자가 멤버로 속한 Windows 그룹 또는 고정 서버 역할에 적용되는 사용 권한을 나타냅니다. 예를 들어 objectid를 지정하지 않은 경우 반환 값 66(16진수 값 0x42)은 사용자에게 CREATE TABLE(10진수 값 2) 문과 BACKUP DATABASE(10진수 값 64) 문을 실행할 수 있는 권한이 있음을 나타냅니다.
상위 16비트는 사용자가 다른 사용자에게 부여할 수 있는 사용 권한을 나타냅니다. 상위 16비트는 65536으로 곱한 결과 왼쪽으로 16비트가 이동된다는 점을 제외하고 다음 표에 설명된 하위 16비트와 똑같이 해석됩니다. 예를 들어 objectid를 지정한 경우 0x8(10진수 값 8)은 INSERT 사용 권한을 나타내는 비트입니다. 반면 0x80000(십진수 값 524288)은 INSERT 권한을 부여할 수 있음을 나타냅니다. 524288 = 8 x 65536이기 때문입니다.
역할의 멤버로 속한 사용자는 문을 실행할 수 있는 권한이 없더라도 다른 사용자에게 사용 권한을 부여할 수는 있습니다.
다음 표에서는 objectid를 지정하지 않은 경우 명령문 사용 권한에 사용되는 비트를 보여 줍니다.
비트(10진수) | 비트(16진수) | 문 사용 권한 |
---|---|---|
1 | 0x1 | CREATE DATABASE(master 데이터베이스에만 해당) |
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 LOG |
256 | 0x100 | 예약됨 |
다음 표에서는 objectid만 지정한 경우 반환되는 개체 사용 권한에 사용되는 비트를 보여 줍니다.
비트(10진수) | 비트(16진수) | 문 사용 권한 |
---|---|---|
1 | 0x1 | SELECT ALL |
2 | 0x2 | UPDATE ALL |
4 | 0x4 | REFERENCES ALL |
8 | 0x8 | INSERT |
16 | 0x10 | Delete |
32 | 0x20 | EXECUTE(프로시저에만 해당) |
4096 | 0x1000 | SELECT ANY(하나 이상의 열) |
8192 | 0x2000 | UPDATE ANY |
16384 | 0x4000 | REFERENCES ANY |
다음 표에서는 objectid와 열을 모두 지정한 경우 반환되는 열 수준 개체 사용 권한에 사용되는 비트를 보여 줍니다.
비트(10진수) | 비트(16진수) | 문 사용 권한 |
---|---|---|
1 | 0x1 | SELECT |
2 | 0x2 | UPDATE |
4 | 0x4 | REFERENCES |
지정한 매개 변수가 NULL이거나 유효하지 않으면 NULL이 반환됩니다. 예를 들어 지정한 objectid나 열이 없는 경우가 해당합니다. 적용되지 않는 사용 권한에 대한 비트 값은 정의되지 않습니다. 테이블에 대한 EXECUTE 권한, 비트 0x20이 여기에 해당됩니다.
BIT AND(&) 연산자를 사용하여 PERMISSIONS 함수에서 반환되는 비트맵의 각 비트 집합을 확인합니다.
sp_helprotect 시스템 저장 프로시저를 사용하여 현재 데이터베이스의 사용자에 대한 사용 권한 목록을 반환할 수도 있습니다.
예제
A. 문 사용 권한과 함께 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
데이터베이스의 AdventureWorks2022
테이블에 데이터 행을 삽입할 수 있는지 여부를 확인합니다.
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.';
C. 부여할 수 있는 권한과 함께 PERMISSIONS 함수 사용
다음 예에서는 현재 사용자가 Address
데이터베이스의 AdventureWorks2022
테이블에 대한 INSERT 권한을 다른 사용자에게 부여할 수 있는지 여부를 확인합니다.
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)