函数介绍
- pg_get_userbyid(oid)
- 描述:获取给定 OID 的角色名。
- 返回类型:name
- 备注:pg_get_userbyid 通过角色的 OID 抽取对应的用户名。
- 查看函数定义
postgres=# \sf pg_get_userbyid
CREATE OR REPLACE DEFINER = omm FUNCTION pg_catalog.pg_get_userbyid(oid)
RETURNS name
LANGUAGE internal
STABLE PARALLEL SAFE STRICT AUTHID CURRENT_USER NOT FENCED NOT SHIPPABLE
AS $function$pg_get_userbyid$function$;
查看用户密码有效期
- 使用 omm用户可以查询出3条记录
postgres=# select pg_get_userbyid(roloid),max(passwordtime),max(passwordtime)+90::interval as passwordexpiredtime,max(passwordtime)+90::interval-now() as duar from pg_catalog.pg_auth_history where pg_get_userbyid(roloid) not like 'pw%' group by roloid order by 3;
pg_get_userbyid | max | passwordexpiredtime | duar
-----------------+-------------------------------+-------------------------------+---------------------------
omm | 2025-01-24 15:35:43.384728+08 | 2025-04-24 15:35:43.384728+08 | -28 days -01:20:38.773678
repl | 2025-04-24 17:48:37.234443+08 | 2025-07-23 17:48:37.234443+08 | 62 days 00:52:15.076037
u1 | 2025-05-22 15:28:49.913557+08 | 2025-08-20 15:28:49.913557+08 | 89 days 22:32:27.755151
(3 rows)
- 使用u1用户,只能查询出1条记录
You are now connected to database "postgres" as user "u1".
postgres=> select pg_get_userbyid(roloid),max(passwordtime),max(passwordtime)+90::interval as passwordexpiredtime,max(passwordtime)+90::interval-now() as duar from pg_catalog.pg_auth_history where pg_get_userbyid(roloid) not like 'pw%' group by roloid order by 3;
pg_get_userbyid | max | passwordexpiredtime | duar
-----------------+-------------------------------+-------------------------------+-------------------------
u1 | 2025-05-22 15:28:49.913557+08 | 2025-08-20 15:28:49.913557+08 | 89 days 22:11:44.038743
(1 row)
- 经过排查,是u1用户权限不足,无法查询到其他用户信息。
postgres=> select pg_get_userbyid(roloid) from pg_catalog.pg_auth_history ;
pg_get_userbyid
-----------------
u1
(7 rows)
- 查看omm和u1用户具备的权限
postgres=# \du u1
List of roles
Role name | Attributes | Member of
-----------+--------------+-----------
u1 | Monitoradmin | {}
postgres=# \du omm
List of roles
Role name | Attributes | Member of
-----------+----------------------------------------------------------------------------------------------------------------------------------+-----------
omm | Sysadmin, Create role, Create DB, Replication, Administer sso, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, UseFT | {}
- 授予权限,显示内置函数是硬编码,不可以授权
postgres=# grant execute on function pg_catalog.pg_get_userbyid(oid) to u1;
ERROR: All built-in functions are hard coded, and they should not be updated.
- 将sysadmin权限授予u1 用户后,可以使用pg_get_userbyid函数
postgres=> \du u1
List of roles
Role name | Attributes | Member of
-----------+------------------------+-----------
u1 | Sysadmin, Monitoradmin | {}
postgres=> select pg_get_userbyid(roloid) from pg_catalog.pg_auth_history;
pg_get_userbyid
-----------------
omm
pwadmin
pwsso
pwaudit
pwdb_exporter
repl
u1
(7 rows)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




