Yours Ever, Data Chronicles
[Postgresql] Grant Role - 권한 부여 명령어 본문
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')
;
반응형
'Skillset > SQL' 카테고리의 다른 글
[Postgresql] How to convert epoch to timestamp (0) | 2025.01.26 |
---|---|
[SQL] DBeaver에서 프로시저 만들기 (0) | 2024.02.29 |
파이썬에서 SQL parameter 설정하기 (Python SQL formatter) (2) | 2022.09.20 |
[Python, Redshift] 파이썬에 AWS Redshift 연결하여 사용하는 방법 (1) | 2022.09.19 |
[MySQL] 문자열에서 0 제거하기 (REPLACE) (0) | 2022.08.12 |