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