返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

GBA-02IS-0002
错误码
错误标识
错误信息
GBA-02IS-0002

get column hash information error
错误出现原因
获取column hash 信息错误
分析与建议
无法根据计算的hash 值计算出数据应该放到哪个节点上,原因是nodedatamap
表查询有误。

说明
(...)
括号,使用它来规定一个表达式的运算顺序,放在括号里的操作符优先执行。
示例
示例1:不使用括号,表达式先执行乘法操作,再执行加法操作。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
646
gbase> SELECT 1+2*3 FROM dual;
+-------+
| 1+2*3 |
+-------+
|
7 |
+-------+
1 row in set
示例2:使用括号,表达式先执行括号中的加法操作,再执行括号外的乘法操作。
gbase> SELECT (1+2)*3 FROM dual;
+---------+
| (1+2)*3 |
+---------+
|
9 |
+---------+
1 row in set

使用 ALTER SECURITY LABEL COMPONENT 语句向当前数据库中的一个现有
的安全标签构件中添加一个或多个元件。该语句是 SQL ANSI/ISO 标准的扩展。
语法

元素
描述
限制
语法
component
element 要
添加的构件
必须在数据库中已存在
标识符
element
component
的新的元素
在必须 component 的元素中必须
唯一,且小于 32 字节。左括号
( ( )和右括号( ) )、逗号
引用字符串

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 108
元素
描述
限制
语法
(,)、和冒号(: )是无效的字

old_element component
的现有的元

必须是 component 的元素
引用字符串
用法
只有 DBSECADM 可以声明 ALTER SECURITY LABEL COMPONENT 语句,
此语句定义现有安全标签构件的新元件。新的元件称为定义在引用指定构件的
CREATE SECURITY POLICY 语句中的安全策略的一部分。
一个安全标签构件由不多于 64 个 elements 的集合组成,它们由 CREATE
SECURITY LABEL COMPONENT 语句定义为字符串常量。每个字符串常量不多
于 32 字节,而且必须在该构件的元件中是唯一的。每个元件的声明(是构件具
有的有效值)定义数据的敏感度的类别。通过向现有构件中添加新的元件,
ALTER SECURITY LABEL COMPONENT 语句扩展了构件在包含该成分的安全
策略内或在支持安全策略的安全标签内的可具有的值的设定。
当 ALTER SECURITY LABEL COMPONENT 语句运行成功后, GBase 8s 更新以下当
前数据库中系统目录的表:

sysseclabelcomponentelements 表,向该构件的新元件中添加新行,

sysseclabelcomponents 表,显示构成该修改的安全构件的安全元件的新
基数。
此语句可以定义一个安全标签构件的新元件,但是不能修改或伤处现有的元件。
如果安全设计变更,以致于需要不同的元件,那么 DBSECADM 可以添加新的元
件(如果元件的总数量保持在大小和基数的限制内,且不使用包含在该构件中的
定义的表中的任何过时的元件)。
或者, DBSECADM 可以使用 DROP SECURITY LABEL COMPONENT 元件删
除此构件,然后使用 CREATE SECURITY LABEL COMPONENT 元件重新定义
新的构件,新的构件只包含必须的元件。然而,如果此构件是现有安全策略的一

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 109
部分,则您不能删除此安全构件。有关删除安全标签构件和其它 GBase 8s 安全
对象的限制,请参阅 DROP SECURITY 语句 。
要添加新元件的安全标签构件必须是三种构件类型之一。跟随在 component 名称
之后的 ARRAY 、SET 或 TREE 关键字指定的构件类型必须与最初定义构件时
CREATE SECURITY LABEL COMPONENT 语句指定的构件类型相同。指定元件
的新列表依赖于该指定的构件是否为 ARRAY 、SET 或 TREE 类型,这三种类
型是 GBase 8s 支持的三种安全构件的类型。
ADD ARRAY 子句
ARRAY 类型的安全标签组件是超过 64 个元素的有序集合。声明数组元素的顺
序很重要,因为它定义了数据敏感性的降序,每个连续的元素在数据敏感性上都
低于前面的元素。数组的标签元素集及其逗号( , )分隔符必须放在一对括号
( [ ... ])内。相同的新元素不能在同一 ADD ARRAY 子句中声明多次。
在 ADD ARRAY 子句中,BEFORE 或 AFTER 关键字必须跟随在新元件(或以
逗号分隔的新元件的列表)之后按数据敏感度降序指定新元件的位置。在对元素
大小和数量的限制中,此语法使 DBSECADM 能够在数组中任何位置(包括最高
位置和最低位置)或在连续的现有元素之间插入新元素。然而,如果 ADD
ARRAY 子句的 BEFORE 或 AFTER 关键字指定了之前未定义的数组元素(无
论是在创建数组组件时,还是在先前的 ALTER SECURITY LABEL
COMPONENT 语句中),ALTER SECURITY LABEL COMPONENT 语句都会失
败并显示错误。
如果在同一个 ARRAY 类型的构件中执行了多个 ALTER SECURITY LABEL
COMPONENT 操作以添加新元件, 由于数组元件的编码方式,DBSECADM 可
能无法到达 64 组元件的最大值。有关安全元件是如何编码的信息,请参阅
GBase 8s 安全指南 。
以下示例定义了一个 ARRAY 类型的安全标签构件 aquilae ,它是五个元件的顺
序集, imperator 在数据敏感度中是最高的,最低的是 asinus 。随后的 ALTER
SECURITY LABEL COMPONENT 语句添加了两个新元件:

称为 legatus 的新元件排列在 imperator 和 tribunus 之间

称为 cunctator 的新元件排列在 asinus 之后,作为数据敏感度的新的最
低一级。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 110
CREATE SECURITY LABEL COMPONENT aquilae
ARRAY [ "imperator", "tribunus", "centurio", "miles", "asinus" ];

