返回首页

gbase数据、南大通用产品文档:GBase8s验证HAC

更新日期:2024年09月11日

HAC集群安装成功后,客户端可以通过JDBC访问服务端。例如使用GBaseDataStudio连
接到PRIMARY:192.168.5.100节点、HAC:192.168.5.110节点、HAC1:192.168.5.111节点、
HAC2:192.168.5.112节点。对PRIMARY节点执行insert、update、delete操作,主节点对数
据的修改可以同步到HAC节点、HAC1节点、HAC2节点。默认情况下HAC节点、HAC1节点、
HAC2节点不支持写操作,如需支持,可通过onconfig文件的UPDATABLE_SECONDARY参数进
行配置。
4 连接管理器
连接管理器是一种守护程序实用程序,它可以在高可用性集群中监视所有节点的工作
负载和状态。此实用程序可将客户机应用程序连接请求引导到集群中的相应服务器,并可
在主节点发生故障时自动执行服务器故障转移。

ifx_cl_card() 函数返回指定的集合类型主变量的基数。
语法
mint ifx_cl_card(collp, isnull)
ifx_collection_t *collp;
mint *isnull;
collp
指向应用程序中 collection 主变量的名称的指针。
isnull
如果该集合为空,则设置为 1,否则,设置为 0

用法
ifx_cl_card() 函数使得您能够确定集合中元素的数目、是否为空集合,以及集合是否
为空值。

返回代码
0
空集合。
>0
集合中元素的数目。
<0
发生错误。

示例

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 699 -
此样例程序在 demo 目录中的 ifx_cl_card.ec 文件中。
/*
* Check the cardinality of the collection variable when
* the data is returned from the server
*/

main()
{
exec sql begin declare section;
client collection myset;
exec sql end declare section;
mint numelems = 0;
mint isnull = 0;

exec sql allocate collection ::myset;
exec sql create database newdb;
exec sql create table tab (col set(int not null));
exec sql insert into tab values ("set{}");
exec sql select * into :myset from tab;
if ((ifx_cl_card(myset, &isnull) == 0) && isnull == 0)
printf("collection is empty\n");
else if ((ifx_cl_card(myset, &isnull) == 0) && isnull == 1)
printf("collection is null\n");
else if ((numelems = ifx_cl_card(myset, &isnull))> 0)
printf("number of elements is %d\n", numelems);
else
printf("error occurred\n");

exec sql update tab set col = ’set{1,2,3}’;
exec sql select * into :myset from tab;
if ((ifx_cl_card(myset, &isnull) == 0) && isnull == 0)
printf("collection is empty\n");


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 700 -
else if ((ifx_cl_card(myset, &isnull) == 0) && isnull == 1)
printf("collection is null\n");
else if ((numelems = ifx_cl_card(myset, &isnull))> 0)
printf("number of elements is %d\n", numelems);
else
printf("error occurred\n");

exec sql update tab set col = NULL;
exec sql select * into :myset from tab;
if ((ifx_cl_card(myset, &isnull) == 0) && isnull == 0)
printf("collection is empty\n");
else if ((ifx_cl_card(myset, &isnull) == 0) && isnull == 1)
printf("collection is null\n");
else if ((numelems = ifx_cl_card(myset, &isnull))> 0)
printf("number of elements is %d\n", numelems);
else
printf("error occurred\n");
}
输出
collection is empty
number of elements is 3
collection is null

从前面的介绍可以看出,默认情况下拥有SYSADMIN 属性的系统管理员,具备系统最高权
限。
在实际业务管理中,
为了避免系统管理员拥有过度集中的权利带来高风险,
可以设置三
权分立。将系统管理员的部分权限分立给安全管理员和审计管理员,
形成系统管理员、
安全
管理员和审计管理员三权分立。
三权分立后,系统管理员将不再具有CREATEROLE 属性(安全管理员)和
AUDITADMIN 属性(审计管理员)能力。即不再拥有创建角色和用户的权限,并不再拥有
查看和维护数据库审计日志的权限。关于CREATEROLE 属性和AUDITADMIN 属性的更
多信息请参考《GBase 8c V5_3.0.0_SQL 手册》CREATE ROLE。
三权分立后,系统管理员只会对自己作为所有者的对象有权限。
初始用户的权限不受三权分立设置影响。
因此建议仅将此初始用户作为DBA 管理用途,
而非业务应用。
三权分立的设置办法为:将参数enableSeparationOfDuty 设置为on。
三权分立前的权限详情及三权分立后的权限变化,请分别参见表7-9 和表7-10。
表7-9 默认的用户权限
对象名称
初始用户
(id 为10)
系统管理员
安全管理

审计管理

普通用户
表空间
具有除私有用
户表对象访问
权限外,所有
的权限。
对表空间有创建、
修改、
删除、访问、分配操作
的权限。
不具有对表空间进行创建、修改、
删除、
分配的权限,
访问需要被赋
权。

对所有表有所有的权
限。
仅对自己的表有所有的权限,
对其
他用户的表无权限。
索引
可以在所有的表上建立
索引。
仅可以在自己的表上建立索引。
模式
对除dbe_perf 以外的所
有模式有所有的权限。
仅对自己的模式有所有的权限,

其他用户的模式无权限。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
163
函数
对除dbe_perf 模式下的
函数以外的所有的函数
有所有的权限。
仅对自己的函数有所有的权限,

其他用户放在public 这个公共模
式下的函数有调用的权限,
对其他
用户放在其他模式下的函数无权
限。
自定义视图
对除dbe_perf 模式下的
视图以外的所有的视图
有所有的权限。
仅对自己的视图有所有的权限,

其他用户的视图无权限。
系统表和系
统视图
可以查看所有系统表和
视图。
只可以查看部分系统表和视图。

细请参见20 系统表和系统视图。
表7-10 三权分立较非三权分立权限变化说明
对象名称
初始用户
(id 为10)
系统管理员
安全管理

审计管理

普通用户
表空间
无变化。
依然具有除私
有用户表对象
访问权限外,

有的权限。
无变化。
无变化。

对所有表有所有的权
限。
仅对自己的表有所有的权限,对
其他用户的表无权限。
索引
权限缩小。
只可以在自己的表及其
他用户放在public 模式
下的表上建立索引。
无变化。
模式
权限缩小。
只对自己的模式有所有
的权限,对其他用户的
模式无权限。
无变化。
函数
权限缩小。
只对自己的函数及其他
用户放在public 模式下
的函数有所有的权限,
对其他用户放在属于各
自模式下的函数无权
限。
无变化。

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
164
自定义视图
权限缩小。
只对自己的视图及其他
用户放在public 模式下
的视图有所有的权限,
对其他用户放在属于各
自模式下的视图无权
限。
无变化。
系统表和系
统视图
无变化。
无变化。