Database/RDBMS

[PostgreSQL] 읽기 전용 유저 생성

빈쿵바라기 2023. 4. 27. 17:32

특정 데이터베이스의 특정 스키마에 대한 읽기 전용 유저 생성 방법

 

1. PostgreSQL 접속

$ psql -U postgres

 

2. 유저 생성

create user <계정명> with password '<비밀번호>';

 

3. 해당 데이터베이스 접속

\c db_1;

 

4. 해당 스키마에 대한 USAGE 권한을 부여

GRANT USAGE ON SCHEMA schema_1 TO <계정명>;

 

5. 해당 스키마의 모든 테이블에 대한 SELECT 권한을 부여

GRANT SELECT ON ALL TABLES IN SCHEMA schema_1 TO <계정명>;

 

5-1. 필요한 경우 시퀀스에 대한 SELECT 권한을 부여

GRANT SELECT ON ALL SEQUENCES IN SCHEMA schema_1 TO <계정명>;

 

6. 권한 조회

테이블 권한 조회

select * from information_schema.role_table_grants where grantee = '<계정명>';

- Grantor :  권한을 부여한 role
- Grantee :  권한을 부여받은 role
- Table_schema : schema명
- Table_name : table명
- Privilege_type : 권한의 유형
- Is_grantable :  권한을 줄 수 있을 경우 YES, 아닐 경우 NO

스키마 권한 조회

WITH "names"("name") AS (
  SELECT n.nspname AS "name"
    FROM pg_catalog.pg_namespace n
      WHERE n.nspname !~ '^pg_'
        AND n.nspname <> 'information_schema'
) SELECT "name",
  pg_catalog.has_schema_privilege('<계정명>', "name", 'CREATE') AS "create",
  pg_catalog.has_schema_privilege('<계정명>', "name", 'USAGE') AS "usage"
    FROM "names";