Postgres授予USER对DATABASE的权限



我有一个使用postgres数据库的应用程序。我有一个超级管理员用户。现在我还需要两个用户:一个"application-user";一个具有crud -特权,另一个具有ALTER和create -特权(用于应用迁移)。这些都是我需要的用户,因为应用程序有自己的User-Access管理,而且根本不打算改变这一点。

我想要这样的:GRANT SELECT, INSERT, UPDATE, DELETE ON DATABASE MyDatabase TO myuser

我在这里读到postgres提供预定义的角色。这很好——但这些角色适用于全球(正如一条评论所指出的那样)。我的数据库是在public模式下,这变得有问题,因为一些系统表也在公共-我不希望我的用户能够读取或写入这些。

我可以用GRANT pg_read_all_data, pg_write_all_data ON DATABASE MyDatabase TO myuser,但这不起作用。

因为我不会经常改变这些特权,我甚至可以很好地使用GRANT pg_read_all_data ON MyDatabase.MyTable TO myuser。但这也行不通。

对此有什么想法吗?

PostgreSQL没有ALTERCREATE权限。能够运行ALTERCREATE语句的数据库用户必须是数据库对象的所有者。如果你的对象已经被另一个用户拥有了,你必须改变它的所有权。

对于另一个用户,您必须在每个对象上授予权限。数据库上的特权没有帮助——对象之间没有特权继承。不要忘记在模式上授予USAGE

我建议您创建比public更多的模式。如果应用程序的对象有单独的模式,可以使用像

这样的语句
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA myapp TO someuser;

相关内容

最新更新