【问题标题】:How to grant a SELECT permission for a new GCP Cloud SQL PostgreSQL user?如何为新的 GCP Cloud SQL PostgreSQL 用户授予 SELECT 权限?
【发布时间】:2021-08-02 10:17:45
【问题描述】:

我需要从现有的 GCP Cloud SQL Postgres 数据库中读取数据。我使用 GCP 控制台创建了一个新用户。当我以该用户身份登录时,每当我尝试从任何表中选择时,都会收到“拒绝访问”。我尝试了各种 ALLOW 和 GRANT 都没有运气。

当我运行 GRANT ALL PRIVILEGES ON DATABASE 时,最奇怪的行为是“找不到数据库”响应。它说“数据库不存在”,尽管它绝对存在。

需要对通过 GCP 控制台创建的用户执行哪些命令,以便用户可以从表中进行 SELECT?

谢谢

【问题讨论】:

  • 不要说“...没有运气”。显示命令和错误信息。
  • 您为新用户授予了哪些权限?

标签: postgresql google-cloud-platform google-cloud-sql


【解决方案1】:

当您通过云控制台在 Gcp 中创建 Postgresql 实例并将用户添加到您的实例时,当您尝试从您创建的用户连接到您的实例时,您会收到“数据库不存在”错误。

这是因为

当我们尝试使用 gcloud sql connect --user ,问题可能是此命令仅适用于默认用户,即 Postgres。 你也可以查看文档,database Error

解决方法是连接到您的默认 postgres 用户,然后使用 "\c" psql 命令重新连接为不同的用户。

PostgreSQL总是要连接数据库,mysql只能“连接服务器”

你总是要连接到数据库,你不能连接到“集群/服务器”

步骤:

  1. gcloud sql connect [实例名] --user=postgres --quiet

  2. 提供密码

  3. postgres=> 终端打开

  4. 输入 \c 即

    postgres=>\c [databasename][username]
    
    example-
    
        postgres=> \c testdata user1
    
  5. 用户更改为您创建的用户

  6. 在数据库中创建你的表并像这样查询它 -

    从表 1 中选择 *;

【讨论】:

【解决方案2】:

这是因为您应该使用 --database 标志指定数据库。

例如:

 gcloud sql connect myinstance --user=myuser --database=mydb

【讨论】:

    【解决方案3】:

    这个问题有两个方面,在探讨这些方面之前,了解IAM和SQL用户之间的区别很重要。

    IAM 用户在创建时对read data inside the database 没有任何固有权利。必须在 Postgres 中使用 'grant' command 将数据库和表的权限显式授予 IAM 用户

    使用 Postgres 内部命令创建用户,访问级别由关联的角色确定,如link1link2 中所述。 在这种特定情况下,您应该使用有权授予 IAM 角色适当权限的账户。 由于您没有 postgresql 密码,您必须像 [5] 中那样重置它

    虽然已经说明这是在生产中,但没有其他方法。只有具有适当权限的现有用户才能更新数据库以更改权限,因为这是在数据库本身内完成的。

    [5]gcloud sql users set-password postgres --instance=<DBNAME> --prompt-for-password

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      相关资源
      最近更新 更多