UDBTO 插件使用
快速开始
udbto 插件是在 unvdb 数据库端,通过 SQL 语句控制 udbto 的接口。

安装部署
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.秘钥按桶来区分,创建钱包二级桶密码,可以做到不同业务组的相互隔离,实现不同业务组的文件加密功能。

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’);
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');
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();