我想知道如何管理 Amazon Aurora PostgreSQL 兼容版数据库 (DB) 集群中的对象权限。
解决方法
要管理 Aurora PostgreSQL 兼容版数据库集群中的对象权限,请向用户或角色授予对数据库对象执行各种操作的特定权限。
有关数据库权限类型的更多信息,请参阅 PostgreSQL 网站上的 Privileges(权限)。
**注意:**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 网站上的 Database roles for server administration(用于服务器管理的数据库角色)和 Database roles(数据库角色)。
要创建角色并向其授予对数据库中所有表的权限,请运行以下命令:
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';