【问题标题】:How to check connected user on psql如何在 psql 上检查连接的用户
【发布时间】:2017-02-05 16:53:47
【问题描述】:

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

默认用户是 postgres,但是这个用户没有权限查询我的外部表,而 myuser 可以。如何检查我是否与正确的用户建立联系?

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

【问题讨论】:

标签: postgresql


【解决方案1】:

从 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

【讨论】:

  • 如果您使用SET ROLE new_role 命令更改了用户(角色),\conninfo 仍将显示您连接的角色,而不是您当前的角色。
  • 你是对的,@GregoryArenius。最好使用SELECT current_user, session_user; 找出您当前的授权配置文件。
  • \conninfo 将返回类似 You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432". 的内容,如果您将回复添加到您的答案中,这可能对其他人有用!
  • @JosephMCasey 我添加了示例。
  • 谢谢,但是如何在没有密码的情况下创建新用户
【解决方案2】:

查看您当前的授权:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 2010-10-01
      相关资源
      最近更新 更多