如何在 psql 上检查连接用户

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

默认用户是 postgres,但该用户没有查询外部表的权限,而 myuser 有。如何检查是否与正确的用户连接?

如果我使用了错误的用户,我如何改变到正确的一个?

118936 次浏览

您总是可以运行查询“ select current _ user”来确定您现在是谁。就正确的用户而言,您使用的是什么数据库客户机?通常在连接到数据库时指定该信息。

要从 psql 命令提示符获取有关当前连接的信息:

\conninfo

不过,这将显示更多信息。

更改用户:

\c - a_new_user

-’替代当前数据库。

更改数据库 还有用户:

\c a_new_database a_new_user

获取此信息的 SQL 命令:

SELECT current_user;

例子:

postgres=# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432"


postgres=# \c a_new_database a_new_user
psql (12.1 (Ubuntu 12.1-1.pgdg16.04+1), server 9.5.20)
You are now connected to database "a_new_database" as user "a_new_user".


a_new_database=# SELECT current_user;
current_user
--------------
a_new_user
(1 row)



这个页面列出了一些有趣的函数和变量。
Https://www.postgresql.org/docs/current/static/functions-info.html

查看您目前的授权:

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来查看我的授权详细信息。