返回首页

gbase数据、南大通用产品文档:GBase8a导出非登录用户的表数据

更新日期:2024年09月11日


orato8a 导出数据时,将--user 参数指定的内容称为登录用户,导出数据时,以
该参数指定的用户名及其他相关连接参数登录oracle 数据库进行数据导出;

如果想要导出非登录用户创建的表的数据,
则还需要通过--owner_name 参数指
定创建表的用户的用户名;

假设我们要用expdata 用户导出ssbm 用户创建的表message,则首先我们需要
对expdata 用户授予对dba_extents 和dba_objects 表的SELECT 权限,orato8a 导出
数据的登录用户都必须有对这两个表的SELECT 权限,然后还需要对expdata 用户
授予对message 表的SELECT 权限。
步骤1
授权方法,首先以系统管理员身份创建一个普通用户expdata:
SQL> conn /as sysdba;
Connected.
SQL> create user expdata identified by hello;
User created.
SQL> alter user expdata account unlock;

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
556
User altered.
SQL> grant create session to expdata;
Grant succeeded.
步骤2
然后仍然使用系统管理员身份,对expdata 授予对dba_extents 和dba_objects 表的
select 权限:
SQL> grant select on dba_extents to expdata;
Grant succeeded.
SQL> grant select on dba_objects to expdata;
Grant succeeded.
步骤3
最后还要用ssbm 用户对expdata 用户授予对message 表的select 权限:
SQL> conn ssbm/ssbm;
Connected.
SQL> grant select on message to expdata;
步骤4
导出,方法为:
$ ./orato8a --user='expdata/hello@maya' --table_name='message' --file='./message.tbl'
--format=3 --field='@' --owner_name="ssbm"
export columns: 3
export rows: 10
export time: 0 sec
process ok!
$ cat message.tbl
1@Tom@I am Tom
2@小明@HHHH\"KKKK
3@Peter@Hello!Hello!
4@Yama@send mail
5@Hellen@\N
6@\N@\N
7@Seven@a book store

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
557
8@MMEE@yes
9@George@Thank you.
10@Lastman@no message

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 语句。

Distributed transactions (XA) are not supported by this database server.
当用户调用服务器不支持的 XAConnection.getConnection() 方法时,会发生此错误。