无法更改默认权限

Ale*_*der 5 postgresql permissions

我按照以下步骤操作。

  1. 我安装了 PostgreSQL。
  2. 我是postgres通过 ( sudo -i -u postgres)登录的
  3. new_user通过 shell 脚本创建了新用户createuser --interactive
  4. 我授予该用户创建数据库的权限。
  5. 我创建了数据库:createdb new_db.

现在我想授予new_user权限,能够对他自己创建的表执行所有默认的 DML 操作(下面的命令取自这个问题),所以我输入:

postgres=# ALTER DEFAULT PRIVILEGES FOR new_user IN SCHEMA 
    public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO new_user;
Run Code Online (Sandbox Code Playgroud)

但是得到了一个错误:

ERROR:  syntax error at or near "new_user"
LINE 1: ALTER DEFAULT PRIVILEGES FOR new_user IN SCHEMA public GRANT...
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这个命令不起作用。

Erw*_*ter 10

缺少一个关键词。肯定是:

ALTER DEFAULT PRIVILEGES FOR ROLE new_user IN SCHEMA public GRANT...
Run Code Online (Sandbox Code Playgroud)

文档:

ALTER DEFAULT PRIVILEGES
    [ FOR { ROLE | USER } target_role [, ...] ]
Run Code Online (Sandbox Code Playgroud)

两个 ( { ROLE | USER }) 中的一个是必需的。

请注意,特定命令一开始没有任何意义,因为(根据文档):

不需要向对象的所有者(通常是创建它的用户)授予权限,因为默认情况下所有者拥有所有权限。

如果您希望为其他用户创建的对象授予权限,例如postgres,请使用:

而且您可能不想将其限制为特定模式。

ALTER DEFAULT PRIVILEGES FOR ROLE postgres
GRANT ALL ON TABLES TO new_user;
Run Code Online (Sandbox Code Playgroud)

而且您通常还想授予序列权限

ALTER DEFAULT PRIVILEGES FOR ROLE postgres
GRANT ALL ON SEQUENCES TO new_user;
Run Code Online (Sandbox Code Playgroud)