ALTER DEFAULT PRIVILEGES

제목

ALTER DEFAULT PRIVILEGES -- 기본 접근 권한 정의

요약

ALTER DEFAULT PRIVILEGES
    [ FOR { ROLE | USER } 대상_롤 [, ...] ]
    [ IN SCHEMA 스키마_이름 [, ...] ]
    grant_또는_revoke_표현식

grant_또는_revoke_표현식 구문:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | ALL [ PRIVILEGES ] }
    ON TABLES
    TO { [ GROUP ] 롤_이름 | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SEQUENCES
    TO { [ GROUP ] 롤_이름 | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON FUNCTIONS
    TO { [ GROUP ] 롤_이름 | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON TYPES
    TO { [ GROUP ] 롤_이름 | PUBLIC } [, ...] [ WITH GRANT OPTION ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | ALL [ PRIVILEGES ] }
    ON TABLES
    FROM { [ GROUP ] 롤_이름 | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON SEQUENCES
    FROM { [ GROUP ] 롤_이름 | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON FUNCTIONS
    FROM { [ GROUP ] 롤_이름 | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON TYPES
    FROM { [ GROUP ] 롤_이름 | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]

설명

ALTER DEFAULT PRIVILEGES 명령은 앞으로 만들어질 객체에 기본적으로 적용할 접근 권한을 미리 지정하는 일을 한다. (이 명령은 기존 이미 있는 객체들에 대한 접근 권한을 바꾸는 일은 하지 않는다. 현재, 테이블 (뷰와 외부 테이블 포함), 시퀀스, 함수, 자료형 (도메인 포함) 객체들에 대해서만 사용할 수 있다.

이 접근 권한 설정은 현재 접속한 사용자나, 명령에서 지정한 롤(또는 소속원)이 만들 객체들에 대해서만 적용된다. 접근 권한은 현재 접속한 데이터베이스 소속 모든 객체에 대해서 지정할 수도 있고, 지정한 특정 스키마 안의 모든 객체로 한정할 수도 있다. 스키마별로 지정한 기본 접근 권한은 특정 객체 종류에 지정한 데이터베이스 단위 기본 접근 권한이 있다면 그 권한에 더해진다.

GRANT 명령에서 설명한 것처럼, 어떤 객체에 대한 기본 접근 권한은 일반적으로 그 객체의 소유주에게는 모든 권한을 부여하고, PUBLIC (아무나)에게 몇몇 권한을 부여할 수도 있다. (예, public 스키마에 함수를 만들면, 해당 데이터베이스를 접근하는 모든 사용자는 해당 함수를 실행할 수 있다. - 옮긴이) 이 때, 이런 기본 접근 권한 정책을 바꾸고자 한다면, ALTER DEFAULT PRIVILEGES 명령을 이용하면 된다.

매개 변수

대상_롤

현재 접속한 사용자의 소속 롤 이름. The name of an existing role of which the current role is a member. FOR ROLE 옵션이 빠지면 현재 접속한 사용자로 간주한다.

스키마_이름

대상 스키마 이름. 이 옵션을 지정하면, 해당 스키마 안에 만들어지는 객체들에 대해서만 기본 접근 권한을 지정한다. IN SCHEMA 옵션이 빠지면, 데이터베이스 전체 객체를 대상으로 한다.

롤_이름

접근 권한을 부여하거나 박탈할 롤 이름. 이 옵션은 grant_또는_revoke_표현식 에서 항상 있으며, 사용법은 GRANT , GRANT 명령에서 사용하는 것과 동일하다. 차이점은 여기서는 앞으로 만들어질 모든 같은 종류의 객체들을 대상으로 한다는 점만 다르다.

참고

psql에서 \ddp 명령으로 이 기본 접근 권한 정보를 볼 수 있다. GRANT 명령으로 지정한 접근 권한은 \dp 명령으로 살펴 볼 수 있다.

이미 지정한 기본 접근 권한을 없애려면, 같은 명령으로 revoke 작업을 하거나, DROP OWNED 명령을 이용해서 삭제할 수 있다.

예제

앞으로 myschema 스키마 안에 만들어질 모든 테이블(과 뷰)에 대해서 모든 사용자들은 그 테이블을 select 할 수 있고, webuser 롤에 대해서는 insert 할 수 있도록 설정하는 방법:

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT INSERT ON TABLES TO webuser;

위에서 지정한 정책을 취소(박탈)하려면(이미 기존에 지정된 접근 권한은 바뀌지 않는다 - 옮긴이):

ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE SELECT ON TABLES FROM PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE INSERT ON TABLES FROM webuser;

admin 롤로 만들어지는 모든 함수들을 익명 사용자가 실행할 수 없도록 지정하는 방법:

ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;

호환성

ALTER DEFAULT PRIVILEGES 구문은 표준 SQL 문법은 아니다.

관련 항목

GRANT, REVOKE