如何在 Cygwin 上的 Postgres 中授予选择、插入权限?

如何在 Cygwin 上的 Postgres 中授予选择、插入权限?

如何在 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您是唯一需要完全访问该数据库的用户或组,那么将其设为数据库的所有者会更加方便,在这种情况下,它拥有数据库内的所有权限,并且不需要任何这些授予。

相关内容