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

时间:2017-09-08 01:39:15

标签: sql postgresql privileges

我有一个没有表格的Postgres数据库。该数据库由用户拥有。

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

但正如a_horse_with_no_name所说,这些权限无法在数据库级别设置。

Documentation

答案 1 :(得分:1)

表格未在"数据库"中创建。 - 仅在架构中。

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

grant usage, create on schema public to someuser;

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

如果要允许用户创建新架构,则需要在数据库上授予create权限:

grant create on database somedb to someuser;

如果要允许用户在架构中选择任何现有表,则需要明确授予:

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

如果您希望该用户也能够为 用户创建的新表执行此操作,则需要更改默认权限:

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