仅授予对 postgreSQL 中一个模式的访问权限

Krz*_*ski 5 sql database postgresql database-schema pgadmin

我有一个用户just_one_schema_user

在我的数据库中,我有两个模式:publicsample

我怎样才能让这个用户只看到sample

这就是我所做的:

GRANT USAGE ON SCHEMA sample TO just_one_schema_user

REVOKE ALL PRIVILEGES ON SCHEMA public FROM just_one_schema_user

但用户仍然可以列出其中的表public并查看它们的结构。

Lau*_*lbe 2

关于表元数据的访问:

正如伊斯林格评论的那样,没有什么好方法可以向用户隐藏这些信息。

您必须拒绝用户访问pg_classpg_namespacepg_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,仅存储扩展名。那么就不要撤销USAGECREATE