PERMISSIONS(Transact-SQL)

현재 사용자의 문, 개체 또는 열 사용 권한을 나타내는 비트맵이 포함된 값을 반환합니다.

중요   Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오. 대신 fn_my_permissionsHAS_PERMS_BY_NAME(Transact-SQL)을 사용하십시오. PERMISSIONS 함수를 계속 사용하면 성능이 저하될 수 있습니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

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비트와 똑같이 해석됩니다. 예를 들어 0x8(10진수 값 8)은 objectid를 지정한 경우 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이 여기에 해당됩니다.

PERMISSIONS 함수에 의해 반환되는 비트맵의 각 비트를 확인하려면 비트 AND(&) 연산자를 사용하십시오.

sp_helprotect 시스템 저장 프로시저를 사용하여 현재 데이터베이스의 사용자에 대한 사용 권한 목록을 반환할 수도 있습니다.

1. 문 사용 권한과 함께 PERMISSIONS 함수 사용

다음 예는 현재 사용자가 CREATE TABLE 문을 실행할 수 있는지 여부를 확인합니다.

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

2. 개체 사용 권한과 함께 PERMISSIONS 함수 사용

다음 예에서는 현재 사용자가 AdventureWorks 데이터베이스의 Address 테이블에 데이터 행을 삽입할 수 있는지 여부를 확인합니다.

IF PERMISSIONS(OBJECT_ID('AdventureWorks.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.';

3. 부여할 수 있는 권한과 함께 PERMISSIONS 함수 사용

다음 예에서는 현재 사용자가 AdventureWorks 데이터베이스의 Address 테이블에 대한 INSERT 권한을 다른 사용자에게 부여할 수 있는지 여부를 확인합니다.

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