PostgreSQL 9.6.2 문서 | |||
---|---|---|---|
이전 | 위로 | 장 21. 데이터베이스 role | 다음 |
데이터베이스 role은 개념상 운영 체제 사용자와 완전히 다르다. 사실, 대응 관계를 유지하는 것이 편리할 수 있지만, 그럴 필요는 없다. 데이터베이스 role은 데이터베이스 클러스터 설치 간에 전역적이다(데이터베이스에 개별적이지 않음). role을 생성하려면 CREATE ROLE SQL 명령을 사용해야 한다.
CREATE ROLE name;
name은 SQL 식별자에 대한 규칙(특수 문자 또는 큰따옴표 사용 안함)을 준수한다. (실제로는 LOGIN 같은 옵션을 명령에 추가하고 싶을 수도 있다. 자세한 내용이 아래에 나와 있다.) 기존 role을 삭제하려면 유사한 DROP ROLE 명령을 사용해야 한다.
DROP ROLE name;
편의상, 프로그램 createuser 및 dropuser는 쉘 명령줄에서 호출할 수 있는 이러한 SQL 명령의 래퍼(wrapper)로 제공된다.
createuser name dropuser name
기존 role 집합을 판단하려면 pg_roles 시스템 카탈로그를 검사해야 한다. 예를 들면,
SELECT rolname FROM pg_roles;
psql 프로그램의 \du 메타 명령도 기존 role을 나열할 때 유용하다.
데이터베이스 시스템을 부트스트랩하려면 갓 초기화된 시스템이 사전 정의된 role을 항상 포함해야 한다. 이 role은 항상 "수퍼유저"이며, 기본적으로(initdb 실행 중에 변경하지 않는 한) 데이터베이스 클러스터를 초기화했던 운영 체제와 이름이 동일하다. 통상적으로 이 role의 이름은 postgres이다. role을 좀 더 생성하려면 먼저 이 postgres로 연결해야 한다.
데이터베이스 서버에 대한 모든 연결은 일부 특정 role의 이름이 사용되며, 이러한 role은 해당 연결에서 실행된 명령에 대한 초기 액세스 권한을 결정한다. 특정 데이터베이스 연결에 사용할 role 이름은 애플리케이션 특정 방식의 연결 요청을 초기화하는 클라이언트에 의해 표시된다. 예를 들면, psql 프로그램은 -U 옵션을 사용하여 연결할 role을 표시한다. 다수의 애플리케이션이 기본적으로 현재 운영 체제 시스템 사용자의 이름을 가정한다(createuser 및 psql 포함). 따라서 role 및 운영 체제 사용자 간에 네이밍 연관성을 유지하는 것이 편리하다.
주어진 클라이언트 연결을 할 수 있는 데이터베이스 role 집합은 20장에서 설명된 대로 클라이언트 인증 설정에 의해 결정된다. (따라서, 로그인 이름이 꼭 그 사람의 실명과 일치해야 할 필요가 없는 것처럼, 클라이언트를 운영 체제 사용자와 일치하는 role로 연결해야만 하는 것은 아니다.) role ID는 연결된 클라이언트에서 가능한 권한 집합을 결정하므로 다중 사용자 환경을 설정할 때 권한을 세심하게 구성하는 것이 중요하다.