返回首页

gbase数据、南大通用产品文档:GBase8s控制数据库使用

更新日期:2024年09月11日

GBase 8s 数据库软件提供控制数据库使用的方法。当您设计数据库时,可以执行以下任何
功能:

使数据库完全专用

对所有用户或选择的用户开放其全部内容

限制某些用户可以查看的数据选择(不同的数据选择适用于不同的用户组)

允许指定的用户查看特定项,但不能修改它们

允许指定的用户添加新数据,但不能修改旧数据

允许指定的用户更修改全部现有数据或现有数据的指定项

确保添加或修改的数据符合数据模型

访问管理策略
GBase 8s 支持两种访问管理系统:
基于标签的访问控制(LBAC)
基于标签的访问控制是强制访问控制的实现。它通常在存储高度敏感数据的存储库中,
如由军队或保安服务公司保卫的系统。与 LBAC 相关的 GBase 8s 的主要文档是
GBase 8s 安全指南 。GBase 8s SQL 指南:语法 描述了数据库管理员(DBSA)如何
创建和维护 LBAC 安全对象,此类管理员必须被授授予(DBSECADM)角色,并且
该角色只能由数据库系统管理员(DBSA)授予。
自主访问控制(DAC)
自主访问控制是更为简单的系统,涉及的开销少于 LABC 。根据访问特权和角色,
DAC 在所有的 GBase 8s 数据库中都启用,包括实现 LBAC 的数据库。
创建和授予角色
为了支持 DAC,数据库管理员(DBA)可以定义角色并将角色指定给用户。从而对需要访
问相同数据库对象的用户组的访问特权进行标准化。当 DBA 将特权指定给角色时,一旦
激活该角色,被授予该角色的每个用户都具有这些特权。为了激活特定角色,用户必须发
出 SET ROLE 语句。用于定义和操纵角色的 SQL 语句包括:CREATE ROLE 、DROP
ROLE 、GRANT 、REVOKE 和 SET ROLE。
有关定义和操作角色的 SQL 语法语句,请参阅《GBase 8s SQL 指南:语法》。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 7 -
创建和授予角色:
1. 使用 CREATE ROLE 语句在当前数据库中创建新的角色。
2. 使用 GRANT 语句将访问特权授予该角色。
3. 使用 GRANT 语句将角色授予用户或 PUBLIC (所有用户)。
4. 用户必须发出 SET ROLE 语句来启用该角色。
为缺省角色定义和授予特权
DBA 还可以定义一个缺省角色以将该角色分配给特定数据库的单个用户或 PUBLIC 组。
当用户与该数据库建立连接后,不需要用户发出 SET ROLE 语句,该角色将自动激活。在
连接时,拥有缺省角色的每个用户都具有单独为该用户授予的访问特权以及缺省角色的特
权。
对于给定用户,
在给定时间内只有一个 CREATE ROLE 语句定义的角色可以生效。
如果同
时拥有缺省角色和一个或多个其它角色的用户使用 SET ROLE 语句使非缺省角色成为活
动角色,那么仅授予缺省角色(不单独对用户,对 PUBLIC 或对新活动角色授予)的任何
访问特权该用户将不再有效。同一用户可以发出 SET ROLE DEFAULT语句重新激活缺省
角色,但该操作会禁用用户仅通过先前启用的非缺省角色而拥有的任何特权。
如果为用户和 PUBLIC 指定了不同的缺省角色,那么用户的缺省角色优先。
为缺省角色定义和授予特权:
1. 使用 CREATE ROLE 语句在当前数据库中创建一个新角色。
2. 使用 GRANT 语句将特权授予该角色。
3. 使用以下语法将角色授予一个用户,
并将该角色设置为缺省用户或 PUBLIC 角色:


GRANT DEFAULT ROLE rolename TO username;

