返回首页

gbase数据、南大通用产品文档:GBase8sSET SESSION AUTHORIZATION 语句

更新日期:2024年09月11日

SET SESSION AUTHORIZATION 语句让您在当前的会话中执行的数据库操作之
下更改用户名称。
语法

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1073

元素
描述
限制
语法
auth_variable
对于在
user_identifier 或
user_ID_variable 中
指定的登录名称持有有
效的口令的主变量
变量必须为定长的
字符数据类型。它
的值与 password
有相同的限制。
对于变
量名称
必须符
合特定
于语言
的规
则。
password
指定用户的口令的用引
号括起来的字符串。
必须为那个用户的
口令,且不多于 32
字节
引用字
符串
user_identifier
用引号括起来的应用的
有效的登录名称。引号
定界符保持字母大小
写。
不超过 32 字节的
授权标识符
引用字
符串
user_ID_variable
持有用户标识符的值的
ESQL/C 主变量的名
称。
变量必须为定长字
符数据类型。它的
值与
user_identifier
有相同的限制。
必须符
合变量
名称的
特定于
语言的
规则。
用法
此语句允许您采用另一用户的身份,包括自主访问控制(DAC)和基于标签的访
问控制(LBAC)凭证。您还可在支持 GBase 8s 受信的上下文的 API 中使用此
语句,来切换在受信的连接上的用户 ID。
同时需要 DBA 和 SETSESSIONAUTH 访问权限来执行此语句。除非当您启动您
已持有对 PUBLIC(或对于您在 SET SESSION AUTHORIZATION 语句中指定其

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1074
名称的用户)的 SETSESSIONAUTH 权限的会话,且您还持有 DBA 权限时,此
语句失败并报错。
如果数据库服务器已经从不支持基于标签的访问控制的旧版本转换了,则在迁移
进程中,自动地授予持有 DBA 权限的用户对于 PUBLIC 的
SETSESSIONAUTH 访问权限。如果数据库服务器已经被初始化作为支持 LBAC
安全策略的版本,则持有 DBSECADM 角色的用户可将 SETSESSIONAUTH 权
限授予其他用户。由于每一用户的安全凭证决定在受保护的表中可访问那些数据
行,因此 DBSECADM 在授予 SETSESSIONAUTH 权限和指定它的作用域时应
小心行事。
新的身份在当前数据库中保持有效,直到您再次执行 SET SESSION
AUTHORIZATION 为止,或直到您关闭当前数据库为止。当您使用此语句时,指
定的 user 必须有对当前数据库的 Connect 权限。此外,DBA 不可将新的授权标
识符设置到 PUBLIC 组,也不可设置到当前数据库中现有的角色。
将会话设置到另一用户会导致在当前活动的数据库服务器中用户名称的更改。就
此数据库服务器进程而言,在指定的 user 通过一些管理实用程序访问数据库服务
器时,完全失去任何权限。此外,新的会话 user 不能以获得的身份开启器任何管
理操作(例如,执行实用程序)。
在 SET SESSION AUTHORIZATION 语句成功地执行之后,放弃通过先前的用户
启用的任何角色。如果您希望采用已被授予指定的 user 的角色,则您必须使用
SET ROLE 语句。数据库服务器不自动地启用 user 的缺省角色。
在 SET SESSION AUTHORIZATION 成功地执行之后,在数据库服务器在
RESTRICTED 模式下使用新的授权标识符时,放入任何 DBA 创建了的所有者权
限的 UDR,这可影响在远程数据库中对象之上 的 UDR 的操作期间的访问权
限。要获取更多关于 RESTRICTED 模式的信息,请参阅在 GBase 8s SQL 参考
指南 中的 sysprocedures 系统目录表。
当您通过执行 SET SESSION AUTHORIZATION 语句来采用另一用户的身份时,
您仅可在当前数据库中执行操作。您不可在当前数据库之外的数据库对象上执行
操作,诸如远程表。此外,您不可执行 DROP DATABASE 或 RENAME
DATABASE 语句,即使真实的用户或实际的用户拥有该数据库。

GBase 8s SQL 指南:语法
南大通用数据技术股份有限公司 1075
您可使用此语句或者来直接获取对数据的访问,或者来授予数据库操作处理所需
的数据库级权限或表级权限。下列示例展示如何使用 SET SESSION
AUTHORIZATION 语句来获取表级权限:
SET SESSION AUTHORIZATION TO 'cathl';
GRANT ALL ON customer TO 'mary';
SET SESSION AUTHORIZATION TO 'mary';
UPDATE customer SET fname = 'Carl' WHERE lname = 'Pauli';
如果您用引号括起 user,则该名称区分大小写,且完全按输入形式存储该名称。
在符合 ANSI 的数据库中,如果您不使用引号作为定界符,则以大写字母存储授
权标识符,除非设置 ANSIOWNER 环境变量来防止从小写字母转化为大写。
下列“开放数据库连接”(ODBC)API 示例在与授权要求的受信的连接上启用用
户 ID 切换:
SQLExecDirect(hstmt,"SET SESSION AUTHORIZATION TO 'zurbie' USING
'pass01'",SQL_NTS);
在上述函数调用中,

'zurbie' 为在此会话中的随后的操作指定授权标识符

pass01 必须为用户 zurbie 的当前口令。
注:
除了在非敌对的环境中,'pass01' 不是登录口令的推荐的示例,因为在某些语
言环境中,它容易被猜出。
SET SESSION AUTHORIZATION 和事务
如果您的数据库不符合 ANSI,则您必须在事务之外发出 SET SESSION
AUTHORIZATION 语句。如果您在事务之内发出该语句,则会收到错误消息。
在符合 ANSI 的数据库中,仅当尚未执行开启隐式的事务的语句(例如,
CREATE TABLE 或 SELECT)时,您可执行 SET SESSION AUTHORIZATION
语句。不开启隐式的事务的语句是那些不要求锁或日志数据的语句(例如,SET
EXPLAIN 和 SET ISOLATION)。在 DATABASE 语句或 COMMIT WORK 语
句之后,您可立即执行 SET SESSION AUTHORIZATION 语句。

使用 GBASEDBTCONCSMCFG 环境变量可以指定 concsm.cfg 文件的位置
(该文件描述通
信支持模块)。

pathname 指定 concsm.cfg 文件的全路径名。
以下命令指定 concsm.cfg 文件在 /usr/myfiles 中:
setenv GBASEDBTCONCSMCFG /usr/myfiles
还可对该文件指定不同名称。以下示例在同一目录中指定 csmconfig 的文件名。
setenv GBASEDBTCONCSMCFG /usr/myfiles/csmconfig
concsm.cfg 文件的缺省位置位于 $GBASEDBTDIR/etc 中。有关通信支持模块和
concsm.cfg 文件内容的更多信息,请参阅 GBase 8s 管理员参考。

当前新建的脚本文件“GBase
Script1.gbase”的内容在编辑后会在标题的
名字后面显示“*”
,此时可使用
“Ctrl
+
S”
保存定义,或者点击Visual
Studio
的“标准”工具条上的
按钮保存。