PostgreSQL和特权

时间:2015-02-24 10:31:58

标签: postgresql

PostgreSQL中新关系的权限如何工作?

步骤:

  1. 创建数据库(来自用户postgres)并连接到它
  2. CREATE DATABASE test; \c test

    1. 使用某些权限创建用户网站
    2. CREATE USER site NOCREATEDB NOINHERIT; GRANT SELECT, UPDATE, INSERT, DELETE, TRUNCATE, REFERENCES ON ALL TABLES IN SCHEMA public TO site; GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO site;

      1. 更改用户网站的默认权限
      2. ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, UPDATE, INSERT, DELETE, TRUNCATE, REFERENCES ON TABLES TO site;

        1. 使用所有权限创建用户迁移
        2. CREATE USER migration NOCREATEDB NOINHERIT; GRANT ALL PRIVILEGES ON DATABASE test TO migration;

          1. 从用户迁移连接到数据库并创建表
          2. CREATE TABLE test (id serial);

            1. 从用户站点连接到数据库,然后从创建的表中选择数据
            2. SELECT * FROM test; ERROR: permission denied for relation test

              但是如果我从用户 postgres 创建表格,那么一切正常!

              为什么默认权限在这种情况下不起作用?如何为用户站点的新表授予权限?

1 个答案:

答案 0 :(得分:1)

ALTER DEFAULT PRIVILEGES仅影响FOR ROLE子句中指定的用户创建的对象。如果省略此子句,它仅适用于运行命令的用户(在您的情况下, postgres )。

您想要ALTER DEFAULT PRIVILEGES FOR USER migration ...