将用户添加到已创建的数据库 - 授予完全读取权限

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 )

我希望johndoetempdb 以及其中的所有表具有完全读取权限。我该怎么办?提前致谢!

【问题讨论】:

【参考方案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 已经有了。

以上是关于将用户添加到已创建的数据库 - 授予完全读取权限的主要内容,如果未能解决你的问题,请参考以下文章

Oracle:如何授予角色读取和创建视图权限?

如何授予用户对 SQL Server 中数据库的读取权限?

如何将视图的所有权限授予任意用户

如何向属于某个组的用户授予完全 AWS 账户访问权限

SQL Server - 如何将所有数据库的读取权限授予登录名?

授予数据库的完整 SQL Server 权限