Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只授予对postgreSQL中一个架构的访问权限_Sql_Database_Postgresql_Database Schema_Pgadmin - Fatal编程技术网

只授予对postgreSQL中一个架构的访问权限

只授予对postgreSQL中一个架构的访问权限,sql,database,postgresql,database-schema,pgadmin,Sql,Database,Postgresql,Database Schema,Pgadmin,我有一个用户只有一个用户\u schema\u user 在我的数据库中有两个模式:public和sample 如何让此用户只看到示例 这就是我所做的: 仅向一个模式用户授予模式示例的使用权 仅从一个SCHEMA用户撤销对SCHEMA public的所有权限 但是用户仍然可以在public中列出表并查看其结构。关于访问表元数据: 正如Islingre评论的那样,没有什么好方法可以向用户隐藏这些信息 您必须拒绝用户访问pg_类、pg_命名空间和pg_proc以及类似的表。如果您将allow\u s

我有一个用户
只有一个用户\u schema\u user

在我的数据库中有两个模式:
public
sample

如何让此用户只看到
示例

这就是我所做的:

仅向一个模式用户授予模式示例的使用权

仅从一个SCHEMA用户撤销对SCHEMA public的所有权限

但是用户仍然可以在
public
中列出表并查看其结构。

关于访问表元数据: 正如Islingre评论的那样,没有什么好方法可以向用户隐藏这些信息

您必须拒绝用户访问
pg_类
pg_命名空间
pg_proc
以及类似的表。如果您将
allow\u system\u table\u mods
设置为
on
,PostgreSQL将继续运行,但许多功能将不再工作,则可以执行此操作:

  • 使用
    psql
    实用程序命令,如
    \d
    \dt

  • 其他工具的类似工具

  • 监测系统

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

没有办法让用户只看到部分元数据,要么全部看到,要么什么也看不到

但这不是问题。没有理由对任何人隐瞒元数据——这就是公共信息

PostgreSQL不考虑安全问题。仅仅因为我知道有一个表

customer
有一列
credit\u card\u number
,如果权限设置正确,我就无法更接近于访问它

关于访问
public
中的对象: 一个
REVOKE
删除了一个从未被授予的特权,它将不起任何作用

模式
public
上的
USAGE
权限被授予
public
,而不是
仅一个模式用户

使用此选项可显示
psql
中的权限:

\dn+
您正在寻找:

REVOKE CREATE, USAGE ON SCHEMA public FROM public;

我建议不要在
public
中存储应用程序数据,只存储扩展。然后不要撤销
用法
,只
创建

我想这是不可能的。所有结构信息都存储在架构
pg_目录
中,您不能撤消此架构上的权限,因为用户将失去从任何架构中查找任何对象的能力。@Islingre您关于
pg_目录
的说法是正确的。然而,问题是关于
public
@LaurenzAlbe是的。但只要我有权访问pg_目录,我就应该能够看到模式,不是吗?我不确定,但是如果取消某些其他模式的特权会影响对目录的查询,我会感到惊讶。哦,你是对的,对不起。