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 | ROUTINES } TO { [ GROUP ]롤_이름
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPES TO { [ GROUP ]롤_이름
| PUBLIC } [, ...] [ WITH GRANT OPTION ] GRANT { USAGE | CREATE | ALL [ PRIVILEGES ] } ON SCHEMAS 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 | ROUTINES } FROM { [ GROUP ]롤_이름
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON TYPES FROM { [ GROUP ]롤_이름
| PUBLIC } [, ...] [ CASCADE | RESTRICT ] REVOKE [ GRANT OPTION FOR ] { USAGE | CREATE | ALL [ PRIVILEGES ] } ON SCHEMAS FROM { [ GROUP ]롤_이름
| PUBLIC } [, ...] [ CASCADE | RESTRICT ]
ALTER DEFAULT PRIVILEGES
명령은 앞으로 만들어질
객체에 기본적으로 적용할 접근 권한을 미리 지정하는 일을 한다. (이 명령은
기존 이미 있는 객체들에 대한 접근 권한을 바꾸는 일은 하지 않는다. 현재,
스키마, 테이블 (뷰와 외부 테이블 포함), 시퀀스, 함수, 자료형 (도메인 포함)
객체들에 대해서만 사용할 수 있다.
집계 함수와 프로시져를 포함해서 함수들을 대상으로 이 명령을 사용할 때,
FUNCTIONS
, ROUTINES
예약어는
같은 의미로 사용된다. (함수와 프로시져를 통칭하는 단어로
일반적으로 루틴을 사용하기에, 여기서도 ROUTINES
예약어를 사용하기로 했다. 이전 버전에서는
FUNCTIONS
만 사용했다. 이 예약어를 사용해서,
함수와 프로시져 개별적으로 따라 설정할 수는 없다.)
이 접근 권한 설정은 현재 접속한 사용자나, 명령에서 지정한 롤(또는 소속원)이 만들 객체들에 대해서만 적용된다. 접근 권한은 현재 접속한 데이터베이스 소속 모든 객체에 대해서 지정할 수도 있고, 지정한 특정 스키마 안의 모든 객체로 한정할 수도 있다.
5.7절 에서 설명한 것처럼,
어떤 객체에 대한 기본 접근 권한은 일반적으로 그 객체의
소유주에게는 모든 권한을 부여하고, PUBLIC
(아무나)에게
몇몇 권한을 부여할 수도 있다. (예, public 스키마에 함수를 만들면,
해당 데이터베이스를 접근하는 모든 사용자는 해당 함수를
실행할 수 있다. - 옮긴이)
이 때, 이런 기본 접근 권한 정책을 바꾸고자 한다면,
ALTER DEFAULT PRIVILEGES
명령을 이용하면 된다.
Default privileges that are specified per-schema are added to whatever
the global default privileges are for the particular object type.
This means you cannot revoke privileges per-schema if they are granted
globally (either by default, or according to a previous ALTER
DEFAULT PRIVILEGES
command that did not specify a schema).
Per-schema REVOKE
is only useful to reverse the
effects of a previous per-schema GRANT
.
대상_롤
현재 접속한 사용자의 소속 롤 이름.
The name of an existing role of which the current role is a member.
FOR ROLE
옵션이 빠지면 현재 접속한 사용자로 간주한다.
스키마_이름
대상 스키마 이름. 이 옵션을 지정하면, 해당 스키마 안에
만들어지는 객체들에 대해서만 기본 접근 권한을 지정한다.
IN SCHEMA
옵션이 빠지면, 데이터베이스 전체 객체를
대상으로 한다.
스키마를 대상으로 접근 권한을 설정할 때는, IN SCHEMA
구문을 사용할 수 없다. 스키마가 중복 사용되기 때문이다.
롤_이름
접근 권한을 부여하거나 박탈할 롤 이름.
이 옵션은 grant_또는_revoke_표현식
에서 항상 있으며, 사용법은 GRANT ,
GRANT 명령에서 사용하는 것과
동일하다. 차이점은 여기서는 앞으로 만들어질 모든
같은 종류의 객체들을 대상으로 한다는 점만 다르다.
psql에서 \ddp
명령으로 이 기본 접근 권한 정보를 볼 수 있다.
\dp
명령으로 볼 수 있는 접근 권한에 대한
설명은 5.7절에서 다룬다.
이미 지정한 기본 접근 권한을 없애려면, 같은 명령으로 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;
Note however that you cannot accomplish that effect
with a command limited to a single schema. This command has no effect,
unless it is undoing a matching GRANT
:
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
That's because per-schema default privileges can only add privileges to the global setting, not remove privileges granted by it.
ALTER DEFAULT PRIVILEGES
구문은 표준 SQL 문법은 아니다.