postgres 9.6 set赋予数据库用户权限

noo*_*392 1 postgresql privileges

所以这应该很容易,但我无法弄明白.我正在使用postgres 9.6我有一个postgres用户和一个数据库.我想让该用户只能在给定的数据库上执行任何操作.我尝试了以下不起作用的命令:

GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
ALTER DATABASE mydatabase OWNER TO myuser;
Run Code Online (Sandbox Code Playgroud)

文档似乎很清楚,ALL PRIVILEGES应该包括更新,插入等,但是当我登录用户时实际上无法做任何事情.我也见过例如:

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO user_name;
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将其限制在一个数据库?任何帮助都非常赞赏.

Lau*_*lbe 6

在PostgreSQL中,允许用户使用单个语句访问数据库中的所有对象的唯一方法是为其提供超级用户权限.但你不应该这样做.

分阶段进行:

  1. 访问数据库:

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

    GRANT ALL ON DATABASE ... TO ...;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 访问架构:

    对于所有模式,运行

    GRANT ALL ON SCHEMA ... TO ...;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 访问表格:

    对于所有模式,运行

    GRANT ALL ON ALL TABLES IN SCHEMA ... TO ...;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 访问序列:

    对于所有模式,tun

    GRANT ALL ON ALL SEQUENCES IN SCHEMA ... TO ...;
    
    Run Code Online (Sandbox Code Playgroud)
  5. 访问功能:

    默认情况下,使用EXECUTE权限创建功能PUBLIC.如果已删除,请授予访问权限

    GRANT ALL ON ALL FUNCTIONS IN SCHEMA ... TO ...;
    
    Run Code Online (Sandbox Code Playgroud)

还有其他较少使用的东西,如大型对象或外部服务器.您还必须为这些人授予权限.查看文档以GRANT获取详细信息.