返回首页

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

更新日期:2024年09月11日

gbase_stmt_param_count....................... 63

使用 SET ROLE 语句来启用用户定义的角色的权限。此语句是对 SQL 的
ANSI/ISO 标准的扩展。
语法

元素
描述
限制
语法
role
要启用的角
色的名称
必须在数据库中已存在,且必须已被授权
给用户,但不可为内建的角色。如果括在
引号之间,则 role 区分大小写。
所有者名
称;
用法
被授予角色的任何用户都可通过使用 SET ROLE 语句来启用该角色。您一次仅可
启用一个角色。如果您在已设置角色之后执行 SET ROLE 语句,则新的角色取代
旧的角色作为当前的角色。
如果用户当前不持有该角色,或如果该角色为内建的角色,则 SET ROLE 语句返
回错误。(由内建的角色持有的访问权限,诸如 EXTEND 角色或 DBSECADM
角色,总是生效,且如果用户持有那个角色,则不要求通过 SET ROLE 语句激
活。)

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1071
当 DBA 发出 GRANT DEFAULT ROLE 语句时,用户可被授予一个数据库实例
的缺省角色。如果对于当前数据库中的角色不存在缺省的角色,则缺省地分配角
色 NULL 或 NONE。在此上下文中,NULL 与 NONE 是同义词。角色 NULL
和 NONE 可没有权限。要将您的角色设置为 NULL 或 NONE,会禁用您的当前
角色。
当请您使用 SET ROLE 来启用角色时,您获得该角色的权限,除了 PUBLIC 以
及您自己的权限之外。如果将一角色授予已分配给您的另一角色,则您获得两个
角色的权限,除了 PUBLIC 的任何权限和您自己的权限之外。
在 SET ROLE 成功地执行之后,指定的角色保持有效,直到关闭当前数据库或用
户执行另一 SET ROLE 语句为止。然而,仅用户,不是角色,保持在会话期间创
建了的任何数据库对象的拥有权,比如表。
仅在当前数据库之内,角色才在作用域中。您不可使用您从角色获得的权限来访
问另一数据库中的数据。例如,如果您有来自名为 acctg 的数据库中的角色的权
限,且您在名为 acctg 和 inventory 的数据库之上执行分布式查询,则您的查询
不可访问 inventory 数据库中的数据,除非您还被授予了 inventory 数据库中的
适当的权限。作为安全预防措施,用户仅从角色持有的自主访问权限不可通过视
图或通过触发器的活动来提供对当前数据库外部的表的访问。
如果您的数据库支持显式的事务,您必须在事务的外部发出 SET ROLE 语句。如
果您的数据库符合 ANSI,则 SET ROLE 必须是新的事务的第一个语句。如果在
事务是活动的时候执行 SET ROLE 语句,则发生错误。要获取更多关于初始隐式
的事务的 SQL 语句的信息,请参阅 SET SESSION AUTHORIZATION 和事务。
如果执行 SET ROLE 语句作为触发器或 SPL 例程的一部分,且随同 WITH GRANT
OPTION 将该角色授予了触发器或 SPL 例程的所有者,则启用该角色,即使未授
予您该角色。例如,此代码片段设置角色,然后在查询之后放弃它:
EXEC SQL set role engineer;
EXEC SQL select fname, lname, project
INTO :efname, :elname, :eproject FROM projects
WHERE project_num > 100 AND lname = 'Larkin';
printf ("%s is working on %s\n", efname, eproject);
EXEC SQL set role NULL;

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1072
设置缺省的角色
DBA 或数据库的所有者可发出 GRANT DEFAULT ROLE 语句来对指定的用户列
表或对 PUBLIC 指定一现有的角色为缺省的角色。不像非缺省的角色那样,缺省
的角色不要求 SET ROLE 语句来启用它。当为用户分配缺省的角色时,将一对数
据库的隐式的连接授予该用户。
在下一示例中的三个语句中的每一个分别对角色执行下列操作之一:

声明名为 Engineer 的角色

将对 locomotives 表的 Select 权限分配给 Engineer 角色

定义 Engineer 作为用户 jgould 的缺省的角色。
EXEC SQL CREATE ROLE 'Engineer';
EXEC SQL GRANT SELECT ON locomotives TO 'Engineer';
EXEC SQL GRANT DEFAULT ROLE 'Engineer' TO jgould;
如果 jgould 随后使用 SET ROLE 语句来启用一些其他角色,则通过执行下列语
句,jgould 以 Engineer 替代那个角色作为缺省的角色:
SET ROLE DEFAULT;
如果您没有缺省的角色,则 SET ROLE DEFAULT 使得 NONE 成为您的缺省角
色,仅留下已经显式地授予了您的 username 或 PUBLIC 的那些权限。在
GRANT DEFAULT ROLE 将您的缺省角色更改为新的缺省角色之后,执行 SET
ROLE DEFAULT 恢复您最近被授予的缺省角色,即使当您连接到了数据库时此
角色不是您的缺省角色。
如果未授予 PUBLIC 一个缺省角色,但授予不同的角色作为一单个用户的缺省角
色,则单独授予的缺省角色优先,如果那个用户发出 SET ROLE DEFAULT 或连
接到数据库的话。

指示发生错误,会话不再有效。
特定于CDC_REC_ERROR 记录的报头在公共报头之后。标题后面没有数据;
公共报头中的有效负载大小为0。
表3-6.CDC_REC_ERROR 记录格式
区分
长度
描述

GBase 8s数据库安装手册
南大通用数据技术股份有限公司
26
Flags
4 bytes
Hexadecimal flag:
・0x1 indicates that the
capture session is no longer
valid and the only valid
operation is to run the
cdc_closesess() function to
close the session.
・any other value indicates
that the session is still
valid.
Error code
4 bytes
The error code.