授予对PostgreSQL中仅一个架构的访问权限

时间:2019-09-25 13:20:29

标签: sql database postgresql database-schema pgadmin

我有一个用户sns.pairplot(iris,hue="species",diag_kws=dict(color="b"))

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

如何使该用户仅看到sample

这就是我所做的:

sample

GRANT USAGE ON SCHEMA sample TO just_one_schema_user

但是用户仍然可以在REVOKE ALL PRIVILEGES ON SCHEMA public FROM just_one_schema_user中列出表并查看其结构。

1 个答案:

答案 0 :(得分:1)

关于对表元数据的访问:

正如伊斯林格(Islingre)所说,没有一种很好的方法可以向用户隐藏该信息。

您将不得不拒绝用户访问pg_classpg_namespacepg_proc及类似表。如果将allow_system_table_mods设置为on,可以完成 ,PostgreSQL将继续运行,但是很多事情将不再起作用:

  • 使用psql\d之类的\dt实用程序命令

  • 其他工具的类似工具

  • 监视系统

基本上,您将无法再看到任何元数据。

无法让用户只看到一些元数据,它是全部还是全部。

但这不是问题。没有充分的理由保留任何人的元数据-这是公共信息。

PostgreSQL不认为这是一个安全问题。仅仅因为我知道有一个表customer和一列credit_card_number,如果权限设置正确,我就无法更接近访问它。

关于public中对对象的访问

REVOKE删除了从未被授予的特权,将无声无息。

模式USAGE的{​​{1}}特权被授予public,而不是PUBLIC

使用它来显示just_one_schema_user中的权限:

psql

您正在寻找:

\dn+

我建议不将应用程序数据存储在REVOKE CREATE, USAGE ON SCHEMA public FROM public; 中,仅存储扩展名。然后不要撤消public,而只能撤消USAGE