将用户添加到已创建的数据库 - 授予完全读取权限
Posted
技术标签:
【中文标题】将用户添加到已创建的数据库 - 授予完全读取权限【英文标题】:Adding a User to Already Created Database - Give Full Read Access 【发布时间】:2022-01-21 07:23:43 【问题描述】:我已经被这个问题困扰了一段时间,无法弄清楚。希望有人可以帮助我。
我认为我的情况很简单,所以我觉得不得不发布这个非常愚蠢尽管如此——我有一个数据库,我们称之为 tempdb
,它是由用户 ikaros
在 Postgres 13.3(Ubuntu 13.3 -1.pgdg16.04+1)
这是 \l+ 的输出,省略了不相关的信息。
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description
-----------------------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------
...
ikaros | ikaros | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 8029 kB | pg_default |
tempdb | ikaros | UTF8 | C | C | =T/ikaros +| 13 GB | pg_default |
| | | | | ikaros=CTc/ikaros +| | |
| | | | | johndoe=CTc/ikaros | | |
...
目前,johndoe
可以连接到数据库tempdb
,但是在执行查询时,会收到一条关于没有足够表级权限的消息。 Error: Unable to execute query: Fatal Error; Reason: Error: (ERROR: permission denied for table settings )
我希望johndoe
对tempdb
以及其中的所有表具有完全读取权限。我该怎么办?提前致谢!
【问题讨论】:
【参考方案1】:根据Postgres documents,您可以使用以下查询为用户添加权限:
-- This query used for access to the database
grant connect on database [YOUR_DATABASE] to [USERNAME];
-- This query used for access to the schema
grant usage on schema [SCHEMA1, SCHEMA2, ...] to [USERNAME];
-- This query is used for access to all tables of a schema (or can use just **select** instead of **all**
grant all on all tables in schema [SCHEMA1, SCHEMA2, ...] to [USERNAME];
grant select on all tables in schema [SCHEMA1, SCHEMA2, ...] to [USERNAME];
-- If need add select permission to a specific table
grant select on table [YOUR_SCHEMA].[YOUR_TABLE] to [USERNAME];
【讨论】:
只是对@Pooya 的回答稍加补充。由于用户ikaros
拥有数据库,因此该用户必须发出上述授权,或者超级用户(posgres?)可以发出它们。
他们都可以改变权限除了grant connect
权限,这个权限应该由超级用户改变
是的,但它必须是其中一个,或者另一个超级用户。也许我误读了这个问题,但似乎 OP 两者都不是。因此他们不能使用自己的user
i.d。同意连接,但似乎 OP 已经有了。以上是关于将用户添加到已创建的数据库 - 授予完全读取权限的主要内容,如果未能解决你的问题,请参考以下文章