openGauss数据库源码解析系列文章——安全管理源码解析(四)

四、对象权限管理

权限管理是安全管理重要的一环,openGauss权限管理基于访问控制列表(access control list,ACL)实现。

4.1 权限管理

1. 访问控制列表

访问控制列表是实现数据库对象权限管理的基础,每个对象都具有ACL,存储该对象的所有授权信息。当用户访问对象时,只有用户在对象的ACL中并且具有所需的权限才能够访问该对象。

每个ACL是由1个或多个AclItem构成的链表,每1个AclItem由授权者、被授权者和权限位3部分构成,记录着可在对象上进行操作的用户及其权限。

数据结构AclItem的代码如下:

typedef struct AclItem { Oid ai_grantee; /* 被授权者的OID */ Oid ai_grantor; /* 授权者的OID */ AclMode ai_privs; /* 权限位:32位的比特位 */ } AclItem;