所以这应该很容易,但我无法弄明白。我正在使用postgres 9.6我有一个postgres用户和一个数据库。我想让该用户只能在给定的数据库上执行任何操作。我尝试了以下不起作用的命令:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
ALTER DATABASE mydatabase OWNER TO myuser;
文档似乎很清楚,ALL PRIVILEGES应该包括更新,插入等,但是当我登录用户时实际上无法做任何事情。 我也见过例如:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO user_name;
但我不知道如何将其限制为一个数据库? 任何帮助都非常赞赏。
答案 0 :(得分:5)
在PostgreSQL中,允许用户使用单个语句访问数据库中所有对象的唯一方法是为其提供超级用户权限。但你不应该这样做。
分阶段进行:
访问数据库:
默认情况下,每个人都可以访问所有数据库,您可以在pg_hba.conf
中配置它。如果您已删除数据库上PUBLIC
的权限,请使用
GRANT ALL ON DATABASE ... TO ...;
访问架构:
对于所有架构,请运行
GRANT ALL ON SCHEMA ... TO ...;
访问表格:
对于所有架构,请运行
GRANT ALL ON ALL TABLES IN SCHEMA ... TO ...;
访问序列:
对于所有模式,请
GRANT ALL ON ALL SEQUENCES IN SCHEMA ... TO ...;
访问功能:
默认情况下,使用EXECUTE
PUBLIC
权限创建功能。如果已删除,请使用
GRANT ALL ON ALL FUNCTIONS IN SCHEMA ... TO ...;
还有其他较少使用的东西,如大型对象或外部服务器。您还必须为这些人授予权限。有关详细信息,请查看GRANT
的文档。