[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;
해당 스키마에 존재하는 모든 테이블에 대한 권한을 주거나, 기본 권한을 변경시켜 추후 테이블 추가를 위한 설정을 미리 할 수도 있다.
하지만 실업무에선 갓디비버를 쓴다 ^^
'Database' 카테고리의 다른 글
[PostgreSQL] sql file import via Git Bash in Window OS (2) | 2022.07.11 |
---|---|
[MSSQL & SQL Server] Dirty read, WITH (NOLOCK) (0) | 2022.06.09 |
[PostgreSQL] ROW_NUMBER() OVER PARTITION BY를 이용한 다중컬럼 그룹핑 조회 (0) | 2021.11.23 |
[PostgreSQL] count filter를 이용한 여러건 동시추출 (0) | 2021.11.01 |
[PostgreSQL] 랜덤쿠폰번호 생성 및 중복체크 Function 만들기 (0) | 2021.10.19 |