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

文章目录

文档用途

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

详细信息

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

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

相关推荐
qq_330037992 小时前
C#怎么解析XML文件 C#如何用XmlDocument和LINQ to XML读写XML数据【基础】
jvm·数据库·python
weixin_408717772 小时前
如何大幅提升 Google Sheets 数据库更新脚本的执行效率
jvm·数据库·python
qq7590353662 小时前
docker一键部署SQLynx,轻量级数据库管理平台
数据库·docker·容器
m0_515098422 小时前
如何实现SQL数据分片规则更新_利用触发器同步元数据
jvm·数据库·python
qq_330037992 小时前
uni-app怎么实现App端蓝牙搜索与连接 uni-app低功耗蓝牙开发【代码】
jvm·数据库·python
qq_654366982 小时前
SQL中如何通过JOIN实现级联删除_利用外键约束与JOIN辅助
jvm·数据库·python
2301_764150562 小时前
layui form禁用表单元素 layui如何disable一个输入框
jvm·数据库·python
赛恩斯2 小时前
adb 的源代码分析,以及如何改造为外网远程连接的方式
数据库·adb
weixin_458580122 小时前
CSS如何为Bootstrap模态框增加进入动画_利用transition实现
jvm·数据库·python