如何更改通过Google控制台创建的数据库中公共架构的所有者?
在Google的SQL Cloud Postgres服务中,当我通过Web控制台为PostgreSQL实例创建数据库时,它会自动将数据库的默认“公共”模式的所有者设置为cloudsqladmin。看来我不能改变所有权:如何更改通过Google控制台创建的数据库中公共架构的所有者?
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}
我还可以通过Web控制台创建了一个“mynewuser”,不能从“cloudsqlsuperuser”组中删除了“mynewuser”:如果我
mydb=> alter group cloudsqlsuperuser drop user mynewuser;
ERROR: "cloudsqlsuperuser" can't be altered
想要创建一个只有新用户才能访问(并拥有)的公共模式的数据库,我应该在Google web ui之外进行此操作吗?看起来我创建的任何数据库都由cloudsqladmin拥有,并且我创建的任何用户都是那些“cloudsqlsuperuser”成员。如果我想限制用户的权限,我是否应该通过psql正常创建该用户,并完全绕过Web UI?
根据我的经验,你似乎必须完全绕过web ui/cli工具。 当您创建通过CLI工具数据库:
gcloud sql databases create DBNAME --instance INSTANCE
它分配所有权cloudsqlsuperuser,同样通过从它的声音的GUI。
当我创建了一个用户专门通过CLI工具:
gcloud sql users create USER 'host' --instance INSTANCE
这些用户获得相同的权限cloudsqlsuperuser。在这种情况下,可以更改数据库的所有权。我不得不通过psql的命令成功连接,因为我想自己的数据库和运行用户:
ALTER DATABASE database OWNER TO user;
但是,如果用户是通过PSQL(不glcoud CLI)创建的,由许可是不一样的,并在上述失败。
我很想创建你的实例,通过这个工具设置'postgres'用户密码,然后将psql从那里设置到实例中,并通过sql命令完成你需要的一切。我认为这个工具可以很好地完成一些事情(就像用户界面一样),但是稍后它会很痛苦。
如果有人知道更好,我很想听听你如何使用默认的gcloud用户。