postgres 9.6 设置赋予用户对数据库的权限

postgres 9.6 set give user privileges to database

所以这应该很容易,但我想不通。我正在使用 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 中,允许用户使用一条语句访问数据库中所有对象的唯一方法是授予他们超级用户权限。但你不应该那样做。

分阶段进行:

  1. 访问数据库:

    默认情况下,无论如何每个人都可以访问所有数据库,您可以在 pg_hba.conf 中进行配置。如果您删除了 PUBLIC 对数据库的权限,请使用

    GRANT ALL ON DATABASE ... TO ...;
    
  2. 访问模式:

    对于所有架构,运行

    GRANT ALL ON SCHEMA ... TO ...;
    
  3. 访问表:

    对于所有架构,运行

    GRANT ALL ON ALL TABLES IN SCHEMA ... TO ...;
    
  4. 访问序列:

    对于所有模式,tun

    GRANT ALL ON ALL SEQUENCES IN SCHEMA ... TO ...;
    
  5. 访问函数:

    默认情况下,函数创建时具有 PUBLICEXECUTE 权限。如果已删除,请使用

    授予访问权限
    GRANT ALL ON ALL FUNCTIONS IN SCHEMA ... TO ...;
    

还有其他不太常用的东西,例如大型对象或外部服务器。您还必须为这些权限授予权限。有关详细信息,请查看 GRANT 的文档。