首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何提取PostgreSQL 10的默认角色: pg_read_all_settings、pg_read_all_stats、pg_monitor和pg_signal_backend?

如何提取PostgreSQL 10的默认角色: pg_read_all_settings、pg_read_all_stats、pg_monitor和pg_signal_backend?
EN

Database Administration用户
提问于 2019-07-18 08:32:05
回答 2查看 895关注 0票数 2

我在AWS RDS上运行了版本10的Postgres实例。我在那里有一个用户,它被授予了默认角色。我希望在沙箱上创建同一个用户,其中实例的版本为9.4。因此,我想知道版本10的默认角色中包含了哪些授权。

EN

回答 2

Database Administration用户

发布于 2019-07-18 18:21:00

看看https://www.postgresql.org/docs/current/infoschema-role-table-grants.html

视图role_table_grants标识在授予者或受让人是当前启用角色的表或视图上授予的所有特权。进一步的信息可以在table_privileges下找到。此视图与table_privileges之间唯一有效的区别是,该视图省略了通过授予公共权限使当前用户可以访问的表。

另见https://stackoverflow.com/a/55459289/6368697

票数 0
EN

Database Administration用户

发布于 2021-06-07 07:10:42

这些角色大多是硬编码的。例如,在pg_stat_get_activity源代码中(在pg_stat_activity视图中使用)- HAS_PGSTAT_PERMISSIONS宏定义为:

代码语言:javascript
运行
复制
(is_member_of_role(GetUserId(), DEFAULT_ROLE_READ_ALL_STATS) || has_privs_of_role(GetUserId(), role))

这是使用硬编码的角色名进行的直接成员资格检查。作用的目的是给予这种可能性,而不是引入某种新的赠款类型。在10之前的版本中,只检查超级用户权限或与用户ID:https://github.com/postgres/postgres/blob/REL9_4._STABLE/src/backend/utils/adt/pgstatfuncs.c#L678完全匹配的权限。

代码语言:javascript
运行
复制
if (superuser() || beentry->st_userid == GetUserId())

因此,不可能授予这样的特权。

我希望在我的沙箱中创建同一个用户,其中实例的版本为9.4

请注意,RDS是一个封闭的源叉。众所周知,RDS对代码进行了自己的更改,包括在权利体系中。因此,您将无法从RDS之外复制RDS。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/243164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档