CREATE SCHEMA test_schema
PostgreSQL은 ROLE 이라는 개념을 사용, 데이터베이스 접근 권한을 관리
설정 방식에 따라 데이터베이스 사용자(user) 또는 사용자들의 그룹(group)으로 간주
데이터 베이스 객체(테이블, 함수 등..)을 쇼유 가능, 객체에 대한 권한을 다른 역할에 할당 및 접근 제어 가능
USER/GROUP의 개념을 모두 포함 -> 8.1 버전 이전에는 달랐지만 현재는 ROLE만 존재
CREATE ROLE name [ [ WITH ] option [ ... ] ]
where option can be:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT connlimit
| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
| VALID UNTIL 'timestamp'
| IN ROLE role_name [, ...]
| IN GROUP role_name [, ...] // 호환성 허용 IN ROLE
| ROLE role_name [, ...]
| ADMIN role_name [, ...]
| USER role_name [, ...] // 호환성 허용 -> ROLE
| SYSID uid // 호환성 허용(무시됨)
User 생성(ROLE과 사실상 동일)
-- example
CREATE USER test_user WITH PASSWORD 'test_user';
CREATE USER name [ [ WITH ] option [ ... ] ]
where option can be:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT connlimit
| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
| VALID UNTIL 'timestamp'
| IN ROLE role_name [, ...]
| IN GROUP role_name [, ...]
| ROLE role_name [, ...]
| ADMIN role_name [, ...]
| USER role_name [, ...]
| SYSID uid
GRANT ALL PRIVILEGES ON SCHEMA test_schema TO test_user; -- 전체 권한 부여
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA test_schema TO test_user;
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA test_schema
GRANT ALL PRIVILEGES ON TABLES TO test_user; -- 생성될 테이블에도 적용
-- postgres user가 생성할 객체에 대해서(지금은 스키마의 테이블)의 기본 권한을 test_user에 게 부여
GRANT USAGE ON SCHEMA schema_name TO test_user2;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO test_user2; -- SELECT 권한만 주기
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA schema_name
GRANT SELECT ON TABLES TO test_user2;