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 확장 기능이다.