Amazon Aurora PostgreSQL 호환 버전 데이터베이스(DB) 클러스터에서 객체 권한을 관리하는 방법을 알고 싶습니다.
해결 방법
Aurora PostgreSQL 호환 DB 클러스터에서 객체 권한을 관리하려면 데이터베이스 객체에서 다양한 작업을 수행할 수 있는 특정 권한을 사용자 또는 역할에 부여하십시오.
데이터베이스 권한 유형에 대한 자세한 내용은 PostgreSQL 웹 사이트의 권한을 참조하십시오.
참고: AWS는 "사용 권한" 대신 "권한"이라는 용어를 사용합니다.
사용자 생성 및 사용자에게 객체 권한 부여
다음 단계를 완료하십시오.
- psql과 같은 PostgreSQL 클라이언트를 사용하여 Aurora PostgreSQL 호환 클러스터에 연결합니다.
- 사용자를 생성하려면 다음 명령을 실행합니다.
CREATE USER username WITH PASSWORD 'password';
참고: username 및 password를 각각 사용자 이름과 암호로 바꾸십시오.
- 사용자 또는 역할에 객체에 대한 작업을 수행할 권한을 부여하려면 다음 명령을 실행하십시오.
GRANT privilege_type ON object_name TO user_or_role;
참고: privilege_type을 사용자가 수행하도록 하려는 데이터베이스 작업으로 바꾸십시오. object_name을 사용자가 작업을 수행하도록 하려는 데이터베이스 객체로 바꾸십시오. user_or_role을 객체 권한을 할당하려는 사용자 또는 역할로 바꾸십시오.
예를 들어 다음 명령을 실행하여 user_or_role에 여러 객체 권한을 부여할 수 있습니다.
GRANT SELECT, INSERT, UPDATE ON object_name TO user_or_role;
자세한 내용은 PostgreSQL 웹 사이트에서 GRANT를 참조하십시오.
사용자 및 역할의 권한 취소
사용자 또는 역할의 권한을 제거하려면 다음 명령을 실행하십시오.
REVOKE privilege_type ON object_name FROM user_or_role;
참고: privilege_type을 제거하려는 데이터베이스 작업으로 바꾸십시오. object_name을 데이터베이스 객체로 바꾸십시오. user_or_role을 권한을 제거하려는 사용자 또는 역할로 바꾸십시오.
자세한 내용은 PostgreSQL 웹사이트의 REVOKE를 참조하십시오.
사용자에게 필요한 최소 권한 부여
사용자 또는 역할에 필요한 권한만 부여하는 것이 가장 좋습니다.
테이블에 있는 권한을 검토하려면 다음 명령을 실행하십시오.
\z table_name
참고: table_name을 검토하려는 테이블 이름으로 바꾸십시오.
또는 다음 명령을 실행할 수 있습니다.
SELECT * FROM information_schema.table_privileges WHERE table_name = 'your_table';
사용자 그룹의 역할 생성 및 할당
개별 사용자 대신 사용자 그룹에 대한 역할을 생성하고 역할에 권한을 할당하는 것이 가장 좋습니다. 자세한 내용은 PostgreSQL 웹 사이트의 서버 관리를 위한 데이터베이스 역할 및 데이터베이스 역할을 참조하십시오.
역할을 생성하고 데이터베이스의 모든 테이블에 대한 권한을 역할에 부여하려면 다음 명령을 실행하십시오.
CREATE ROLE analyst_role;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO analyst_role;
참고: schema_name을 스키마 이름으로 바꾸고 analyst_role을 역할 이름으로 바꾸십시오.
사용자 및 역할에 스키마 수준 권한 부여
사용자 또는 역할에 스키마 수준 권한을 부여하려면 다음 명령을 실행하십시오.
GRANT USAGE ON SCHEMA schema_name TO user_or_role;
참고: schema_name을 스키마 이름으로 바꾸고 user_or_role을 사용자 또는 역할 이름으로 바꾸십시오.
향후 객체에 대한 기본 권한 설정
새 테이블에 대한 기본 권한을 readonly _role로 설정하려면 다음 명령을 실행하십시오.
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO readonly_role;
참고: schema_name을 스키마 이름으로 바꾸십시오.
사용자 간 객체 소유권 이전
보안 문제를 방지하려면 객체 소유권을 관리해야 합니다.
소유권을 새 소유자에게 이전하려면 다음 명령을 실행하십시오.
ALTER TABLE table_name OWNER TO new_owner;
참고: table_name을 테이블 이름으로 바꾸고 new_owner를 새 소유자의 이름으로 바꾸십시오.
활동 스트림을 사용하여 권한 변경 사항 모니터링
데이터베이스 활동을 모니터링하려면 DB 클러스터의 활동 스트림을 시작하고 databaseActivityEventList JSON 배열을 사용하십시오. 자세한 내용은 databaseActivityEvents JSON 객체를 참조하십시오.
정기적인 권한 검토 일정 수립
정기적인 권한 검토 일정을 수립하고 현재 요구 사항에 따라 권한을 업데이트합니다.
예를 들어 다음 쿼리를 실행하여 테이블 및 뷰에 대해 부여한 모든 권한을 볼 수 있습니다.
-- To view table and view privileges
SELECT
grantee,
table_schema,
table_name,
privilege_type
FROM
information_schema.role_table_grants
ORDER BY
grantee, table_schema, table_name, privilege_type;
-- List schema privileges
SELECT nspname, rolname, nspacl FROM pg_namespace n JOIN pg_roles r ON r.oid = n.nspowner;
-- Show all privileges for a specific role
SELECT table_catalog, table_schema, table_name, privilege_typeFROM information_schema.table_privilegesWHERE grantee = 'role_name';
-- Show role-specific schema privileges
SELECT n.nspname as schema_name,
r.rolname as role_name,
has_schema_privilege(r.oid, n.oid, 'CREATE') as has_create,
has_schema_privilege(r.oid, n.oid, 'USAGE') as has_usageFROM pg_namespace nCROSS JOIN pg_roles rWHERE n.nspname NOT LIKE 'pg_%'
AND n.nspname != 'information_schema';