如何更改通过 Google Console 创建的数据库中公共架构的所有者?

Har*_*mon 5 postgresql google-cloud-sql google-cloud-platform

在 Google 的 SQL Cloud Postgres 服务中,当我通过 Web 控制台为 PostgreSQL 实例创建数据库时,它会自动将数据库的默认“公共”架构的所有者设置为 cloudsqladmin。看来我无法更改所有权:

mydb=> \dn
    List of schemas
  Name  |     Owner
--------+---------------
 public | cloudsqladmin
(1 row)

mydb=> alter schema public owner to postgres;
ERROR:  must be owner of schema public


mydb=> \du
                                      List of roles
     Role name     |                   Attributes                   |      Member of
-------------------+------------------------------------------------+---------------------
 cloudsqladmin     | Superuser, Create role, Create DB, Replication | {}
 cloudsqlagent     | Create role, Create DB                         | {cloudsqlsuperuser}
 cloudsqlreplica   | Replication                                    | {}
 cloudsqlsuperuser | Create role, Create DB                         | {}
 pg_signal_backend | Cannot login                                   | {}
 postgres          | Create role, Create DB                         | {cloudsqlsuperuser}
 mynewuser         | Create role, Create DB                         | {cloudsqlsuperuser}
Run Code Online (Sandbox Code Playgroud)

我还通过 Web 控制台创建了一个“mynewuser”,但无法从“cloudsqlsuperuser”组中删除“mynewuser”:

mydb=> alter group cloudsqlsuperuser drop user mynewuser;
ERROR:  "cloudsqlsuperuser" can't be altered
Run Code Online (Sandbox Code Playgroud)

如果我想创建一个只有新用户可以访问(并拥有)的公共模式的数据库,我应该在 Google Web UI 之外执行此操作吗?似乎我创建的任何数据库都归 cloudsqladmin 所有,而我创建的任何用户都是那些“cloudsqlsuperuser”成员。如果我想限制用户的权限,我应该通常通过 psql 创建该用户并完全绕过 Web ui 吗?

小智 3

根据我的经验,您似乎必须完全绕过 web ui / cli 工具。通过cli工具创建数据库时:

gcloud sql databases create DBNAME --instance INSTANCE
Run Code Online (Sandbox Code Playgroud)

它将所有权分配给 cloudsqlsuperuser,听起来与通过 GUI 相同。

当我专门通过 CLI 工具创建用户时:

gcloud sql users create USER 'host' --instance INSTANCE
Run Code Online (Sandbox Code Playgroud)

这些用户获得与 cloudsqlsuperuser 相同的权限。在这种情况下,可以更改数据库的所有权。我通过 psql 命令以我想要拥有数据库的用户身份连接并运行成功:

ALTER DATABASE database OWNER TO user;
Run Code Online (Sandbox Code Playgroud)

但是,如果用户是通过 psql (不是 glcoud cli)创建的,则权限不同,上述操作失败。

我很想创建您的实例,通过该工具设置“postgres”用户密码,然后从那里 psql 进入该实例,并通过 sql 命令执行您需要的所有操作。我认为该工具在某些方面做得非常好(用户界面也是如此),但后来却很痛苦。

如果有人更了解,我很想听听如何使用默认的 gcloud 用户。