GRANT
不同对象上的s是分开的。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
,每个用户/组都是该角色的成员。因此,每个人都已经在该架构上使用过。
词组:
(假设还满足对象自己的特权要求)
就是说,您必须拥有USAGE
一个架构才能使用其中的对象,但是拥有USAGE
一个架构本身不足以使用该架构中的对象,您还必须拥有这些对象本身的权限。
就像目录树一样。如果您在其中创建somedir
带有文件的目录,请somefile
对其进行设置,以便只有您自己的用户才能访问该目录或文件(rwx------
dir模式rw-------
,dir模式,文件模式),然后没有其他人可以列出目录以查看该文件是否存在。
如果您要授予文件的全球读取权限(模式rw-r--r--
),但不更改目录权限,则没有任何区别。没有人可以看到文件来读取它,因为他们没有列出目录的权限。
如果您改为rwx-r-xr-x
在目录上进行设置,进行设置,以便人们可以列出和遍历目录,但不更改文件权限,则人们可以列出文件,但无法读取它,因为他们无权访问该文件。
你需要设置 两个权限,以使人们能够实际查看文件。
在Pg中也是一样。您需要两个模式USAGE
权限和对象权限才能对对象执行操作,例如SELECT
从表中进行操作。
(类比下降了一点,因为PostgreSQL还没有行级安全性,因此用户仍然可以SELECT
通过pg_class
直接引用来“看到”该表存在于模式中。他们无法以任何方式与其进行交互,因此,只是“列表”部分并不完全相同。)
CREATE EXTENSION
。在您使用时,在Linux上创建的文件或多或少都存在相同的问题su
。如果sudo -e
pqsl中有某种for语句,那会很好。