UDBTO 插件使用

快速开始

udbto 插件是在 unvdb 数据库端,通过 SQL 语句控制 udbto 的接口。

../_images/2023-06-30_150403_7736370.13632710466680142.png

安装部署

a.连接上 unvdb 数据库,创建插件接口 create extension udbto; b.创建插件成功后,将建立一个新的数据类型 udbto_type, 可将此类型作为文件对象存储路径的保存类型,可在 UDBStudio 界面查看对应类型的文件。 c.创建插件成功后,还将创建多个函数接口,通过 AWS S3 的协议操作 udbto 文件系统。

元数据查看

查看配置信息,s3 服务器地址,访问秘钥等

select * from udbto_ns.udbto_info;

查看对象资源表,包括路径,大小,信息,SH256 等

select * from udbto_ns.udbto_object;

常用接口说明

1.配置接口函数 设置 udbto s3 服务器地址,可设置三个,也可以留空

select udbto_set_url('192.168.2.124:80', '', '');

设置 udbto s3 访问秘钥

select udbto_set_key('P6pVj43nmi64oLiA', 'z7rigPyLVMWX8QwCdw7J6lV8GNd7KP3T');

2.桶接口函数 列出桶

select udbto_list_buckets();

创建桶,S3 系统创建桶时,可能需要十几秒初始化

select udbto_create_bucket('mybk');

删除桶

select udbto_delete_bucket('mybk');

3.对象基本操作接口函数 上传对象,第一个参数为 S3 文件系统路径,重复会报错,第二个参数为对象的信息,可以为空

select udbto_put_object('s3://udbtovol/1.txt', 'info for test', pg_read_binary_file('1.txt'));

下载对象

select udbto_get_object('s3://udbtovol/1.txt');

删除对象

select udbto_delete_object('s3://udbtovol/1.txt');

查询对象大小

select udbto_get_object_size('s3://udbtovol/1.txt');

查询对象信息,该信息为上传对象时,第二个参数保存的信息

select udbto_get_object_info('s3://udbtovol/1.txt');

4.对象分段上传接口函数 分段上传启动,第二个参数为对象的信息,可以为空

select udbto_put_part_start('s3://udbtovol/1.pdf', 'test part');

分段上传进行中

select udbto_put_part_ongoing('s3://udbtovol/1.pdf', pg_read_binary_file('test-a'));
select udbto_put_part_ongoing('s3://udbtovol/1.pdf', pg_read_binary_file('test-b'));

分段上传结束

select udbto_put_part_end('s3://udbtovol/1.pdf');

5.对象分段下载接口函数 分段下载,第二、三个参数为开始字节和结束字节

select udbto_get_part('s3://udbtovol/1.pdf', 0, 200);

6.对象压缩解压接口函数 上传压缩对象

select udbto_put_object_compress('s3://udbtovol/1.txt', 'info for test', pg_read_binary_file('1.txt'));

下载解压对象

select udbto_get_object_decompress('s3://udbtovol/1.txt');

对象管理接口说明

1.准备删除所有对象 对象表udbto_ns.udbto_object比较重要,需要执行两次指令,避免误操作

select udbto_delete_object_prepare();

2.执行删除所有对象 参数为上一步返回的字符串

select udbto_delete_object_all('xxxxxxxxxx');

3.查找所有孤立对象 将对象表没有,但文件系统存在的孤立文件,保存到孤立对象表udbto_ns.udbto_object_alone

select udbto_find_object_alone();

4.执行删除某个孤立对象

select udbto_delete_object_alone('s3://udbtovol/1.txt');

5.执行删除所有孤立对象 将孤立对象表udbto_ns.udbto_object_alone保存的所有对象删除

select udbto_delete_object_alone_all();

加密解密接口说明

