我在GCP上使用CloudSQL postgres11,我有一些关于权限和授权的问题。作为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进行数据库迁移,这将创建两个表。事情的这一面是好的。
但是使用我的超级用户pgadmin,即使这个用户拥有数据库并且是一个超级用户,我也不能看到这些表或查询它们。我试过各种基金。我感觉我错过了一些重要的东西,因为即使我真的使用pgadmin用户创建了一个只读角色,我也无法授予对数据库公共模式中底层表的访问权限。
我遗漏了什么?
发布于 2019-10-11 20:44:10
仅仅因为一个用户(=pgadmin)拥有数据库,并不意味着该用户也拥有在该数据库中创建的表。由于pgadmin不拥有这些表,因此当您以pgadmin身份登录时无法访问这些表
如果这些表是由app用户创建的,则它们属于该用户,并且只有app用户才能将这些表的权限授予其他用户。
https://stackoverflow.com/questions/58338436
复制相似问题