Krz*_*ski 5 sql database postgresql database-schema pgadmin
我有一个用户just_one_schema_user。
在我的数据库中,我有两个模式:public和sample
我怎样才能让这个用户只看到sample?
这就是我所做的:
GRANT USAGE ON SCHEMA sample TO just_one_schema_user
REVOKE ALL PRIVILEGES ON SCHEMA public FROM just_one_schema_user
但用户仍然可以列出其中的表public并查看它们的结构。
正如伊斯林格评论的那样,没有什么好方法可以向用户隐藏这些信息。
您必须拒绝用户访问pg_class、pg_namespace和pg_proc以及类似的表。如果您设置为,则可以完成此操作,并且 PostgreSQL 将继续运行,但很多功能将不再起作用:allow_system_table_modson
使用psql实用程序命令,例如\d或\dt
其他工具的类似工具
监控系统
本质上,您将无法再看到任何元数据。
没有办法让用户只看到部分元数据,要么全部要么全无。
但这不是问题。没有充分的理由不让任何人知道元数据——那是公共信息。
PostgreSQL 不认为这是一个安全问题。如果权限设置正确,仅仅因为我知道有一个customer带有列的表credit_card_number并不能让我更接近访问它。
public:REVOKE删除从未授予过的特权的A不会默默地执行任何操作。
USAGE架构上的权限被public授予PUBLIC,而不是just_one_schema_user。
使用它来显示以下权限psql:
\dn+
Run Code Online (Sandbox Code Playgroud)
您正在寻找:
REVOKE CREATE, USAGE ON SCHEMA public FROM public;
Run Code Online (Sandbox Code Playgroud)
我建议不存储应用程序数据public,仅存储扩展名。那么就不要撤销USAGE了CREATE。