返回首页

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

更新日期:2024年09月11日

功能描述
设置控制连接各方面的属性。
原型
SQLRETURN SQLSetConnectAttr(SQLHDBC ConnectionHandle,
SQLINTEGER Attribute,
SQLPOINTER ValuePtr, SQLINTEGER StringLength);
参数
表8-30 SQLSetConnectAttr 参数
关键字
参数说明

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
267
EnvironmentHan dle
环境句柄。
Attribute
需设置的环境属性,可为如下值:

SQL_ATTR_ODBC_VERSION:指定ODBC 版本。

SQL_CONNECTION_POOLING:连接池属性。

SQL_OUTPUT_NTS:指明驱动器返回字符串的形式。
ValuePtr
指向对应Attribute 的值。依赖于Attribute 的值,ValuePtr 可能
是32 位整型值,或为以空结束的字符串。
StringLength
如果ValuePtr 指向字符串或二进制缓冲区,这个参数是
*ValuePtr 长度,如果ValuePtr 指向整型,忽略StringLength。
返回值

SQL_SUCCESS:表示调用正确。

SQL_SUCCESS_WITH_INFO:表示会有一些警告信息。

SQL_ERROR:表示比较严重的错误,如:内存分配失败、建立连接失败等。

SQL_INVALID_HANDLE:表示调用无效句柄。其他API 的返回值同理。
注意事项
当SQLSetEnvAttr 的返回值为SQL_ERROR 或SQL_SUCCESS_WITH_INFO 时,通过
借助SQL_HANDLE_ENV 的HandleType 和EnvironmentHandle 的Handle ,调用
SQLGetDiagRec 可得到相关的SQLSTATE 值,通过SQLSTATE 值可以查出调用此函数的具
体信息。
示例
参见8.2.23 示例。

Jiffies
Host CPU iowait time
:

使用 GRANT FRAGMENT 语句来对本地数据库中的表分片分配权限,如果该表
是通过表达式分片的话。
语法

元素
描述
限制
语法
fragment 分片的名称
必须存在;不可
用引号定界
标识符
grantor 可取消该权限的用户
同 user
所有者名称
owner
拥有 table 的用户
必须为 table 的
所有者
所有者名称
role
获得权限的角色
在 sysusers 中
必须存在
所有者名称

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 701
table
对其授予分片权限的分片表
必须存在且必须
通过表达式分片
标识符
user
要将权限授予其的那个用户
必须为有效的授
权标识符
所有者名称
用法
此语句是对 SQL 的 ANSI/ISO 标准的扩展。
使用 GRANT FRAGMENT 语句来将对表的个别分段的任何插入、更新和删除访
问权限授予用户(或角色)。GRANT FRAGMENT 语句仅对根据基于表达式的分
布方案分片的表是有效的。要了解对此类分片策略的说明,请参阅 表达式分布方
案。
分片级权限
跟在 FRAGMENT 关键字之后的一个关键字或多个关键字指定分片级权限,这些
权限是表级权限的一个逻辑子集:
分片级权限

