gpt4 book ai didi

database - GRANT USAGE ON SCHEMA 究竟做了什么?

转载 作者:太空狗 更新时间:2023-10-30 01:37:11 25 4
gpt4 key购买 nike

我第一次尝试创建 Postgres 数据库。

我为必须从我的 PHP 脚本访问数据库的 DB 角色分配了基本的只读权限,我有一个好奇心:如果我执行

GRANT some_or_all_privileges ON ALL TABLES IN SCHEMA schema TO role;

是否还需要执行此操作?

GRANT USAGE ON SCHEMA schema TO role;

来自documentation :

USAGE: For schemas, allows access to objects contained in thespecified schema (assuming that the objects' own privilegerequirements are also met). Essentially this allows the grantee to"look up" objects within the schema.

我认为,如果我可以选择或操作模式中包含的任何数据,我就可以访问模式本身的任何对象。我错了吗?如果不是,GRANT USAGE ON SCHEMA 的用途是什么?文档中“假设对象自身的特权要求也得到满足”的确切含义是什么?

最佳答案

GRANT 对不同对象的授权是分开的。 GRANT 对数据库的访问不会GRANT 对其中架构的权限。同样,GRANT模式不会授予对其中表的权限。

如果您有权从表中SELECT,但无权在包含它的模式中查看它,那么您将无法访问该表。

权限测试按顺序进行:

Do you have `USAGE` on the schema? 
No: Reject access.
Yes: Do you also have the appropriate rights on the table?
No: Reject access.
Yes: Check column privileges.

您可能会感到困惑,因为 public 模式默认 GRANT 角色 public 的所有权限,每个用户/group 是的成员。所以每个人都已经使用了该架构。

短语:

(assuming that the objects' own privilege requirements are also met)

是说您必须在架构上使用 USAGE 才能使用其中的对象,但是在架构上使用 USAGE 本身并不足以使用其中的对象架构,您还必须对对象本身拥有权限。

它就像一个目录树。如果您创建目录 somedir 并在其中包含文件 somefile 然后设置它以便只有您自己的用户可以访问该目录或文件(模式 rwx--- --- 在目录上,模式 rw-------- 在文件上)然后没有其他人可以列出目录以查看文件是否存在。

如果您要授予对文件的世界读取权限(模式 rw-r--r--)但不更改目录权限,则没有任何区别。没有人可以看到文件以便阅读它,因为他们无权列出目录。

如果您改为在目录上设置 rwx-r-xr-x,将其设置为人们可以列出和遍历目录但不更改文件权限,人们可以列出 文件但无法读取 因为他们无权访问该文件。

您需要为人们设置两种权限才能真正查看该文件。

Pg 中也是一样。您需要模式 USAGE 权限和对象权限才能对对象执行操作,例如从表中选择 SELECT

(这个类比有点落伍了,因为 PostgreSQL 还没有行级安全性,所以用户仍然可以通过 SELECTing 从 pg_class 直接。但是,他们不能以任何方式与之交互,所以它只是“列表”部分不完全相同。)

关于database - GRANT USAGE ON SCHEMA 究竟做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17338621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com