如何在 GRANT 命令中指定数据库名称?

How to specify the database name in GRANT command?

虽然当前连接是 db1,但我想更改 db2 的权限。喜欢:

GRANT ALL PRIVILEGES ON SCHEMA "db2"."public" TO "user";

但这会导致错误,PostgreSQL 无法识别语句中的数据库限定符!有什么方法可以在不断开与 db1 的连接并重新连接到 db2 的情况下执行此操作?

顺便说一句,我是从一种编程语言而不是 psql 开始执行这些命令的。

[更新]

正如我在评论中得知的那样,此功能似乎是有意阻止的(由于实施挑战或安全原因 - 我不确定)。

无论如何,我看不到这样做的充分理由,这是我个人的看法。如果难以实现,那就是设计缺陷。而且我认为安全性论点很容易被划伤,因为为已经过身份验证和授权的用户在流程中添加步骤并不被认为是更好的安全性。

再一次,只是我的意见。

无论如何,我真的很感谢为 PostgreSQL 项目投入的所有时间和精力。谢谢大家。

首先,我不知道这是有意为之还是缺乏实施,但这是 PostgreSQL 中长期存在的行为。没有跨数据库引用。目前可能永远不会存在的原因有很多,尤其是在执行诸如使系统目录正常运行之类的事情时存在困难。基本上,数据库 A 不知道数据库 B.

中的结构

其次,跨库信息共享在PostgreSQL中也有点不一致。 pg_locks(出于某种奇怪的原因)显示所有数据库中的所有内容。所以我认为这可能是一个有机的发展,而不是人们坐下来就此制定政策。同样,您可能已经知道,角色和用户是集群全局的。所以我明白为什么这看起来有点不一致了。

在 PostgreSQL 中执行此操作的正确方法是连接到要在其中管理权限的数据库。目前 PostgreSQL 没有其他方法可以访问适当的目录条目并修改它们,并且可能会发生更改如此令人震惊,以至于在我看来这不太可能发生。