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

文章目录

文档用途

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

详细信息

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

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

相关推荐
dblens 数据库管理和开发工具2 分钟前
DBLens + 企业微信智能机器人:把数据库 Agent 接入工作群
数据库·机器人·企业微信
步十人7 分钟前
epoll——I/O多路复用技术
linux·数据库·redis
暴力求解12 分钟前
MySQL操作库
数据库·mysql
Rick199313 分钟前
线上慢SQL排查完整实战案例
数据库·sql
努力努力再努力wz20 分钟前
【Qt入门系列】:QLabel控件详解:从文本显示到图片展示,再到内容布局与伙伴机制
android·开发语言·数据结构·数据库·c++·qt·mysql
Volunteer Technology21 分钟前
Flink编程模型与API(二)
大数据·数据库·flink
流星白龙28 分钟前
【MySQL高阶】9.在一台机器上运行多个MySQL实例
数据库·mysql·adb
Rick199328 分钟前
MySQL 优化器会选择【最小、最精准、最高效】的索引
数据库·mysql
mN9B2uk1732 分钟前
MySQL命令行导出数据库
c语言·数据库·mysql
铁皮哥43 分钟前
【后端开发】什么是守护线程,和普通线程有什么区别?
java·开发语言·数据库·人工智能·python·spring·intellij-idea