如何在psql上检查连接的用户

时间:2016-09-27 22:11:20

标签: postgresql

在我的PostgreSQL数据库中,我有2个用户:postgres和myuser。

默认用户是postgres,但此用户无权查询我的外表,而myuser也是如此。如何检查我是否与合适的用户联系?

如果我使用了错误的用户,我该如何更改为正确的用户?

3 个答案:

答案 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_usersession_user

Postgres授权是一个复杂的(可能过于复杂的)主题。我建议阅读官方文档。

编辑:为简化起见,我在~/.psqlrc中定义了以下别名:

\set whoami 'SELECT session_user, current_user, :''HOST'' host, :''PORT'' port, :''DBNAME'' dbname;’

现在我只需在psql提示符下键入:whoami即可查看我的授权详情。

答案 2 :(得分:2)

您始终可以运行查询“select current_user”来确定您现在的身份。至于正确的用户,您使用的是什么数据库客户端?您通常会在连接到数据库时指定该信息。