-->

[PostgreSQL] 유저 생성, 권한 주기

 

PostgreSQL을 처음 설치할 때 SuperUser 권한을 가진 'postgres'라는 계정이 default로 생성된다.

하지만 데이터베이스를 생성하고 조회할 때마저 이 계정으로 접속한다면 그건 문제가 있다. 

왜냐면 모든 테이블을 drop 할 권한도 갖춘 가장 강력한 힘을 가진 계정이기 때문이다.

따라서 데이터베이스를 이용할 admin계정과 조회용 계정을 만들어본다.

 

[minggu@dev DB server ~]# psql -U postgres
postgres 사용자의 암호:
psql (14.0)
도움말을 보려면 "help"를 입력하십시오.

postgres=#

일단 psql 명령어를 통해 최초에 생성한 postgres 계정으로 접속을 한다.

 

postgres=# \du
                                 롤 목록
  롤 이름   |                      속성                      | 소속 그룹:
------------+------------------------------------------------+------------
 postgres   | 슈퍼유저, 롤 만들기, DB 만들기, 복제, RLS 통과 | {}

postgres=#

psql에서는 명령어 이용할 때 역 슬래쉬(\)를 이용한다. \du 명령어를 통해 유저리스트를 확인해본다.

 

[Admin 계정 생성]
postgres=# CREATE ROLE minggu_admin SUPERUSER CREATEDB CREATEROLE NOINHERIT LOGIN PASSWORD '123456';
CREATE ROLE
postgres-#

[developer 계정 생성]
postgres=# CREATE ROLE minggu_dev NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT LOGIN PASSWORD 'test';
CREATE ROLE
postgres-#

ROLE을 만들면서 옵션 설정을 통해 admin과 dev계정을 만들었다.

 

postgres=# \du
                                 롤 목록
  롤 이름     |                      속성                      | 소속 그룹:
------------+------------------------------------------------+------------
 minggu_admin | 슈퍼유저, 상속 없음, DB 만들기                 | {}
 minggu_dev   | 상속 없음                                      | {}
 postgres     | 슈퍼유저, 롤 만들기, DB 만들기, 복제, RLS 통과 | {}

확인해 보면 계정이 추가되었음을 알 수 있다.

 

[원하는 테이블에 대한 Select 권한]
postgres=# GRANT USAGE ON SCHEMA scm1 TO minggu_dev
postgres=# GRANT SELECT ON TABLE scm1.testTable TO minggu_dev;

[원하는 테이블에 대한 멀티 권한]
postgres=# GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE scm1.testTable TO minggu_dev;

이제 추가한 dev 계정에 권한을 GRANT 한다.

기본적으로 스키마의 이용권한을 주고 원하는 테이블에 원하는 권한을 주면 된다.

 

[특정 시퀀스에 대한 권한 부여]
postgres=# GRANT select ON ALL SEQUENCES IN SCHEMA scm1 TO minggu_dev;

[특정 함수에 대한 권한 부여]
postgres=# GRANT ALL ON FUNCTION [scm1.test_function(varchar,int4)] FROM minggu_dev;

[모든 함수와 시퀀스에 대한 권한 부여]
postgres=# GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA scm1 TO minggu_dev
postgres=# GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA scm1 TO minggu_dev;

함수와 시퀀스를 사용한다면 잊지 말고 권한을 챙겨줘야 한다. (view도)

 

[해당 스키마에 대한 모든 테이블 권한주기]
postgres=# GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA scm1 TO minggu_dev;

[추후 테이블 추가를 위한 기본권한 변경]
postgres=# ALTER DEFAULT PRIVILEGES IN SCHEMA scm1 GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO minggu_dev;

해당 스키마에 존재하는 모든 테이블에 대한 권한을 주거나, 기본 권한을 변경시켜 추후 테이블 추가를 위한 설정을 미리 할 수도 있다.

 

 

 

 

하지만 실업무에선 갓디비버를 쓴다 ^^

 

+ Recent posts