【问题标题】:postgres: How to give read privileges to a user? [duplicate]postgres:如何授予用户读取权限? [复制]
【发布时间】:2013-05-07 06:16:02
【问题描述】:

我已将一个 .sql 文件导入 postgres。我创建了一个名为“yaq”的数据库并将其导入数据库。

psql=# grant all privileges on database yaq to Jannat;
postgres@server:~$ psql yaq
psql (9.1.8, server 9.1.9)
Type "help" for help.

yaq=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner   
--------+-----------------+-------+----------
 public | relationalfacts | table | yaq
 public | spatial_ref_sys | table | postgres
(2 rows)

yaq=# select * from relationalfacts
yaq-# ;
 id | relation | arg1 | arg2 | timebegin | timeend | location | locationlatitude | locationlongitude | primarywitness | context 
----+----------+------+------+-----------+---------+----------+------------------+-------------------+----------------+---------
(0 rows)

我认为,由于我已将所有权限授予所有者“yaq”而不是“yago”,因此我无法读取该关系。有什么方法可以将关系表 yaq 的读取权限授予用户 Jannat?请帮忙

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    GRANT ALL ON DATABASE ...不递归地授予对该数据库中的模式、函数、表等的权限。

    GRANT ALL 为DATABASE 授予数据库的USAGE 和CONNECT 权限。就是这样。

    要授予表的权限,请使用表授予语句之一或GRANT ALL ON ALL TABLES IN SCHEMA ... TO ...。

    详情请见the PostgreSQL manual on GRANT。

    在GRANT用户之前,请考虑您是否应该使用一些角色,然后GRANT用户权限来充当这些角色。如果您开始添加更多用户,则在开始时定义角色(组)将为您省去很多麻烦。

    【讨论】:

    • 非常感谢您的回答。如何检查表的架构名称是什么?我在 \dt 的帮助下检查表中包含的关系
    • @JannatArora 如果您不知道架构,那么它们位于默认架构 public 中。请参阅\dn 以列出架构。 \dt 将架构列为输出中的第一列。
    猜你喜欢
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多