21.2. role 속성

데이터베이스 role은 권한을 정의하는 속성이 다수 있으며, 클라이언트 인증 시스템과 인터랙션한다.

로그인 권한

데이터베이스 연결을 위한 초기 role 이름으로 LOGIN 속성이 있는 role만 사용할 수 있다. LOGIN 속성이 있는 role은 데이터베이스 사용자와 동일한 것으로 간주될 수 있다. 로그인 권한이 있는 role을 생성하려면 다음 중 하나를 사용해야 한다.

CREATE ROLE name LOGIN;
CREATE USER name;

(CREATE USER는 디폴트로 LOGIN 권한을 준다는 점에서 CREATE ROLE과 다르다.)

수퍼유저 상태

데이터베이스 수퍼유저는 로그인 권한을 제외한 모든 권한 검사를 건너 뛴다. 이 권한은 위험하며, 무심코 사용해서는 안 된다. 작업 대부분은 수퍼유저 이외의 다른 role로 수행하는 것이 좋다. 새 데이터베이스 수퍼유저를 생성하려면 CREATE ROLE name SUPERUSER를 사용해야 한다. 수퍼유저인 role로 이것을 수행해야 한다.

데이터베이스 생성

데이터베이스를 생성하려면 권한이 명시적으로 role에 주어져야 한다(모든 권한 검사를 건너 뛰는 수퍼유저인 경우 제외). 이러한 role을 생성하려면 CREATE ROLE name CREATEDB를 사용해야 한다.

role 생성

role을 추가적으로 생성하려면 권한이 명시적으로 role에 주어져야 한다(모든 권한 검사를 건너 뛰는 수퍼유저인 경우 제외). 이러한 role을 생성하려면 CREATE ROLE name CREATEROLE을 사용해야 한다. CREATEROLE 권한이 있는 role은 다른 role을 변경 및 삭제할 수 있으며, 멤버십을 부여 또는 취소할 수도 있다. 단, 수퍼유저 role의 멤버십을 생성, 변경(alter), 삭제 또는 변경(change)하려면 수퍼유저 상태가 필요하다. CREATEROLE로는 부족하다.

복제 초기화

streaming replication을 초기화하려면 권한이 명시적으로 role에 주어져야 한다(모든 권한 검사를 건너 뛰는 수퍼유저인 경우 제외). streaming replication에 사용되는 role은 LOGIN 권한이 있어야 한다. 이러한 role을 생성하려면 CREATE ROLE name REPLICATION LOGIN을 사용해야 한다.

패스워드

패스워드는 데이터베이스에 연결할 때 사용자가 패스워드를 입력해야 하는 클라이언트 인증 방법인 경우에만 중요하다. passwordmd5 인증 방법은 패스워드를 이용한다. 데이터베이스 패스워드는 운영 체제 사용자 패스워드와 구분된다. role 생성 시 패스워드 지정은 CREATE ROLE name PASSWORD 'string'을 사용해야 한다.

role의 속성은 ALTER ROLE로 생성한 후 수정할 수 있다. 자세한 내용은 CREATE ROLEALTER ROLE 명령에 대한 참고 페이지를 참조 바란다.

작은 정보

수퍼유저는 아니지만 CREATEDBCREATEROLE 권한이 있는 role을 생성하고, 데이터베이스와 role의 모든 루틴 관리에 대해 이 role을 사용하는 것이 좋다. 이러한 방법으로 실제로 수퍼유저 권한이 불필요한 작업을 수퍼유저로 실행하는 위험이 방지된다.

role은 19장에 설명된 여러 가지 런타임 구성 설정에 대해 role별 기본값을 가질 수도 있다. 예를 들면, 연결할 때 인덱스 스캔을 비활성화하려면, 다음과 같이 할 수 있다.

ALTER ROLE myname SET enable_indexscan TO off;

이것은 설정을 저장한다(그러나 즉시 설정되지는 않음). SET enable_indexscan TO off가 세션 시작 직전에 실행되었더라도 추후 이 role이 연결할 때 이것이 나타난다. 세션 중에 이 설정을 변경할 수 있으며, 이것은 기본값에 불과하다. role별 기본 설정을 삭제하려면 ALTER ROLE rolename RESET varname을 사용해야 한다. LOGIN 권한 없이 role에 연결된 role별 기본값은 절대 호출되지 않으므로 아무 쓸모가 없다는 점에 유의해야 한다.