暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss访问控制列表

openGauss小助手 2021-10-22
439

访问控制列表是实现数据库对象权限管理的基础,每个对象都具有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;

其中ai_privs字段是AclMode类型。AclMode是一个32位的比特位。其高16位为权限选项位,当该比特位取值为1时,表示AclItem中的ai_grantee对应的用户具有此对象的相应操作的授权权限,否则表示用户没有授权权限;低16位为操作权限位,当该比特位取值为1时,表示AclItem中的ai_grantee对应的用户具有此对象的相应操作权限,否则表示用户没有相应的权限。在AclMode的结构位图9-18中,Grant Option记录各权限位的权限授予或被转授情况。低16位记录各权限的授予情况,当授权语句使用ALL时,则表示对象的所有权限。

图9-18 openGauss AclMode结构图

openGauss将执行DML类操作和DDL类操作的权限分别记在两个AclMode结构中,并以第15位的值来区分2者,从而实现对于每一个数据库对象,相同的授权者和被授权者对应两个不同的AclMode,分别表示记录DML类操作权限和DDL类操作权限。实现方式如图9-19和图9-20所示。

图9-19 openGauss记录DML类操作权限的AclMode结构

图9-20 openGauss记录DDL类操作权限的AclMode结构

每个权限参数代表的权限如表9-4所示。

表9-4 权限参数

参数对象权限参数对象权限
aINSERTTTEMPORARY
rSELECTcCONNECT
wUPDATEpCOMPUTE
dDELETERREAD
DTRUNCATEWWRITE
xREFERENCESAALTER
tTRIGGERPDROP
XEXECUTEmCOMMENT
UUSAGEiINDEX
CCREATEvVACUUM
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论