Postgres用户可以看到所有模式/表

时间:2017-03-28 09:48:06

标签: postgresql

当我为没有任何权限的数据库创建新用户时,这个新用户仍然可以看到所有模式/表等。他无法访问它们,但他仍然可以看到它们。我想撤销这些特权,但不知道如何。

这就是我创建用户的方式:

CREATE USER wouter_test WITH PASSWORD 'wouter_test'
   NOSUPERUSER NOCREATEDB NOCREATEROLE NOCREATEUSER INHERIT;

基于这篇文章,我认为它可能与用户对公共架构的权利和公共架构包含的信息有关:https://dba.stackexchange.com/questions/98892/minimal-grants-for-readonly-single-table-access-on-postgresql

基于wikisite:https://wiki.postgresql.org/wiki/Shared_Database_Hosting 我用了这个命令

REVOKE ALL ON SCHEMA public FROM wouter_test;

它不起作用。以下似乎也不起作用(防止用户查看和访问名为klm的数据库)

REVOKE connect ON DATABASE klm FROM wouter_test;

但PGAdmin中的用户仍然可以看到所有数据库,模式和表格(包括klm)。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您可以REVOKE ... FROM PUBLIC禁止所有用户使用一个对象,但是您无法阻止用户以这种方式查看对象。

您可以尝试撤销系统目录表的权限,如下所示:

REVOKE SELECT ON pg_catalog.pg_class FROM PUBLIC;

会阻止人们查看数据库中的表格。

这应该保持数据库正常运行,但是它会导致期望能够从这些表中读取的psql等客户端程序中的错误。