跳至内容

如何管理 Aurora PostgreSQL 兼容版数据库集群中的对象权限?

2 分钟阅读
0

我想知道如何管理 Amazon Aurora PostgreSQL 兼容版数据库 (DB) 集群中的对象权限。

解决方法

要管理 Aurora PostgreSQL 兼容版数据库集群中的对象权限,请向用户或角色授予对数据库对象执行各种操作的特定权限。

有关数据库权限类型的更多信息,请参阅 PostgreSQL 网站上的 Privileges(权限)。

**注意:**AWS 使用术语 "permission" 来表示 "privilege"(“权限”)。

创建用户并向其授予对象权限

完成以下步骤:

  1. 使用 PostgreSQL 客户端(例如 psql)连接到您的 Aurora PostgreSQL 兼容版集群。
  2. 要创建用户,请运行以下命令:
    CREATE USER username WITH PASSWORD 'password';
    **注意:**请将 usernamepassword 替换为您的用户名和密码。
  3. 要向用户或角色授予对某个对象执行操作的权限,请运行以下命令:
    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';
AWS 官方已更新 6 个月前