我在GCP上使用CloudSQL Postgres 11,并且我对权限和授予有一些疑问。我只是暂时不了解它,对Postgres来说是个新手。
我有一个用户pgadmin
,它是超级用户。有了这个用户,我可以连接到实例并创建一个名为“ sandbox”的数据库。
然后我具有一个应用角色,其定义如下:
CREATE ROLE app;
GRANT CONNECT ON DATABASE <database name> TO app;
GRANT USAGE, CREATE ON SCHEMA public TO app;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO app;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO app;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO app;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE ON SEQUENCES TO app;
我创建了一个名为app_sandbox的用户,我授予了该角色。
然后,应用程序用户使用flyway进行数据库迁移,该数据库创建了2个表。那方面很好。
但是使用我的超级用户pgadmin,即使该用户拥有数据库并且是超级用户,我也看不到这些表或查询它们。我尝试了各种补助。感觉好像我错过了一些重要的事情,因为即使我真的想与pgadmin用户创建一个只读角色,也无法授予对数据库公共模式中基础表的访问权限。
我想念什么?
答案 0 :(得分:1)
仅仅因为一个用户(= pgadmin
)拥有该数据库,并不意味着该用户还拥有在该数据库中创建的表。而且由于pgadmin
不拥有这些表,所以以pgadmin
登录后就无法访问它们
如果应用程序用户创建了表,则它们属于该用户,并且只有app
用户可以将这些表的特权授予其他用户。