ALTER ROLE

ALTER ROLE — 데이터베이스 롤 정의 바꾸기

요약

ALTER ROLE 롤명세 [ WITH ] 옵션 [ ... ]

옵션 자리에는:

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT 접속제한
    | [ ENCRYPTED ] PASSWORD '비밀번호'
    | VALID UNTIL '타임스탬프'

ALTER ROLE 이름 RENAME TO 새이름

ALTER ROLE { 롤명세 | ALL } [ IN DATABASE 데이터베이스이름 ] SET 환경설정_매개변수 { TO | = } {  | DEFAULT }
ALTER ROLE { 롤명세 | ALL } [ IN DATABASE 데이터베이스이름 ] SET 환경설정_매개변수 FROM CURRENT
ALTER ROLE { 롤명세 | ALL } [ IN DATABASE 데이터베이스이름 ] RESET 환경설정_매개변수
ALTER ROLE { 롤명세 | ALL } [ IN DATABASE 데이터베이스이름 ] RESET ALL

롤명세 자리에는:

    롤이름
  | CURRENT_USER
  | SESSION_USER

설명

ALTER ROLE 명령은 PostgreSQL 롤 속성을 바꾼다.

첫번째 구문은 CREATE ROLE 명령으로 만든 롤의 여러 롤 속성들을 바꾸는 명령이다. (이 구문으로 모든 롤 속성을 바꿀 수 있다. 단 구성원 관리 작업은 GRANT, REVOKE 명령으로 한다.) 이 명령에서 따로 지정하지 않는 속성들은 기존 설정을 유지한다. 데이터베이스 슈퍼유저는 모든 롤의 모든 속성을 바꿀 수 있다. CREATEROLE 권한이 있는 롤은 슈퍼유저도 아니고, 복제작업용 롤도 아닌 롤에 대해서 변경 작업을 할 수 있다. 일반 롤은 자신의 비밀번호만 바꿀 수 있다.

두번째 구문은 롤 이름을 바꾼다. 데이터베이스 슈퍼유저는 모든 롤 이름을 바꿀 수 있고, CREATEROLE 권한이 있는 롤은 슈퍼유저가 아닌 롤의 이름을 바꿀 수 있고, 현재 접속한 롤은 자신의 이름을 바꿀 수 없다. (이 이름을 바꾸려면, 다른 롤로 다시 접속해 작업한다.) 롤 이름은 MD5 암호화된 비밀번호의 소금으로 사용되기 때문에, 롤 이름을 바꾸면, 그 롤에 지정되었던 MD5 암호화된 비밀번호를 지운다.

나머지 구문은 지정한 롤이 접속할 때 사용할 서버 환경 설정 매개 변수 값을 지정하는 명령이다. 여기서 IN DATABASE 옵션을 지정하면 해당 데이터베이스로 접속할 때만 반영한다. 특정 롤 이름 대신에, ALL을 지정하면, 모든 사용자를 대상으로 한다. ALL을 쓰면서 IN DATABASE 옵션을 쓰면, ALTER DATABASE ... SET ... 명령과 같은 효과가 있다.

이렇게 지정한 설정값들은 로그인 할 때 세션 기본 값으로 처리되며, postgresql.conf 파일에서 지정한 설정값이나, postgres 명령의 명령행 옵션으로 지정한 설정값은 이 때 무시되고 여기서 지정한 값을 사용한다. 이 작업은 로그인 할 때만 일어난다. SET ROLE 명령이나, SET SESSION AUTHORIZATION 명령에서는 이 설정값 반영을 하지 않는다. 데이터베이스 차원으로 지정한 설정도 같은 설정을 롤 차원으로 했다면, 롤 차원의 설정값을 사용한다. 데이터베이스 차원의 설정이나, 롤 차원의 설정은 모든 롤을 대상으로 지정한 설정 값보다 우선 적용된다.

슈퍼유저는 모든 롤의 세션 기본 값을 바꿀 수 있다. CREATEROLE 권한이 있는 롤은 슈퍼유저가 아닌 롤의 설정값을 바꿀 있다. 일반 사용자는 자신의 설정값만 바꿀 수 있다. 몇몇 환경 설정 매개 변수는 이 명령으로 바꿀 수 없으며, 슈퍼유저가 그런 변수값을 바꾸는 작업을 해야 바뀐다. 슈퍼유저만 모든 데이터베이스 안 모든 롤의 설정을 바꿀 수 있다.

