如何在 Postgres 中授予权限?我按照文档,但是它不起作用。
$ psql tmadev
psql (9.2.4)
Type "help" for help.
tmadev=# grant all privileges on database tmadev to tma;
GRANT
tmadev=# \z sample
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+--------+-------+-------------------+--------------------------
public | sample | table | |
(1 row)
tmadev=# \q
Chloe@xps /srv/www/htdocs
$ psql -U tma tmadev
psql (9.2.4)
Type "help" for help.
tmadev=> select * from sample limit 2;
ERROR: permission denied for relation sample
STATEMENT: select * from sample limit 2;
ERROR: permission denied for relation sample
tmadev=>
tmadev=> \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
Chloe | Superuser, Create role, Create DB, Replication | {}
tma | | {}
答案1
grant all privileges on database...
不授予任何可能的特权之内数据库,但是在它比你想象的要少得多。
每文档,数据库上的权限定义为:
授予 { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | 数据库数据库名称 [,...] 上的所有 [ 特权 ] 至 { [ 组 ] 角色名称 | PUBLIC } [,...] [带有授予选项]
所以grant all privileges on database tmadev to tma
相当于:
grant create,connect,temporary on database tmadev to tma;
大概你想要类似的东西(当连接到时tmadev
)
grant all on all tables in schema public to tma;
grant all on all sequences in schema public to tma;
grant all on schema public to tma;
可能还有其他一些。
另一方面,如果tma
您是唯一需要完全访问该数据库的用户或组,那么将其设为数据库的所有者会更加方便,在这种情况下,它拥有数据库内的所有权限,并且不需要任何这些授予。