2017-05-26 84 views
0

在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?

回答

0

根据我的经验,你似乎必须完全绕过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用户。

相关问题