매개 변수

이름

작업 대상 롤 이름.

CURRENT_USER

현재 접속한 롤을 작업 대상으로 함.

SESSION_USER

현재 세션 롤을 작업 대상으로 함.

SUPERUSER
NOSUPERUSER
CREATEDB
NOCREATEDB
CREATEROLE
NOCREATEROLE
INHERIT
NOINHERIT
LOGIN
NOLOGIN
REPLICATION
NOREPLICATION
BYPASSRLS
NOBYPASSRLS
CONNECTION LIMIT connlimit
[ ENCRYPTED ] PASSWORD 비밀번호
VALID UNTIL '타임스탬프'

CREATE ROLE 에서 지정한 각 속성을 바꾼다. 자세한 것은 CREATE ROLE 명령 설명서를 참조하면 된다.

새이름

바뀔 새 롤 이름.

데이터베이스이름

서버 환경 설정 값을 해당 데이터베이스를 사용할 때만 적용한다.

환경설정_매개변수

해당 롤이 서버에 접속해서 세션이 만들어지면 적용할 환경 설정 매개 변수 값을 지정한다. 으로 DEFAULT를 지정하거나, RESET 명령을 사용하면, 롤 차원에 지정한 설정을 지운다. 즉 서버 차원에서 지정한 설정 값을 다음 세션부터 사용한다. RESET ALL 명령은 모든 롤 차원으로 사용하는 설정 값들을 지운다. SET FROM CURRENT 명령은 현재 세션에서 쓰고 있는 설정 값을 롤 차원의 설정값으로 지정한다. IN DATABASE 옵션이 추가 되면, 이 설정이 해당 데이터베이스로 접속할 경우 한정한다.

여기서 지정하는 롤 차원의 설정 값들은 로그인 할 때만 반영한다; SET ROLE, SET SESSION AUTHORIZATION 명령을 실행할 때는 롤 차원의 설정 값 처리는 하지 않는다.

사용할 수 있는 매개 변수 이름과 그 값에 대한 자세한 설명은 SET 명령 설명서와 19장에서 다루고 있다.

참고

새 롤을 만들 때는 CREATE ROLE 명령을 사용하고, 특정 롤을 지울 때는 DROP ROLE 명령을 사용한다.

ALTER ROLE 명령은 그 롤의 구성원 관리를 할 수 없다. 이 작업은 GRANT, REVOKE 명령으로 한다.

이 명령을 이용해서 롤 비밀번호를 바꿀 때는 주의해야 한다. 이 비밀번호는 일반 문자열로 입력받기 때문에, 클라이언트에서 명령 내역이나, 서버 로그에 이 비밀번호가 그대로 남아 있을 수 있다. 사용자가 입력하는 일반 문자열로 된 비밀번호를 어디에도 남기지 않으려면, psql 프로그램을 실행해서 거기서 사용하는 \password 내장 명령을 이용하면 된다.

또 다른 방식으로 이 개별 환경 설정 매개 변수 값은 롤 차원이 아니라, 데이터베이스 차원에서 지정할 수도 있다. ALTER DATABASE 명령 설명서 참고. 같은 환경 설정 매개 변수에 대해서 각각 그 값이 다르다면, 롤 차원에서 지정한 설정 값이 반영 된다.

예제

롤 비밀번호 바꾸기:

ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

롤 비밀번호 없애기:

ALTER ROLE davide WITH PASSWORD NULL;

비밀번호 유효 기한 지정:

ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';

비밀번호 유효 기한 없애기:

ALTER ROLE fred VALID UNTIL 'infinity';

다른 롤을 만들거나 새 데이터베이스를 만들 수 있는 역할 부여:

ALTER ROLE miriam CREATEROLE CREATEDB;

maintenance_work_mem 환경 설정 매개 변수값 개별 지정:

ALTER ROLE worker_bee SET maintenance_work_mem = 100000;

특정 롤과 특정 데이터베이스 접속에 대해서 client_min_messages 환경 설정 매개 변수값 개별 지정:

ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;

호환성

ALTER ROLE 구문은 PostgreSQL 확장 기능이다.

관련 항목

CREATE ROLE, DROP ROLE, ALTER DATABASE, SET