在我的PostgreSQL数据库中,我有2个用户:postgres和myuser。
默认用户是postgres,但此用户无权查询我的外表,而myuser也是如此。如何检查我是否与合适的用户联系?
如果我使用了错误的用户,我该如何更改为正确的用户?
答案 0 :(得分:33)
从psql comman提示符获取有关当前连接的信息:
\conninfo
但这会显示更多信息。
要更改用户:
\c - a_new_user
' - '代替当前数据库。您可以将其写入更改数据库和用户:
\c a_new_database a_new_user
使用SQL获取信息:
SELECT current_user;
此页面列出了一些有趣的功能和变量 https://www.postgresql.org/docs/current/static/functions-info.html
答案 1 :(得分:4)
查看您当前的授权:
SELECT session_user, current_user;
要更改为您已被授予访问权限的其他角色:
SET ROLE <role_name>;
例如,如果您已将postgres
角色授予myuser
并且......
GRANT postgres TO myuser;
...然后myuser
可以暂时“su”到postgres
:
SET ROLE postgres;
注意(1):超级用户可以SET ROLE
任意其他角色,而无需明确授予其访问权限。
注意(2):仅使用SET ROLE
更改current_user
而不是session_user
。
返回默认(会话)角色:
RESET ROLE;
如果您以超级用户身份登录,则可以使用以下命令更改整个会话的授权配置文件:
SET SESSION AUTHORIZATION <role_name>;
这会同时更改current_user
和session_user
。
Postgres授权是一个复杂的(可能过于复杂的)主题。我建议阅读官方文档。
编辑:为简化起见,我在~/.psqlrc
中定义了以下别名:
\set whoami 'SELECT session_user, current_user, :''HOST'' host, :''PORT'' port, :''DBNAME'' dbname;’
现在我只需在psql提示符下键入:whoami
即可查看我的授权详情。
答案 2 :(得分:2)
您始终可以运行查询“select current_user”来确定您现在的身份。至于正确的用户,您使用的是什么数据库客户端?您通常会在连接到数据库时指定该信息。