PostgreSQL | 역할(사용자) ROLE 생성 | 역할 속성, 이름 변경(ALTER ROLE)


ALTER ROLE 명령을 사용하여 생성된 역할에 속성을 변경할 수 있다. 역할의 속성에는 역할을 만들 때 설정한 수퍼 유저 여부와 데이터베이스 및 역할 생성 권한이 있는지 등이 있다. 여기에서 역할의 속성을 변경하는 방법에 대해 설명한다.

역할의 속성 변경하기

역할의 속성을 변경하려면 ALTER ROLE 명령을 사용한다. 형식은 다음과 같다.

ALTER ROLE role_name [ WITH ] option [ ... ]

option:
      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'timestamp'

변경 대상의 역할(role_name)의 속성을 변경한다. 변경하려는 속성에 대해 값을 설정하면 된다. 설정되지 않은 속성은 그대로 유지된다. 역할 이름을 지정하는 대신 현재 사용자를 나타내는 CURRENT_USER와 현재 세션 사용자를 나타내는 SESSION_USER를 지정할 수도 있다.

역할을 만들 때 사용한 CREATE ROLE 명령에서 설정 가능한 항목은 ALTER ROLE 명령으로 변경할 수 있다. 그러나 역할을 그룹으로 사용하는 경우의 설정 항목에 대해서는 별도의 명령을 사용해야 한다.

수퍼 유저는 모든 롤의 속성을 변경할 수 있다. CREATEROLE 권한을 가진 역할은 슈퍼 사용자 및 복제 이외의 역할의 속성을 변경할 수 있다. 다른 역할은 자신의 비밀번호를 변경할 수 있다.

그러면 실제로 해보도록 하자. 수퍼 유저 postgres에서 PostgreSQL에 접속하여 생성된 역할 superkuma의 속성을 변경한다. superkuma 속성은 현재 다음과 같이 되어 있다.

devkuma=# \du superkuma
                    롤 목록
  롤 이름  |         속성         | 소속 그룹:
-----------+----------------------+------------
 superkuma | 롤 만들기, DB 만들기 | {}


devkuma=#

CREATEDB 및 CREATEROLE 권한이 설정되어 있다.

그러면 CREATEROLE 권한을 제거하고 CONNECTION LIMIT에 3을 설정하려고 한다. 다음과 같이 실행하자.

devkuma=# alter role superkuma with nocreaterole connection limit 3;
ALTER ROLE
devkuma=#

superkuma 역할의 속성이 변경되었다. 그럼 다시 superkuma의 속성을 확인하려고 한다.

devkuma=# \du superkuma
              롤 목록
  롤 이름  |   속성    | 소속 그룹:
-----------+-----------+------------
 superkuma | DB 만들기+| {}
           | 3개 연결  |


devkuma=#

CREATEROLE 권한이 삭제되고, 최대 동시 연결 수가 3으로 설정되어 있는 것을 확인할 수 있다.

일반 역할이 자신의 연결 암호를 변경하기

다음 수퍼 유저 또는 CREATEROLE 권한이 없는 일반 롤이 자신의 암호를 변경하려고 한다.

암호를 변경하는 역할은 kuma으로 하려고 한다. 명령 프롬프트에서 kuma로 데이터베이스에 연결한다. (연결 데이터베이스는 postgres로 하였다.)

C:\Users\kimkc>psql -U kuma -d postgres
kuma 사용자의 암호:
psql (12.2)
도움말을 보려면 "help"를 입력하십시오.

postgres=>

ALTER ROLE 명령을 사용하여 암호를 변경하려고 한다. 이번에는 역할 이름을 지정하는 대신에 현재의 연결을 역할을 나타내는 SESSION_USER를 대신 사용해 보겠다. 다음과 같이 실행하도록 하자.

postgres=> alter role session_user with password 'mybear';
ALTER ROLE
postgres=>

현재 연결을 시작했을 때의 역할인 kuma 연결 암호를 새로운 값으로 변경하였다.

변경 권한이 없이 속성을 변경하려는 경우

암호 변경 이외의 속성의 변경은 수퍼 유저 또는 CREATEROLE 권한을 가진 역할 밖에 할 수 없다. 권한이 없이 속성을 변경하면 어떻게 되는지를 확인하려고 한다.

그러면 일반 역할 kuma로 데이터베이스에 연결한다. 연결 데이터베이스는 postgres로 하였다.

C:\Users\kimkc>psql -U kuma -d postgres
kuma 사용자의 암호:
psql (12.2)
도움말을 보려면 "help"를 입력하십시오.

postgres=>

kuma으로 연결한 상태에서 kuma 역할의 속성을 변경하려고 한다. 다음과 같이 실행해 보자.

postgres=> alter role kuma with createrole;
오류:  권한 없음
postgres=>

시도해 보면 “오류: 권한 없음” 표시되었다. 이처럼 역할의 속성을 변경하려면 필요한 권한이 갖은 역할 밖에 할 수 없다.

여기까지 ALTER ROLE 명령을 사용하여 생성 된 역할의 속성을 변경하는 방법에 대해 알아보았다.