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

文章目录

文档用途

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

详细信息

当我们新创建一个用户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;

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

相关推荐
Wang's Blog18 分钟前
PostgreSQL笔记34:索引优化策略全景解析——从B-tree到HOT的核心原理与实践
数据库·笔记·postgresql
l12586542 分钟前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain
梦Arrebol44 分钟前
Mysql内容及相关实验
数据库·mysql
OceanWaves19931 小时前
mysql 8.0.32 磁盘爆满,清理从库日志
数据库·mysql
凤山老林1 小时前
数据库读写分离与动态路由实战:Spring Boot + ShardingSphere-JDBC 生产配置
数据库·spring boot·后端·分库分表·sharding-jdbc
l1258652 小时前
# RAG噪声知识库治理:一致性与可信度的四层防线设计
数据库·人工智能·python·自然语言处理·langchain
聚美智数4 小时前
图片水印-图片剪裁-图片缩放API接口介绍
java·服务器·数据库
JavaPub-rodert4 小时前
Go 后台如何同时兼容 MySQL、PostgreSQL、SQLite 和 SQL Server?从 ShiyuAdmin 看 GORM 多数据库适配
数据库·mysql·postgresql·golang·javapub·王仕宇
瀚高PG实验室4 小时前
SQL优化案例:存储过程、复杂SQL拆成简单SQL提升整体性能
数据库·sql·postgresql·瀚高数据库
Code额4 小时前
基于 SQLAlchemy 2.x,面向 MySQL 数据库的从入门到精通实战教程(2)
数据库·sql·mysql·adb·ai