代码之家  ›  专栏  ›  技术社区  ›  J86

授予Postgres中特定数据库的默认权限

  •  0
  • J86  · 技术社区  · 7 年前

    funnycode . 我还有一个叫 funnycode_user .

    funnycode\u用户 以便用户能够:

    1. 在名称下创建数据库 .
    2. 用户可以使用该名称连接到任何未来的数据库 滑稽代码
    3. 用户可以从所有表中进行选择,并可以访问该名称下任何未来数据库上的所有序列 滑稽代码 但不是其他数据库。

    read the documentation here ,但我不明白这是怎么回事:

    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT INSERT ON TABLES TO funnycode_user;
    

    绑定到特定的数据库,在我的情况下,这将是 数据库?

    1 回复  |  直到 7 年前
        1
  •  1
  •   a_horse_with_no_name    7 年前

    创建数据库的用户自动拥有该数据库(除非指定了其他所有者),因此自动拥有该数据库的所有权限。您不需要任何额外的授权来允许该用户在数据库中创建和使用表。

    所以如果你给 funnycode_user 这个 create database 任何 他想要的不仅仅是数据库 funnycode

    创建的每个新数据库都会自动授予 connect 角色的特权 public . 如果你不想 funnycode\u用户

    pg_hba.conf

    您需要这样的条目:

    # TYPE  DATABASE        USER              ADDRESS        METHOD
    host    funnycode       funnycode_user    0.0.0.0/0      md5
    

    入口 0.0.0.0/0 意思是 funnycode\u用户 可以从任何IP地址连接。即使 funnycode\u用户 如果他创建了其他数据库,他将无法连接到它们。


    我认为更好(更干净)的方法是 funnycode\u用户

    例如,作为超级用户运行:

    create user funnycode_user password 'VerySecret';
    create database funnycode owner = funnycode_user;
    

    你只需要做一次(或者在funnycode\u用户决定删除数据库之后),你不需要给funnycode\u用户创建数据库的特权。