这些关键字对应于下列分片级权限:
关键字 对被授予者的作用
ALL 获得对分片的插入、删除和更新权限
INSERT 可将行插入到分片内
DELETE 可从分片删除行
UPDATE 可更新在分片中的和在任何列中的行。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 702
分片级授权的定义
在符合 ANSI 的数据库中,所有者隐式地获得对一新创建的表的所有表级权限,
但其他用户得不到这些权限。
对一分片表有表权限的用户隐式地拥有对该表的所有分片的权限。这些权限不记
录在 sysfragauth 系统目录表中。
当在不符合 ANSI 的数据库中创建分片表时,表的所有者隐式地获得该表上所有
表级权限,且在缺省情况下其他用户(即 PUBLIC)获得所有分片级权限。在
systabauth 系统目录表中显式地记录授予 PUBLIC 的权限。
然而,如果您使用 REVOKE 语句来撤销现有的表级权限,则可使用 GRANT
FRAGMENT 语句来给用户、角色或 PUBLIC 恢复指定的对该分片的一些子集的
表级权限。
不论数据库是否符合 ANSI,您都可使用 GRANT FRAGMENT 语句来对通过表
达式分片的表的一个或多个分片授予显式 Insert、Update 和 Delete 权限。在
sysfragauth 系统目录表中显式地记录 GRANT FRAGMENT 语句授予的权限。
通过 GRANT FRAGMENT 语句对表分片授予的 Insert、Update 和 Delete 权限
统称为分片级权限或分片级授权。
分片级授权在语句验证中的作用
分片级权限使得用户能够对表分片执行 INSERT、DELETE 和 UPDATE 数据操
作语言(DML)语句,即使被授权者对整个表缺乏 Insert、Update 和 Delete 权
限。缺乏表权限的用户可在授权的分片中插入、删除和更新行,这是用于数据库
服务器验证 DMIL 语句的算法决定的。此算法由下列检查构成:
1. 当用户执行 INSERT、DELETE 或 UPDATE 语句时,数据库服务器首先
检查该用户对尝试的操作是否有必要的表权限。如果表权限存在,则继续
处理该语句。
2. 如果不存在表权限,则数据库服务器检查该表是否通过表达式分片。如果
该表未通过表达式分片,则数据库服务器返回错误给用户。此错误表示用
户没有权限执行该语句。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 703
3. 如果该表通过表达式分片,则数据库服务器检查该用户是否对尝试的操作
持有必要的分片权限。如果该用户持有要求的分片权限,则数据库服务器
继续处理该语句。如果不存在分片权限,则数据库返回错误给用户。此错
误表示用户没有执行该语句的权限。
分片级权限的持续时间
分片级权限的持续时间与分片策略的持续时间关联在一起成为一个整体。
如果您通过 DROP TABLE 语句或通过 ALTER FRAGMENT 语句的 INIT、
DROP 或 DETACH 子句删除分片策略,则还删除存在于受影响的分片的所有权
限。类似地,如果您删除表的分片,则还删除存在于该分片的任何权限。
作为 ALTER FRAGMENT 语句的 DETACH 或 INIT 子句的产物而创建的表,
当这些分片是分片表的一部分时,不保持以前的一个分片或多个分片拥有的权
限。相反,这些表采用缺省的表权限。
如果一个定义分片权限的表更改,更改为采用轮转法策略或其他表达式策略的
表,则还删除该分片权限,且该表采用缺省的表权限。
指定分片
您可以括在紧跟在 ON table 规范之后的括号内的名称(或名称列表)指定一个分
片或一逗号分隔的分片列表。您不可使用引号来定界分片名称。如果您未包括分
片,或如果指定的表的分片与您罗列的分片不相匹配,则数据库服务器发出错
误。
必须通过其名称引用每一 fragment。如果当您创建该分片时,未声明显式的标识
符,则它的名称缺省为它所在其中的 dbspace 的名称。
通过 onspaces 实用程序成功地重命名 dbspace 之后,仅新的名称是有效的。
GBase 8s 自动地更新系统目录中现有的分片策略来替换新的 dbspace 名称,但您
必须在 GRANT FRAGMENT 语句中指定新的名称来引用那个缺省名称为重命名
的 dbspace 的名称的分片。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 704
TO 子句
跟在 TO 关键字之后的一个或多个用户或角色的列表标识被授权者。您可指定
PUBLIC 关键字来将指定的分片级权限授予所有用户。
您不可使用 GRANT FRAGMENT 来给自己授予分片级权限,既不可直接授予也
不可通过角色授予。
如果您用引号括起 user 或 role,则该名称区分大小写,且安全按输入形式存
储。在符合 ANSI 的数据库中,如果您不使用引号括起 user 或 role,则该名称
以大写字母存储。
下列语句将对 part1 中的 customer 表的分片的 Insert、Update 和 Delete 权限
授予用户 larry:
GRANT FRAGMENT ALL ON customer (part1) TO larry;
下列语句将对 part1 和 part2 中 customer 表的分片的 Insert、Update 和
Delete 权限授予用户 millie:
GRANT FRAGMENT ALL ON customer (part1, part2) TO millie;
要将对表的所有分片的权限授予相同的一个或多个用户,您可使用 GRANT 语
句,而不使用 GRANT FRAGMENT 语句。您还可使用 GRANT FRAGMENT 语
句达到此目的。
假设 customer 表通过表达式分片为三个分片,且这些分片驻留在名为 part1、
part2 和 part3 的 dbspace 中。您可使用下列语句之一来将对该表的所有分片
的 Insert 权限授予用户 helen:
GRANT FRAGMENT INSERT ON customer (part1, part2, part3) TO helen;
GRANT INSERT ON customer TO helen;
向用户或用户列表授予权限
您可将分片级权限授予单个用户或多个用户的列表。
下列语句将对 part3 中的 customer 表的分片的 Insert、Update 和 Delete 权
限授予用户 oswald:
GRANT FRAGMENT ALL ON customer (part3) TO oswald;

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 705
下列语句将对 part3 中的 customer 表的分片的 Insert、Update 和 Delete 权限
授予用户 jerome 和 hilda:
GRANT FRAGMENT ALL ON customer (part3) TO jerome, hilda;
授予权限或权限列表
当您在 GRANT FRAGMENT 语句中指定分片级权限时,您可指定一种权限、多
种权限的列表或所有权限。
下列语句将对 part1 中的 customer 表的 Update 权限授予用户 ed:
GRANT FRAGMENT UPDATE ON customer (part1) TO ed;
下列语句将对 part1 中的 customer 表的 Update 和 Insert 权限授予用户
susan:
GRANT FRAGMENT UPDATE, INSERT ON customer (part1) TO susan;
下列语句将对 part1 中的 customer 表的 Insert、Update 和 Delete 权限授予用
户 harry:
GRANT FRAGMENT ALL ON customer (part1) TO harry;
WITH GRANT OPTION 子句
如同在其他 GRANT 语句中一样,WITH GRANT OPTION 关键字指定被授权者
可将相同的分片级权限授予其他用户。如果 TO 子句指定 role 作为被授权者,
则 WITH GRANT OPTION 是无效的。要获取附加的信息,请参阅 WITH
GRANT OPTION 关键字。
下列语句将对 part3 中的 customer 表的分片的 Update 权限授予用户
george,并赋予 george 将对同一分片的 Update 权限授予其他用户的权利:
GRANT FRAGMENT UPDATE ON customer (part3) TO george WITH GRANT
OPTION;
AS grantor 子句
GRANT FRAGMENT 语句的 AS grantor 子句可指定权限的授权者。仅当您有对
数据库的 DBA 权限,您才可使用此子句。当您包括 AS grantor 子句时,数据库
服务器罗列指定为 grantor 的用户或角色作为 sysfragauth 系统目录表的
grantor 列中的权限的授权者。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 706
在下一示例中,DBA 将对 part3 分片中的 customer 表的分片的 Delete 权限授
予用户 martha,并使用 AS grantor 子句来指定罗列在 sysfragauth 中的用户
jack 作为该权限的授权者:
GRANT FRAGMENT DELETE ON customer (part3) TO martha AS jack;
在前一示例中 AS grantor 子句的作用之一是,用户 jack 可执行 REVOKE
FRAGMENT 语句来取消 martha 持有的 Delete 分片级权限,如果此语句是在
part3 中对 customer 行 martha 的分片权限的唯一来源的话。
省略 AS grantor 子句
当 GRANT FRAGMENT 不包括 AS grantor 子句时,发出该语句的用户为指定
的分片权限的缺省的授权者。
在下一示例中,用户将对 part3 中的 customer 表的分片的 Update 权限授予用
户 fred。因为此语句未指定 AS grantor 子句,所以在缺省情况下,将发出该语
句的用户罗列在 sysfragauth 系统目录表中作为该权限的授权者。
GRANT FRAGMENT UPDATE ON customer (part3) TO fred;
如果您省略 GRANT FRAGMENT 的 AS grantor 子句,或如果您指定您自己的
登录名作为 grantor,则您可在以后使用 REVOKE FRAGMENT 语句来取消您授
予指定的用户的权限。例如,如果您将对 part3 中的 customer 表的分片的
Delete 权限授予用户 martha,但指定用户 jack 作为该权限的授权者,则用户
jack 可从用户 martha 取消那一权限,但您不可从用户 martha 取消那一权限。
DBA,或该分片的所有者,可使用 REVOKE FRAGMENT 语句的 AS 子句取消
对该分片的权限。