a.对象的秘钥以桶区分,保存在数据库目录下的密码钱包文件。 b.密码钱包文件类似于 udbto_2023-06-13_10-08-28.key,不要修改文件名,否则会找不到。 c.当增加桶秘钥和修改密码时,密码钱包文件会更新,需要备份钱包文件,如果丢失钱包文件,加密后的文件将无法解密。 d.钱包二级桶密码忘记时,可以通过主钱包查看和修改,当主钱包密码忘记时,需要联系九有技术进行密码复位。 e.秘钥按桶来区分,创建钱包二级桶密码,可以做到不同业务组的相互隔离,实现不同业务组的文件加密功能。

../_images/2023-06-30_151101_3436310.30172078592834295.png

1.密码钱包管理接口 打开主钱包,密码默认为 udbto5678

select udbto_master_wallet_open('udbto5678');

关闭主钱包

select udbto_master_wallet_close();

查看主钱包状态

select udbto_master_wallet_state();

修改主钱包密码

select udbto_master_wallet_change_password('ABCabc1234567890');

获取主钱包信息,给到九有技术,以便复位钱包密码

select udbto_master_wallet_info();

用九有技术给的解码字符串,复位钱包密码

select udbto_master_wallet_reset('xxxxxxxxx');

创建钱包二级桶密码

select udbto_bucket_wallet_create('bucket3', 'udbto3');

获取钱包二级桶密码

select udbto_bucket_wallet_get_password('bucket1');

设置桶二级密码的步骤 a.打开主钱包 select udbto_master_wallet_open(’udbto5678’); b.创建桶密码 select udbto_bucket_wallet_create(’bucket3’, ‘udbto3’); c.之后将该密码给到对应的业务组使用

2.密码钱包二级接口 打开桶钱包,密码由主钱包创建

select udbto_bucket_wallet_open('bucket3', 'udbto3');

关闭桶钱包

select udbto_bucket_wallet_close('bucket3');

查看桶钱包状态

select udbto_bucket_wallet_state('bucket3');

修改桶钱包密码

select udbto_bucket_wallet_change_password('bucket1', 'udbto1');

使用桶二级秘钥上传下载文件的步骤 a.打开桶钱包 select udbto_bucket_wallet_open(’bucket3’, ‘udbto3’); b.上传文件加密 select udbto_put_object_aes(’s3://bucket3/1.txt’, ‘info for test’, pg_read_binary_file(’1.txt’)); c.下载文件解密 select udbto_get_object_aes(’s3://bucket3/1.txt’);

  1. aes 加密解密接口函数 上传加密和下载解密,需先打开桶钱包,或者以钱包管理员登录

上传加密对象

select udbto_put_object_aes('s3://udbtovol/1.txt', 'info for test', pg_read_binary_file('1.txt'));

下载解密对象

select udbto_get_object_aes('s3://udbtovol/1.txt');
  1. sm4 国密加密解密接口函数 上传加密和下载解密,需先打开桶钱包,或者以钱包管理员登录

上传加密对象

select udbto_put_object_sm4('s3://udbtovol/1.txt', 'info for test', pg_read_binary_file('1.txt'));

下载解密对象

select udbto_get_object_sm4('s3://udbtovol/1.txt');

JAVA SDK 上传下载文件示例

1.上传文件

	String sql = "select udbto_put_object(?,?,?);";
	PreparedStatement ps = con.prepareStatement(sql);
	ps.setString(1, "s3://udbtovol/customer.csv");
	ps.setString(2, "cvs test");

	File file = new File("customer.csv");
	InputStream ips = new FileInputStream(file);
	ps.setBinaryStream(3, ips, (int)file.length());

	ResultSet rs = ps.executeQuery();
	while(rs.next()){
		System.out.println(rs.getString(1));
	}
	rs.close();
	ps.close();

2.下载文件

	String sql = "select udbto_get_object(?);";
	PreparedStatement ps = con.prepareStatement(sql);
	ps.setString(1, "s3://udbtovol/customer.csv");
	ResultSet rs = ps.executeQuery();
	while(rs.next()){
		FileOutputStream fos = new FileOutputStream("customer.csv");
		byte[] fileBytes = rs.getBytes(1);
		System.out.println("len:" + fileBytes.length);
		fos.write(fileBytes);
		fos.close();
	}
	rs.close();
	ps.close();