ALTER SECURITY LABEL COMPONENT aquilae
ADD ARRAY [ "legatus" BEFORE "tribunus","cunctator" AFTER
"asinus" ];
该 ALTER SECURITY LABEL COMPONENT ... ADD ARRAY 语句的成功运行修
改了 aquilae 安全标签构件组,因此构件元件新的降序顺序为:imperator 、
legatus 、tribunus 、centurio 、miles 、asinus 、cunctator。
ADD SET 子句
SET 类型的安全标签构件是不多于 64 个元件的无序集合。SET 构件中的元件的
声明的顺序是没有意义的。数组元件的集合以及它们的逗号分隔符必须用一对大
括号({ ... })括起。在同一 ADD SET 子句中,同一新 element 只能声明一
次。
以下示例定义了一个 SET 类型的安全标签组件 departments ,它是三个元件的
无序集合,这三个元件为 Marketing 、HR 和 Finance 。随后被 ALTER
SECURITY LABEL COMPONENT 语句以添加三个新元件 Training 、QA 和 Security
的方式修改:
CREATE SECURITY LABEL COMPONENT departments
SET { 'Marketing', 'HR', 'Finance' };

ALTER SECURITY LABEL COMPONENT departments
ADD SET { 'Training', 'QA', 'Security' };
不像 ADD ARRAY 或 ADD TREE 规范,因为 SET 类型的构件的元件没有隐式
的数据敏感度的顺序,所以 ALTER SECURITY LABEL COMPONENT 的 ADD
SET 操作在重定义的构件的新的和现有元件中的不创建“多于”或“少于”数据敏感
度关系。
ADD TREE 子句
TREE 类型的安全标签构件具有没有循环的简单图的逻辑拓扑。每个 TREE 构件
都有单独的根节点和不多于 63 个的附加节点。ALTER SECURITY LABEL
COMPONENT 语句添加到此等级的新元件必须在根节点之下插入。每个新节点的

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 111
字符串常量必须跟随在 UNDER 关键字和之前声明的字符串常量之后。TREE 构
件的元件集合。包括它们的 UNDER 关键字和逗号分隔符必须用一对括号
( ( ... ))括起。
在 UNDER 关键字之后指定的标签元素称为同一 UNDER 关键字(称为该父元
素的 child)之前的标签元素的 parent。新元件称为父元件的 child 。然而,如
果 ADD TREE 子句为该构件指定了在数据库中未定义的父元件,则 ALTER
SECURITY LABEL COMPONENT 产生错误并失败。UNDER 关键字不能跟随在
一个已添加到同一 ADD TREE 子句中的构件元件之后。
指定为 TREE 组件的根节点的字符串常量具有 TREE 分层结构内所有节点的最
高的数据敏感性。在 TREE 中连续的父节点和子节点的任何子集中,每个非根元
素具有比其父元素或其父元素的任何祖先低的数据敏感性,但是具有比它的任何
子元素或其子元素的后代高的数据敏感性。
当没有豁免的用户尝试访问由包括 TREE 组件的标签保护的数据时,如果此用户
的安全标签不包含符合数据行标签的同一组件的 TREE 组件中的一个元素,或者
不包含符合这些元素其中之一的祖先的元素,则读取操作失败。除非该标签的安
全策略包含 OVERRIDE 子句,否则在相同情景下写入操作也会失败。如果此数
据行标签有多个 TREE 构件,则用户安全标签必须包含与该成分的 TREE 构件
的元件值匹配(或祖)元件值。
在以下示例中,ALTER SECURITY LABEL COMPONENT 元件修改了一个 TREE 构件
Oakland ,修改方式为添加两个新节点到用它 CREATE SECURITY LABEL
COMPONENT 语句定义的六个节点的树结构中:
CREATE SECURITY LABEL COMPONENT Oakland
TREE ( 'Port' ROOT,
'Downtown' UNDER 'Port',
'Airport' UNDER 'Port',
'Estuary' UNDER 'Airport',
'Avenues' UNDER 'Downtown',
'Hills' UNDER 'Avenues');
ALTER SECURITY LABEL COMPONENT Oakland
ADD TREE ( 'Uptown' UNDER 'Port',
'Bay' UNDER 'Estuary');

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 112
这里新的 Uptown 节点是 Port 的子节点,Port 有最高的数据敏感度,因为它是
根节点。新的 Bay 节点是Estuary 的子节点,Estuary 是 Airport 的子节点,
Airport 是 Port 的子节点,由此表明 Bay 在此等级的三个节点中具有较低的数
据敏感度。实际上,它不像任何被标记为 Port 数据,而是归类到较低的级别。
Port 值可用作标签分配给允许存取所有关于此 Port 数据的用户。
如果此示例中的 ALTER SECURITY LABEL COMPONENT 语句成功,且随后定
义的数据行标签指定 Bay 作为 Oakland 构件的值,对安全策略不具有豁免权的
用户在尝试在一个查询中读取受保护的表时,它需要 Port 、Airport 、Estuary
或 Bay 其中之一作为安全, 没有此安全策略的豁免的用户尝试读取查询中受保护
的行时则需要将 Port 、Airport 、Estuary 或 Bay 作为用户标签值以满足此数
据行标签的组件。因为它们不符合 Bay 且不是 Bay 的祖,所以此用户标签中的
该构件的 Uptown 或 Downtown 值不满足。对于读取受保护的行的查询,该用
户的安全标签包含满足此行安全标签的任何其它构件的值,且该用户也持有对此
表的 Select 存取权限,以及至少对包含该保护的行的数据库的 Connect 存取权
限。
ADD TREE 子句无法在现有子节点和其父节点之间插入一个新的节点。