Sil*_*lez 8 postgresql authentication security authorization permissions
有没有办法防止登录列出架构中的表和列?
我必须授予对远程登录的访问权限才能在单个视图上进行查询;但是,我还必须确保此类登录不能列出该架构上的每个对象。
DENY VIEW ANY DEFINITION TO public;PostgreSQL 上有类似 MS SQL SERVER 的东西吗?
dez*_*zso 10
该文档救援:
UPDATE[...]
对于模式,允许访问包含在指定模式中的对象(假设还满足对象自己的权限要求)。本质上,这允许受让人在模式中“查找”对象。没有此权限,仍然可以查看对象名称,例如通过查询系统表。此外,在撤销此权限后,现有后端可能具有之前执行过此查找的语句,因此这不是防止对象访问的完全安全的方法。
这意味着,除非alice足够努力,否则以下内容将满足您的要求:
CREATE SCHEMA invisible; -- no privileges granted on this schema to alice or public
CREATE VIEW invisible.iamnothere AS SELECT 'something not very interesting'::text AS data;
GRANT SELECT ON TABLE invisible.iamnothere TO alice;
Run Code Online (Sandbox Code Playgroud)
现在alice将看到以下内容(使用psql,希望其他客户端也一样):
SELECT * FROM invisible.iamnothere;
data
????????????????????????????????
something not very interesting
\dt invisible.*
No matching relations found.
Run Code Online (Sandbox Code Playgroud)
...关于防止您的用户看到其他对象,它会稍微复杂一些。您必须处理有关系统表访问的文档中的通知。
首先,做
REVOKE ALL ON ALL TABLES IN SCHEMA pg_catalog FROM public, alice;
Run Code Online (Sandbox Code Playgroud)
正如它所暗示的那样,这对能够通过隐式成为其中成员public(所有角色都是后者的成员)来浏览模式的任何人来说都是破坏性的。要恢复他们的现状(但不是alice),您可以执行以下操作:
CREATE ROLE object_browser;
GRANT SELECT ON ALL TABLES IN SCHEMA pg_catalog TO object_browser;
GRANT object_browser TO bob;
Run Code Online (Sandbox Code Playgroud)
在此之后,bob将能够列出内容,而pooralice仅限于查询该单个视图。
| 归档时间: |
|
| 查看次数: |
6793 次 |
| 最近记录: |