如何将数据库的某些权限授予用户?

How do I grant certain privileges on a database to a user?

我有一个没有表的 Postgres 数据库。数据库归用户所有。

当我在命令行中输入 psql 然后 \dt 时,我得到的是:

   Name    |    Owner    | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+-------------+----------+-------------+-------------+-----------------------
 somedb    | someuser    | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

我想授予 someuser select 的权力,在 somedb 上插入、更新、删除、t运行 分类和创建表。当我在命令行中 运行 GRANT CREATE SELECT INSERT UPDATE DELETE TRUNCATE PRIVILEGES ON DATABASE somedb TO someuser; 时,出现此错误:

LINE 1: GRANT CREATE SELECT INSERT UPDATE DELETE TRUNCATE PRIVILEGES...

我必须更改什么才能将这些权限授予 someuser

您需要在每个权限之间添加逗号:

GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE nombase [, ...]
    TO { nomutilisateur | GROUP nomgroupe | PUBLIC } [, ...] [ WITH
GRANT OPTION ]

但是正如所说,这些权限不能在数据库级别设置。

Documentation

表未在 "a database" 中创建 - 仅在模式中创建。

如果您希望该用户仅在特定架构中创建 table,则您需要授予对该架构的使用权:

grant usage, create on schema public to someuser;

您不需要为该用户尚未创建的 table 授予权限。创建 table 的用户是该 table 的所有者。 table 的所有者可以用它做任何事情。无需授予所有者额外的权限。

如果要允许用户创建新模式,您需要授予对数据库的 create 权限:

grant create on database somedb to someuser;

如果你想允许用户select任何现有的table,你需要明确授权:

grant select,insert,update,delete on all tables in schema public to someuser;

如果您希望该用户也能够为不是由 那个 用户创建的新 table 执行此操作,您需要更改默认权限:

alter default privileges
   in schema public 
   grant select,insert,update,delete on tables
   to someuser;