普通用户可以访问系统目录
文章目录文档用途详细信息文档用途了解为什么普通用户可以访问系统目录详细信息当我们新创建一个用户A用户A可以访问pg_databasepg_class等系统试图。在一些权限控制严格的场景中你可能不禁会问为什么。为什么用户A在没有授权的情况下可以访问这些系统字典呢答案就在数据库的权限体系中。数据库中有一个特殊的名为PUBLIC的“角色”。普通用户会继承PUBLIC的权限。数据库默认将某些类型对象的权限授予PUBLIC。包括但不限于针对数据库的CONNECT和TEMPORARY创建临时表权限; 针对函数和程序的EXECUTE权限;以及针对语言和数据类型包括域的USAGE权限。下面我们看一下有关这些系统试图的授权情况。以pg_database为例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|YESsysdba|sysdba|highgo|pg_catalog|pg_database|INSERT|YES|NOsysdba|sysdba|highgo|pg_catalog|pg_database|SELECT|YES|YES sysdba|sysdba|highgo|pg_catalog|pg_database|UPDATE|YES|NOsysdba|sysdba|highgo|pg_catalog|pg_database|DELETE|YES|NOsysdba|sysdba|highgo|pg_catalog|pg_database|TRUNCATE|YES|NOsysdba|sysdba|highgo|pg_catalog|pg_database|REFERENCES|YES|NOsysdba|sysdba|highgo|pg_catalog|pg_database|TRIGGER|YES|NO(8行记录)public角色拥有这个系统试图的select权限。因此普通用户可以访问这个系统试图。当然你也可以回收这些默认权限。回收权限时指定的角色PUBLIC而不是用户A因为从以上的权限结果中可知对pg_database有select权限的是PUBLIC而不是用户A。以下是回收权限的示例revokeselectonpg_databasefrompublic;通常这些默认权限时有意义的。在使用数据库过程中普通用户可能会用到这些权限。因此不建议“随意”回收这些权限。如过因安全需求不得不进行权限回收那么要经过严格测试再进行操作。