1. 사용자 생성, 수정, 삭제
(1) 사용자 생성
1
| CREATE ROLE username WITH LOGIN PASSWORD 'password';
|
1
2
3
4
| CREATE ROLE app_user
WITH LOGIN PASSWORD 'pass123'
CREATEDB
CREATEROLE;
|
LOGIN → 로그인 가능
CREATEDB → DB 생성 가능
CREATEROLE → 사용자 생성 가능
SUPERUSER → 관리자
NOSUPERUSER → 일반유저(기본값)
(2) 사용자 수정
1
| ALTER ROLE username WITH PASSWORD 'newpassword';
|
1
2
| ALTER ROLE username CREATEDB;
ALTER ROLE username NOSUPERUSER;
|
1
| ALTER ROLE oldname RENAME TO newname;
|
(3) 사용자 삭제
※ 해당 사용자가 소유한 객체가 있으면 삭제 불가
(4) 사용자 조회
또는
1
| SELECT rolname FROM pg_roles;
|
2. 권한 부여와 회수
(1) 권한 부여
1
| GRANT CONNECT ON DATABASE mydb TO username;
|
1
| GRANT USAGE ON SCHEMA public TO username;
|
1
| GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO username;
|
1
| GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE users TO username;
|
1
| GRANT USAGE, SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA public TO username;
|
1
| GRANT EXECUTE ON FUNCTION my_function() TO username;
|
(2) 권한 회수
1
| REVOKE SELECT ON users FROM username;
|
1
| REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM username;
|
(3) 기본 권한 설정
1
2
| ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO username;
|
(4) 권한 조회
3. 권한 구조의 핵심 이해하기
User와 Role의 관계
- User(사용자) = 로그인이 가능한 Role
- Role = 사용자 + 그룹 개념
- 권한은 Role에 부여
1
2
3
| CREATE USER user1 PASSWORD 'pass';
-- 위 구문은 아래와 동일
CREATE ROLE user1 WITH LOGIN PASSWORD 'pass';
|
Role을 다른 Role에 할당하기
1
| GRANT readonly TO username;
|
4. 실수 포인트
1) 스키마 권한 빠짐
1
| GRANT USAGE ON SCHEMA public TO username;
|
→ 없으면 테이블 접근 불가
2) 시퀀스 권한 없음 (INSERT 실패)
1
| GRANT USAGE, SELECT ON SEQUENCES
|
3) 미래 테이블 권한 누락
1
| ALTER DEFAULT PRIVILEGES ...
|
Comments