我想了解如何在 Amazon Aurora PostgreSQL 相容版資料庫叢集中管理物件權限。
解決方法
若要管理 Aurora PostgreSQL 相容版資料庫叢集中的物件權限,請授予使用者或角色特定權限,以便對資料庫物件執行各種動作。
如需更多有關資料庫權限類型的資訊,請參閱 PostgreSQL 網站上的權限。
**注意:**AWS 使用「permission」來表示「privilege」。
建立使用者並授予物件權限給使用者
請完成以下步驟:
- 使用 PostgreSQL 用戶端 (例如 psql) 連線至您 的 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 替換為新擁有者名稱。
使用活動串流監控權限變更
若要監控資料庫活動,請為您的資料庫叢集啟動活動串流,並使用 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';