【问题标题】:How can I connect to a database as another user?如何以其他用户身份连接到数据库?
【发布时间】:2018-10-15 06:43:30
【问题描述】:

我目前正在为一个学校项目创建一个 API,一切正常。我的设置是:Node v10、Postgres、Koa 等等……

我目前有这个:

CREATE ROLE sa WITH LOGIN PASSWORD 'some-password.';
CREATE DATABASE master WITH OWNER sa;
\c master;

当初始化脚本在 docker 机器中运行时,我得到的输出是这个:

CREATE ROLE
CREATE DATABASE
You are now connected to database "master" as user "postgres".

所以我确实将文件更改为这样的:

CREATE ROLE sa WITH LOGIN PASSWORD 'some-password.';
CREATE DATABASE master WITH OWNER sa;
CONNECT TO master AS main USER sa;

我得到一个语法错误:

STATEMENT:  CONNECT TO master AS sa USER sa;
psql:/docker-entrypoint-initdb.d/init.sql:4: ERROR:  syntax error at or near "CONNECT"

我在文档中找不到任何地方(或者看起来不太好)如何从 .sql 文件连接到具有特定用户的数据库。

如何连接到 'master' 及其所有者,即 .sql 文件中的 'sa'?

【问题讨论】:

  • 有个疑问,你用的是SQL Server还是PostgreSQL?
  • @Vivek,我正在使用 PostgreSQL。我学习的第一个 RDBMS 是 SQL Server。这就是为什么每当我使用除 SQL Server 之外的其他 RDBMS 时,我创建的几乎每个管理员/数据库所有者都被命名为“sa”。很难改掉这个习惯。
  • 查看我在下面发布的答案,如果您仍然遇到任何问题,请告诉我。
  • Postgres 中没有 connect SQL statement。要切换psql 中的连接,请使用\c databasename username
  • @a_horse_with_no_name 你的答案是我需要的!超级简单哈哈

标签: postgresql


【解决方案1】:

你可以通过 psql 中的这个命令来做到这一点:

\c db_name usr_name

【讨论】:

  • 它会导致这个错误:FATAL: Peer authentication failed for user "user_name" Previous connection kept`
  • @OussamaHe 您可以通过修改位于/etc/postgresql/<version>/main/pg_hba.conf 中的文件pg_hba.conflocal all all peer 更改为local all all md5 来解决此问题。有关更多信息,请参阅此page
  • 我不会按照 eng.mrgh 建议的方式更改 pg_hba,我宁愿使用:psql -h localhost -U -W,用于本地 ipv4 连接。
  • 在 psql 提示符下将用户会话从一个用户更改为 diff 用户的任何命令,无需修改 pg_hba.conf ? Oracle 等价物:SQL> conn user/password@db
【解决方案2】:

我的假设是您有一个名为“a.sql”的 SQL 文件,其中包含文件中的代码行。

CREATE ROLE sa WITH LOGIN PASSWORD 'some-password.';
CREATE DATABASE master WITH OWNER sa;
\c master;

现在您正在使用“psql”命令行界面 (CLI) 运行此脚本,因此您会收到如下消息...

CREATE ROLE
CREATE DATABASE
You are now connected to database "master" as user "postgres".

现在,需要注意的是,您已经通过“\c master”用户“postgres”连接到数据库“master”,因为您通过了“postgres”用户的凭据。那么我在这里吗,如果是,那么您必须传递不同用户的用户名和密码,即“sa”,如下所示。

psql -h localhost -p 5432 -U sa -f a.sql master

现在,它会提示输入“sa”用户的密码,最后,您的脚本将运行,您将连接到“sa”用户。

【讨论】:

  • 在 psql 提示符下使用密码将用户会话从一个用户更改为 diff 用户的任何命令? Oracle 等效项:SQL> conn user/password@db
【解决方案3】:

您可以在终端中通过此命令执行此操作

psql -d database -U username

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2015-11-26
    • 2013-01-29
    • 2010-09-15
    相关资源
    最近更新 更多