我有一个没有表格的Postgres数据库。该数据库由用户拥有。
当我在命令行中输入psql
然后\dt
时,这就是我得到的内容:
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------------+----------+-------------+-------------+-----------------------
somedb | someuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
我想授予someuser
在somedb
上选择,插入,更新,删除,截断和创建表格的权力。当我在命令行中运行GRANT CREATE SELECT INSERT UPDATE DELETE TRUNCATE PRIVILEGES ON DATABASE somedb TO someuser;
时,出现此错误:
LINE 1: GRANT CREATE SELECT INSERT UPDATE DELETE TRUNCATE PRIVILEGES...
我必须更改哪些权限才能将这些权限授予someuser
?
答案 0 :(得分:1)
您需要在每个权限之间添加逗号:
GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE nombase [, ...]
TO { nomutilisateur | GROUP nomgroupe | PUBLIC } [, ...] [ WITH
GRANT OPTION ]
但正如a_horse_with_no_name所说,这些权限无法在数据库级别设置。
答案 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;