ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PostgreSQL 데이터베이스 Role
    Database/PostgreSQL 2019.01.01 17:35



    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

    댓글 0

Designed by black7375.

티스토리 툴바