PostgreSQL 데이터베이스 Role



PostgreSQL 데이터베이스 Role


 - PostgreSQL은 role 이라는 개념을 사용하여 데이터베이스 액세스 권한을 관리합니다.

 - role의 개념은 "사용자" 및 "그룹"의 개념을 포함합니다.

 - 데이터베이스 role은 운영체제 사용자와는 다른 개념입니다.

 - 특정 데이터베이스 연결에 사용할 role 이름은 애플리케이션 특정 방식의 연결 요청을 초기화하는 클라이언트에 의해 표시됩니다. 예를들면, psql 프로그램은 -U 옵션을 사용하여 연결한 role을 표시합니다. 다수의 애플리케이션이 기본적으로 현재 운영체제 시스템 사용자의 이름을 가정합니다. (createuser 및 psql 포함) 따라서 role 및 운영체제 사용자 간에 네이밍 연관성을 유지하는 것이 편리합니다.

 - 오라클 처럼 user와 role이 분리된 개념이 아니라, user=role 느낌으로 사용됩니다. 



role 생성


postgres=#CREATE ROLE [name];


role 삭제


postgres=# DROP ROLE [name];


role 확인


postgres=# \du

postgres=# select rolname from pg_roles;




※ role  속성


 - 로그인 권한 :

 postgres=# CREATE ROLE [name] LOGIN;

 postgres=# CREATE ROLE [name];


 Login 속성이 있는 role은 "데이터베이스 사용자"와 동일한 것으로 간주 될 수 있습니다.

 CREATE USER는 디폴트로 LOGIN 권한을 준다는 접에서 CREATE ROLE과 다릅니다.


 - 슈퍼유저:

 postgres=# CREATE ROLE [name] SUPERUSER;


 데이터베이스 슈퍼유저는 로그인 권한을 제외한 모든 권한 검사를 건너뜁니다. 

 아무에게나 슈퍼유저 권한을 주는 것은 위험합니다.


 - 데이터베이스 생성:

 postgres=# CREATE ROLE [name] CREATEDB;


 - role 생성:

 postgres=# CREATE ROLE [name] CREATEROLE;


 role을 추가적으로 생성하려면 권한이 명시적으로 role에 주어져야 합니다.

 CREATEROLE 권한이 있는 role은 다른 role을 변경, 삭제할 수 있으며, 멤버십을 부여 또는 취소할 수 있습니다.

 단 슈퍼유저의 role은 수정 불가.


 - 복제 초기화:

 postgres=# CREATE ROLE [name] REPLICATION LOGIN;


 streaming replication을 초기화하려면 필요한 권한입니다.

 해당 role은 항상 LOGIN 권한을 같이 가지고 있어야 합니다.


 - 패스워드:

 postgres=# CREATE ROLE [name] PASSWORD 'string';


 패스워드는 데이터베이스에 연결할 때 사용자가 패스워드를 입력해야 하는 클라이언트 인증 방법인 경우에만 중요합니다.

 password 및 md5 인증방법은 패스워드를 이용합니다.

 


 - role의 속성은 ALTER ROLE 명령으로 수정할 수 있습니다.



role 멤버십


 - 권한 관리의 편의상 사용자를 그룹으로 묶는 것이 편리할 수 있습니다. 이렇게 하면 권한을 그룹단위로 부여하거나 취소할 수 있습니다. PostgreSQL에서 이것은 그룹을 나타내는 role을 생성한 다음, 그룹 role의 멤버십을 개별 사용자 role에 부여하면 됩니다.

 - 그룹 role을 설정 하려면 먼저 role을 생성해야 합니다.

 - 그룹 role이 존재하는 경우 grant 및 revoke 명령을 사용하여 멤버를 추가 및 삭제할 수 있습니다.


 쉽게 설명하자면 아래와 같습니다.


 두개의 role을 만들어 봅니다.

 postgres=# CREATE ROLE user01 login;

 postgres=# CREATE ROLE admin;

 postgres=# GRANT admin to user01;

 postgres=# ALTER role admin WITH createdb createrole;


 user01을 이용해서 로그인은 가능하지만, admin으로는 로그인이 되지 않습니다.

 

 postgres@psql-db01:/usr/local/pgsql/data]$ psql -d postgres -U admin

 psql: FATAL:  role "admin" is not permitted to log in

 

 postgres@psql-db01:/usr/local/pgsql/data]$ psql -d postgres -U user01

 psql (9.6.11)

 Type "help" for help. 

 

 postgres=>


 user01은 로그인은 가능하지만 권한이 없기 때문에 create database 명령은 사용할 수 없습니다.

 

 postgres=> create database test02;

 ERROR:  permission denied to create database

 postgres=>

 

 

 user01은 슈퍼유저가 아니기 때문에 postgres에 롤로 전환할 수 없습니다.


 postgres=> set role postgres;

 ERROR:  permission denied to set role "postgres"



 하지만 admin에 속해 있기 때문에 admin으로 전환은 가능합니다.

 admin으로 전환해서 create database 명령을 사용 가합니다.


 postgres=> set role admin;

 SET

 postgres=> create database test03;

 CREATE DATABASE

 

 이렇게 여러가지 role을 만들어서 멤버십을 통해 다양하게 활용할 수 있습니다.

 

 role 간에 전환은 set role [name]; 명령으로 합니다.

 

 처음에 접속한 role로 돌아가려면


 set role [처음 접속한 role name];

 set role none;

 reset role;


 셋중 하나로 원상 복구가 됩니다.

 oracle로 치면 SQL> 안에서 conn 명령으로 유저가 이동하는것과 비슷한데, 허용된 멤버십 안에서 이동이 가능한 것 입니다.




 

'Database > PostgreSQL' 카테고리의 다른 글

PostgreSQL 백업 및 복원  (0) 2019.01.01
PostgreSQL 로컬라이제이션  (0) 2019.01.01
PostgreSQL 데이터베이스 Role  (0) 2019.01.01
PostgreSQL 아카이브 모드  (0) 2019.01.01
PostgreSQL 커널 리소스 관리  (0) 2019.01.01
PostgreSQL 모니터링  (0) 2018.12.31