普通用户可以访问系统目录

文章目录

文档用途

了解为什么普通用户可以访问系统目录

详细信息

当我们新创建一个用户A,用户A可以访问pg_database,pg_class等系统试图。在一些权限控制严格的场景中,你可能不禁会问为什么。为什么用户A在没有授权的情况下可以访问这些系统字典呢?

答案就在数据库的权限体系中。

  • 数据库中有一个特殊的名为PUBLIC的"角色"。普通用户会继承PUBLIC的权限。
  • 数据库默认将某些类型对象的权限授予PUBLIC。包括但不限于针对数据库的CONNECT和TEMPORARY(创建临时表)权限; 针对函数和程序的EXECUTE权限;以及针对语言和数据类型(包括域)的USAGE权限。
    下面我们看一下有关这些系统试图的授权情况。以pg_database为例
sql 复制代码
highgo=# select * from information_schema.table_privileges where table_name like 'pg_database';
 grantor | grantee | table_catalog | table_schema | table_name  | privilege_type | is_grantable | with_hierarchy 
---------+---------+---------------+--------------+-------------+----------------+--------------+----------------
 sysdba  | PUBLIC  | highgo        | pg_catalog   | pg_database | SELECT         | NO           | YES  <<<
 sysdba  | sysdba  | highgo        | pg_catalog   | pg_database | INSERT         | YES          | NO
 sysdba  | sysdba  | highgo        | pg_catalog   | pg_database | SELECT         | YES          | YES
 sysdba  | sysdba  | highgo        | pg_catalog   | pg_database | UPDATE         | YES          | NO
 sysdba  | sysdba  | highgo        | pg_catalog   | pg_database | DELETE         | YES          | NO
 sysdba  | sysdba  | highgo        | pg_catalog   | pg_database | TRUNCATE       | YES          | NO
 sysdba  | sysdba  | highgo        | pg_catalog   | pg_database | REFERENCES     | YES          | NO
 sysdba  | sysdba  | highgo        | pg_catalog   | pg_database | TRIGGER        | YES          | NO
(8 行记录)

public角色拥有这个系统试图的select权限。因此普通用户可以访问这个系统试图。

当然你也可以回收这些默认权限。回收权限时指定的角色PUBLIC而不是用户A,因为从以上的权限结果中可知,对pg_database有select权限的是PUBLIC而不是用户A。以下是回收权限的示例

sql 复制代码
revoke select on pg_database from public;

通常这些默认权限时有意义的。在使用数据库过程中,普通用户可能会用到这些权限。因此不建议"随意"回收这些权限。如过因安全需求不得不进行权限回收,那么要经过严格测试再进行操作。

相关推荐
程序员清风6 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
天衍四九-6 小时前
MySQL中如何定位慢查询?如果SQL语句执行很慢,如何分析和优化?
数据库·sql·mysql
尚久龙6 小时前
mysql-5.7.26-winx64的安装步骤
数据库·mysql
医疗信息化王工6 小时前
DataForge:基于 Python 的数据库批量导出 Excel 工具——从架构到部署的全流程实战
数据库·python·excel
实心儿儿6 小时前
MySQL 的安装
数据库·mysql·adb
程序员阿鹏8 小时前
为什么MySQL InnoDB选择B+树?
数据结构·数据库·b树·sql·mysql·算法·缓存
瀚高PG实验室9 小时前
使用pg_stat_statements抓取数据库TOP SQL
数据库·sql·postgresql·瀚高数据库
yanwumuxi11 小时前
【数据库系列】opensearch数据备份和恢复
数据库
anxiao_m11 小时前
2026企业AI数字孪生选型攻略,不同场景对应不同解决方案
大数据·网络·数据库
SelectDB11 小时前
从 ClickHouse 迁移到 Doris:SQL 兼容、同步与验证清单(实战笔记)
大数据·数据库·数据分析