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 用户。
| 归档时间: |
|
| 查看次数: |
13134 次 |
| 最近记录: |