Yours Ever, Data Chronicles

[Postgresql] Grant Role - 권한 부여 명령어 본문

Skillset/SQL

[Postgresql] Grant Role - 권한 부여 명령어

Everly. 2025. 1. 27. 06:23

Admin이 특정 role에게 권한을 줄 때 사용할 수 있는 여러 명령어에 대해 알아보자.

 

1. 신규 Role 생성하기

--예시: de_user 생성
create user de_user password 'password';

 

위 쿼리를 날려 'de_user' 라는 신규 role 을 생성할 수 있다.

참고로, 보통 패스워드는 영어 대문자, 소문자, 특수문자, 숫자를 포함하여 생성한다.

이제 밑에서 이 'de_user' 라는 role에게 권한을 부여해보자.

 

2. Role에게 "특정 스키마 내" 테이블 권한 부여하기 

이미 스키마 내에 생성되어 있는 테이블에 대해 select(조회), insert(삽입), update(업데이트), delete(전체삭제), truncate(테이블 틀 유지하되 내용만 삭제) 권한은 다음 쿼리를 통해 부여할 수 있다.

grant select, insert, update, delete, truncate on all tables in schema mc to de_user;

 

위 쿼리는  'de_user' 라는 role이 'mc' 라는 스키마에 대해 명령어를 입력할 수 있도록 권한을 부여한다. 

단, 이는 이미 스키마 내 존재하는 테이블에 대해서만 가능하며 새로 생성되는 테이블에 대해선 권한이 부여되지 않는다.

이를 위해선 아래 쿼리를 통해 가능하다.

alter default privileges in schema mc grant select on tables to de_user;

 

테이블을 생성(create) 할 수 있는 권한을 부여하는 쿼리는 아래와 같다.

grant create on schema mc to de_user;

 

 

이번엔 테이블이 아닌 특정 프로시저와 함수에 대한 권한을 부여하는 쿼리이다.

-- 프로시저 권한/함수 권한 줄 경우
grant all privileges on all functions in schema mc to de_user;
grant all privileges on all procedures in schema mc to de_user;

 

스키마의 사용 권한은 다음 쿼리를 사용한다.

-- 사용 권한
grant usage on schema mc to de_user;

 

 

3. 부여가 잘 되었는지 검사하기

마지막으로 아래 쿼리를 통해 잘 부여가 되었는지 검사할 수 있다. 

select
  usename
  , schemaname
  , tablename
  , has_table_privilege(usename, schemaname || '.' || tablename, 'select') as select
  , has_table_privilege(usename, schemaname || '.' || tablename, 'insert') as insert
  , has_table_privilege(usename, schemaname || '.' || tablename, 'update') as update
  , has_table_privilege(usename, schemaname || '.' || tablename, 'delete') as delete
  , has_table_privilege(usename, schemaname || '.' || tablename, 'references') as references
  , has_schema_privilege(usename, schemaname, 'usage') as usage
from
  pg_tables, pg_user
where usename in ('de_user')  
and schemaname in ('mc')  
--and tablename in ('확인하고 싶은 테이블1', '확인하고 싶은 테이블2')
  
;

 

반응형