GRANT DEFAULT ROLE rolename TO PUBLIC;
4. 使用 REVOKE DEFAULT ROLE 语句取消缺省角色到用户的关联。
限制: 只有 DBA 或数据库所有者才能移除该缺省角色。
5. 使用 SET ROLE DEFAULT 语句将当前角色复位为缺省角色。
内置角色
出于安全原因,GBase 8s 支持内置角色,这些角色对于被授予该角色且连接到数据库的任
何用户都生效,而与任何其他角色是否也处于活动状态无关。
例如,
在 IFX_EXTEND_ROLE 配置参数设置为 ON 的数据库中,
只有数据库服务器管理
员(DBSA)或 DBSA 已授予内置 EXTEND 角色的用户才可以创建或删除使用
EXTERNAL 关键字定义的 UDR 。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 8 -
同样,在实现 LBAC 安全策略的数据库中,DBSA 可以授予内置 DBSECADM 角色。该
角色的被授予者成为数据库安全管理员,
可以定义并实现 LBAC 安全策略并可以为数据和
用户指定安全标签。
与用户定义的角色不同,
内置角色无法被 DROP ROLE 语句删除。
SET ROLE 语句对内置
角色无效,因为在用户连接到它们已被授予内置角色的数据库期间,该角色始终处于活动
状态。
有关定义和操纵角色的外部例程引用段或 SQL 语句的更多信息,请参阅《GBase 8s SQL
指南:语法》。
有关定义和操纵 LBAC 安全对象的 DBSECADM 角色或 SQL 语句的更多信息,请参阅
《GBase 8s 安全指南》。
有关缺省角色的更多信息,请参阅《GBase 8s 管理员指南》。
有关如何授予和限制对数据库访问的更多信息,请参阅《GBase 8s 数据库设计和实现指
南》。

语法
IFNULL(expr1,expr2)
函数说明
如果expr1 不为NULL,则IFNULL()的返回值为expr1,否则其返回值为expr2。
IFNULL()的返回值是数字或是字符串,具体情况取决于使用它的上下文环境。等
价于IF(expre1,expre1,expre2)。
示例
示例1:expr1 不为NULL,返回值为expr1。
gbase> SELECT IFNULL(1,0) FROM dual;
+-------------+
| IFNULL(1,0) |
+-------------+
|
1 |
+-------------+
1 row in set
示例2:expr1 为NULL,返回值为expr2。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
681
gbase> SELECT IFNULL(NULL,10) FROM dual;
+-----------------+
| IFNULL(NULL,10) |
+-----------------+
|
10 |
+-----------------+
1 row in set

当您的 GBase 8s ESQL/C 程序执行 SQL 语句之后,
数据库服务器返回有关此语句的
成功信息。本节总结了以下信息:
对 GBase 8s ESQL/C 程序可用的诊断信息的类型
GBase 8s ESQL/C 程序可以用于获取诊断信息的两种方法
诊断信息的种类
数据库服务器可以返回以下类型的诊断信息:
数据库异常是数据库服务器返回以描述 SQL 语句执行成功的统计。
描述性信息,例如 DESCRIBE 和 GET DIAGNOSTICS 语句可以提供某些 SQL 语
句。
数据库异常的类型
当数据库服务器执行 SQL 语句时,它对应用程序返回以下四种数据库异常:
成功
SQL 语句执行成功。
当语句可能将数据返回到主机变量的语句执行时,
成功条件意味
着语句已返回数据,并且程序可以通过主机变量访问它。
成功,但是警告生成
警告是一个不能阻止成功执行的 SQL 语句的统计。然而,声明的效果是有限的,声
明可能不会产生预期的结果。警告也可以提供有关已执行语句的其它信息。
成功,但是未找到行
SQL 语句执行时没有错误,但有以下例外:
没有行符合搜索条件(NOT FOUND 条件)。
该语句没有对一行进行操作( END OF DATA 条件)。
错误
SQL 语句执行失败,并且不会更改数据库。运行时错误可能发生在以下级别:
硬件错误,包括控制失败、磁盘坏扇区等。
内核错误,包括文件表溢出、不足的信号量等。
访问方法错误,包括重复的索引键、 插入非空列的 SQL 空等等。
解析程序错误,包括语法、未知对象、无效语句等等。
应用程序错误,包括用户或锁定表溢出等等。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 283 -
描述性信息
以下 SQL 语句可以返回有关 SQL 语句的信息:
DESCRIBE 语句返回已准备的 SQL 语句的信息。此消息在您执行动态 SQL 时有用。

GET DIAGNOSTICS 语句,
当在建立连接到数据库环境后调用此语句时,
可以返回数
据库服务器和连接的名称。
状态变量的类型
以下方法获取有关 SQL 语句结果的诊断信息:
访问 SQLSTATE 变量,一个包含符合 ANSI 和 X/Open 标准的状态值的五个字符
的字符串
访问 SQLCODE 变量,该变量包含特定于 GBase 8s 的状态值的 int4 整数
当创建必须符合 ANSI 或 X/Open 标准的应用程序时,请使用 SQLSTATE 变量
作为主异常处理方法。