关于表元数据的访问:
正如伊斯林格评论的那样,没有什么好方法可以向用户隐藏这些信息。
您必须拒绝用户访问pg_class
, pg_namespace
and pg_proc
和类似的表。这can如果你设置完成allow_system_table_mods
to on
,并且 PostgreSQL 将继续运行,但很多功能将不再起作用:
使用psql
实用命令如\d
or \dt
其他工具的类似工具
监控系统
本质上,你将看不到any元数据不再。
没有办法让用户只看到部分元数据,要么全部要么全无。
但这不是问题。没有充分的理由不让任何人知道元数据——那是公共信息。
PostgreSQL 不认为这是一个安全问题。只是因为我知道有一张桌子customer
有一个柱子credit_card_number
如果权限设置正确,不会让我更接近访问它。
关于访问到物体 in public
:
A REVOKE
删除从未授予过的特权将默默地什么也不做。
The USAGE
模式特权public
被授予PUBLIC
, not just_one_schema_user
.
使用它来显示权限psql
:
\dn+
您正在寻找:
REVOKE CREATE, USAGE ON SCHEMA public FROM public;
我建议不要将应用程序数据存储在public
,仅扩展。那就不要撤销USAGE
, only CREATE
.