我一直致力于为 Postgres-flex v16 中的某个角色授予只读权限,但这不起作用。我在 postgres-db 服务器上使用我的 Azure 管理员帐户登录,以创建新角色并为其授予一些只读权限。
请找出当我尝试将“pg_read_all_data”角色授予新创建的角色时收到的错误:
postgres=> GRANT pg_read_all_data to kypdba;
ERROR: permission denied to grant role "pg_read_all_data"
DETAIL: Only roles with the ADMIN option on role "pg_read_all_data" may grant this role.
如果我尝试授予“pg_read_all_settings”角色,那确实有效,但我对该角色不感兴趣。微软是故意的吗?是否有任何文档确认只有上面输出中显示的管理员用户的成员角色才有效,而其他诸如“pg_read_all_data”之类的角色则无效?我在网上找不到任何相关信息!
上面显示的同一组命令非常适用于 v15 和 v14(我已经检查了 Azure 中的其他 Postgres Flex 数据库)。更令人沮丧的是,管理员角色(在上面显示的
\du
命令输出中模糊)被添加为使用此命令新创建的角色的成员。请查找有关服务器的其他信息,了解如何在终端中通过 PSQL 连接:
psql (15.6 (Homebrew), server 16.1)
WARNING: psql major version 15, server major version 16.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
预先感谢您的宝贵时间以及任何帮助。
错误:授予角色“pg_read_all_data”的权限被拒绝 详细信息:只有角色“pg_read_all_data”上具有 ADMIN 选项的角色才可以授予此角色。
您遇到的上述错误是因为您尝试向其他用户授予访问权限的用户没有管理员权限。首先,您需要向您尝试授予权限的用户授予
azure_pg_admin
角色。
例如,如果您使用 Azure Database for PostgreSQL 灵活服务器 (v16.1) 中的用户演示登录,则它应该具有
azure_pg_admin
角色,以将“pg_read_all_data”权限分配给另一个用户。
使用以下命令,您可以向用户授予
azure_pg_admin
角色
GRANT azure_pg_admin TO <new_user>;
这里只有 davide 和 pratik 可以向其他用户授予
azure_pg_admin
权限。