【好文推荐】openGauss 5.0.0 数据库安全——全密态探究

news2024/11/24 5:07:15

前言

写此文章的目的,主要是验证:

  • openGauss 5.0.0 数据库能够实现哪种加密方式的全密态

  • 全密态数据库的特点

一、全密态介绍

ffc984858dbb5ecc6a24446e3822b6a3.jpeg
b40739ab6f9754eda08083b23549f1ca.jpeg
全密态数据库意在解决数据全生命周期的隐私保护问题,使得系统无论在何种业务场景和环境下,数据在传输、运算以及存储的各个环节始终都处于密文状态。当数据拥有者在客户端完成数据加密并发送给服务端后,在攻击者借助系统脆弱点窃取用户数据的状态下仍然无法获得有效的价值信息,从而起到保护数据隐私的能力。

由于整个业务数据流在数据处理过程中都是以密文形态存在,通过全密态数据库,可以实现:

  • 1)保护数据在云上全生命周期的隐私安全。无论数据处于何种状态,攻击者都无法从数据库服务端获取有效信息。

  • 2)帮助云服务提供商获取第三方信任。无论是企业服务场景下的业务管理员、运维管理员,还是消费者云业务下的应用开发者,用户通过将密钥掌握在自己手上,使得高权限用户无法获取数据有效信息。

  • 3)让云数据库服务借助全密态能力更好的遵守个人隐私保护方面的法律法规。

全密态数据库目前支持两种连接方式:gsql连接和jdbc连接。

二、环境准备

本次实验使用的操作系统是centos7.9,openGauss版本是5.0.0,实验直接在一台服务器上面进行。

  • 操作系统
    6f2e09cc7e9b6670c9b6975acda76943.jpeg

  • 数据库版本

    c6f0776fe78897625896ed770584606f.jpeg

三、实验过程

1、创建用户

使用管理员用户登录,然后参加一个qmttest用户,密码设置为"qwer1234!@#$"

CREATE USER qmttest PASSWORD 'qwer1234!@#$';

b220c016fd820bec189f816e0ee2aab1.jpeg

使用qmttest用户登录,连接密态数据库.

-C:是打开密态开关

gsql -p 15400 -d postgres -U qmttest -r -C

14587669c17e3a62deff98864aacc3f1.jpeg

2、创建用户密钥

全密态数据库有两种密钥,即客户端主密钥CMK和数据加密密钥CEK。CMK用于加密CEK,CEK用于加密用户数据。密钥创建的顺序和依赖依次为:创建CMK > 创建CEK。

从这里开始验证加密方式的组合。

序号 主密钥CMK 数据加密密钥CEK 1 RSA_2048 AEAD_AES_256_CBC_HMAC_SHA256 2 RSA_3072 AEAD_AES_128_CBC_HMAC_SHA256 3 SM2 SM4_SM3 2.1 创建客户端主密钥CMK

密钥存储路径:默认情况下,localkms将在(LOCALKMS_FILE_PATH)路径下生成/读取/删除密钥文件,用户可手动配置该环境变量。但是,用户也可以不用单独配置该环境变量,在尝试获取LOCALKMS_FILE_PATH失败时,localkms会尝试获取($GAUSSHOME/etc/localkms/)路径,如果该路径存在,则将其作为密钥存储路径。密钥相关文件名:使用CREATE CMK语法时,localkms将会创建四个与存储密钥相关的文件。示例:当KEY_PATH = “key_path_value”, 四个文件的名称分别为key_path_value.pub、key_path_value.pub.rand、 key_path_value.priv、 key_path_value.priv.rand。所以,为了能够成功创建密钥相关文件,在密钥存储路径下,应该保证没有已存在的与密钥相关文件名同名的文件。

2.1.1 RSA_2048
使用RSA_2048加密算法进行创新CMK 名称:qmt_rsa2048CREATE CLIENT MASTER KEY qmt_rsa2048 WITH (KEY_STORE = localkms , KEY_PATH = "qmt_rsa2048", ALGORITHM = RSA_2048);

91ac3418c7a89d854c2c6a995dd1cf1f.jpeg
查看生成的相应加密文件

421c82129f1467ee54c9f211fbc2795e.jpeg

2.1.2 RSA_3072
使用RSA_3072加密算法进行创建CMK 名称:qmt_RSA3072CREATE CLIENT MASTER KEY qmt_RSA3072 WITH (KEY_STORE = localkms , KEY_PATH = "qmt_RSA3072", ALGORITHM = RSA_3072);
c14b3def2e2eb5e415cee3f0263685e6.jpeg
查看生成的相应加密文件
c7a4a4ea4b09be7ba7febd6cef8d0cad.jpeg
2.1.3 SM2
使用SM2加密算法进行创建CMK 名称:qmt_SM2CREATE CLIENT MASTER KEY qmt_SM2 WITH (KEY_STORE = localkms , KEY_PATH = "qmt_SM2", ALGORITHM = SM2);

81349a80d16c5dc34c5d477a22bae570.jpeg
查看生成的相应加密文件
dee39844c07444e10d053476ea4cd412.jpeg

2.2 创建数据加密密钥CEK

2.2.1 AEAD_AES_256_CBC_HMAC_SHA256
使用 RSA_2048 + AEAD_AES_256_CBC_HMAC_SHA256 创建CEK 名称:RSA_2048_256_CEKCREATE COLUMN ENCRYPTION KEY RSA_2048_256_CEK WITH VALUES (CLIENT_MASTER_KEY = qmt_rsa2048, ALGORITHM = AEAD_AES_256_CBC_HMAC_SHA256);

c470fc5332fdaa646375497953400b80.jpeg

使用 RSA_3072 + AEAD_AES_256_CBC_HMAC_SHA256 创建CEK 名称:RSA_3072_256_CEKCREATE COLUMN ENCRYPTION KEY RSA_3072_256_CEK WITH VALUES (CLIENT_MASTER_KEY = qmt_RSA3072, ALGORITHM = AEAD_AES_256_CBC_HMAC_SHA256);

0f0a4a2430ad918cab0b320be1f47e4c.jpeg

使用 SM2 + AEAD_AES_256_CBC_HMAC_SHA256 创建CEK 名称:SM2_256_CEK 创建失败CREATE COLUMN ENCRYPTION KEY SM2_256_CEK WITH VALUES (CLIENT_MASTER_KEY = qmt_SM2, ALGORITHM = AEAD_AES_256_CBC_HMAC_SHA256);

有报错

ERROR(CLIENT): National secret algorithm must be used together.

国家密码算法必须一起使用

e118e16a444cf742f618949c4586adba.jpeg

2.2.2 AEAD_AES_128_CBC_HMAC_SHA256
使用 RSA_2048 + AEAD_AES_128_CBC_HMAC_SHA256 创建CEK 名称:RSA_2048_128_CEKCREATE COLUMN ENCRYPTION KEY RSA_2048_128_CEK WITH VALUES (CLIENT_MASTER_KEY = qmt_rsa2048, ALGORITHM = AEAD_AES_128_CBC_HMAC_SHA256);

a81ce2a0e0531c370ff1b072da98f98d.jpeg

使用 RSA_3072 + AEAD_AES_128_CBC_HMAC_SHA256 创建CEK

名称:RSA_3072_128_CEK

CREATE COLUMN ENCRYPTION KEY RSA_3072_128_CEK WITH VALUES (CLIENT_MASTER_KEY = qmt_RSA3072, ALGORITHM = AEAD_AES_128_CBC_HMAC_SHA256);

6e1db1989e47a5972efcb80ebd168ca3.jpeg

使用 SM2 + AEAD_AES_128_CBC_HMAC_SHA256 创建CEK 名称:SM2_128_CEK 创建失败CREATE COLUMN ENCRYPTION KEY SM2_128_CEK WITH VALUES (CLIENT_MASTER_KEY = qmt_SM2, ALGORITHM = AEAD_AES_128_CBC_HMAC_SHA256);

有报错

ERROR(CLIENT): National secret algorithm must be used together.

国家密码算法必须一起使用

032722a009d9a41e208555b4e663d15a.jpeg

2.2.3 SM4_SM3
使用 RSA_2048 + SM4_SM3 创建CEK 名称:RSA_2048_SM4_SM3_CEK 创建失败CREATE COLUMN ENCRYPTION KEY RSA_2048_SM4_SM3_CEK WITH VALUES (CLIENT_MASTER_KEY = qmt_rsa2048, ALGORITHM =SM4_SM3);

有报错

ERROR(CLIENT): National secret algorithm must be used together.

国家密码算法必须一起使用

6062c181303c46588c99b6e128f73687.jpeg
使用 RSA_3072 + SM4_SM3 创建CEK

名称:RSA_3072_SM4_SM3_CEK

创建失败

CREATE COLUMN ENCRYPTION KEY RSA_3072_SM4_SM3_CEK WITH VALUES (CLIENT_MASTER_KEY = qmt_RSA3072, ALGORITHM = SM4_SM3);

有报错

ERROR(CLIENT): National secret algorithm must be used together.

国家密码算法必须一起使用

9b0897529a93ac7f7d803797f97fc316.jpeg

使用 SM2 + SM4_SM3 创建CEK

名称:SM2_SM4_SM3_CEK

CREATE COLUMN ENCRYPTION KEY SM2_SM4_SM3_CEK WITH VALUES (CLIENT_MASTER_KEY = qmt_SM2, ALGORITHM = SM4_SM3);

d21d5a68ed4a4a199f50a446cea1b6ac.jpeg

2.3 总结

序号 数据加密密钥CEK 主密钥CMK 组合名称 是否创建成功 1 AEAD_AES_256_CBC_HMAC_SHA256 RSA_2048 RSA_2048_256_CEK 2 AEAD_AES_256_CBC_HMAC_SHA256 RSA_3072 RSA_3072_256_CEK 3 AEAD_AES_256_CBC_HMAC_SHA256 SM2 SM2_256_CEK 4 AEAD_AES_128_CBC_HMAC_SHA256 RSA_2048 RSA_2048_128_CEK 5 AEAD_AES_128_CBC_HMAC_SHA256 RSA_3072 RSA_3072_128_CEK 6 AEAD_AES_128_CBC_HMAC_SHA256 SM2 RSM2_128_CEK 7 SM4_SM3 RSA_2048 RSA_2048_SM4_SM3_CEK 8 SM4_SM3 RSA_3072 SA_3072_SM4_SM3_CEK 9 SM4_SM3 SM2 SM2_SM4_SM3_CEK

国密加密算法 SM2 SM4_SM3 不能和其他加密方式组合。

目前创建数据加密密钥CEK是成功的,下面进行使用测试。

3、表加密测试

3.1 使用RSA_2048_256_CEK创建加密表

  • 表名称:RSA_2048_256_TB

CREATE TABLE RSA_2048_256_TB (id_number int, name text encrypted with (column_encryption_key = RSA_2048_256_CEK, encryption_type = DETERMINISTIC),credit_card varchar(19) encrypted with (column_encryption_key = RSA_2048_256_CEK, encryption_type = DETERMINISTIC));

2ada8ffb6aecf0046224ff94d3842515.jpeg

  • 插入数据

INSERT INTO RSA_2048_256_TB VALUES (1,'joe','6217986500001288393');
INSERT INTO RSA_2048_256_TB VALUES (2,'joy','6219985678349800033');

57ce31e203e654ddec606cb64a1951fb.jpeg

  • 客户端查询数据

select * from RSA_2048_256_TB;

e7aa31939bc1791d9bd767f7603af8ee.jpeg

  • 通过不加 -C 登录查询数据

gsql -p 15400 -d postgres -U qmttest -r
select * from RSA_2048_256_TB;

246efe5e8314b22e0c667b9c85293da6.jpeg
可以看出,数据已经加密。

加密成功,查询成功

3.2 使用RSA_3072_256_CEK创建加密表

名称:RSA_3072_256_TB

CREATE TABLE RSA_3072_256_TB (id_number int, name text encrypted with (column_encryption_key = RSA_3072_256_CEK, encryption_type = DETERMINISTIC),credit_card varchar(19) encrypted with (column_encryption_key = RSA_3072_256_CEK, encryption_type = DETERMINISTIC));

7ff5b4c0a760a54ef03bc40ca03291d6.jpeg

  • 插入数据

INSERT INTO RSA_3072_256_TB VALUES (1,'joe','6217986500001288393');
INSERT INTO RSA_3072_256_TB VALUES (2,'joy','6219985678349800033');

af03d6546dbfc8ff6f08b9ff6523aefe.jpeg

  • 客户端查询数据

select * from RSA_3072_256_TB;

cf89c91e786d4fcc0151a16e08664638.jpeg

  • 通过不加 -C 登录查询数据

gsql -p 15400 -d postgres -U qmttest -r
select * from RSA_3072_256_TB;

040738819d17b1f12bab3c61ce08b97f.jpeg

3.3 使用RSA_2048_128_CEK创建加密表

名称:RSA_2048_128_TB

CREATE TABLE RSA_2048_128_TB (id_number int, name text encrypted with (column_encryption_key = RSA_2048_128_CEK, encryption_type = DETERMINISTIC),credit_card varchar(19) encrypted with (column_encryption_key = RSA_2048_128_CEK, encryption_type = DETERMINISTIC));

c345f7c2eebcc56ce49cb48e5e436250.jpeg

  • 插入数据

INSERT INTO RSA_2048_128_TB VALUES (1,'joe','6217986500001288393');
INSERT INTO RSA_2048_128_TB VALUES (2,'joy','6219985678349800033');

9eb311bf3a02a40bec9b327b996813d1.jpeg

  • 客户端查询数据

select * from RSA_2048_128_TB;

f2b6b6df5cf2b42a71ec952ae015770b.jpeg

  • 通过不加 -C 登录查询数据

gsql -p 15400 -d postgres -U qmttest -r
select * from RSA_2048_128_TB;

7aa8fff7fd2904024dc25dd8cf3a60dc.jpeg

3.4 使用RSA_3072_128_CEK创建加密表

名称:RSA_3072_128_TB

CREATE TABLE RSA_3072_128_TB (id_number int, name text encrypted with (column_encryption_key = RSA_3072_128_CEK, encryption_type = DETERMINISTIC),credit_card varchar(19) encrypted with (column_encryption_key = RSA_3072_128_CEK, encryption_type = DETERMINISTIC));

8fabcc33831f48a46c67e96a1528cd44.jpeg

  • 插入数据

INSERT INTO RSA_3072_128_TB VALUES (1,'joe','6217986500001288393');
INSERT INTO RSA_3072_128_TB VALUES (2,'joy','6219985678349800033');

f1087556823d1742ac03ac7f064e9d18.jpeg

  • 客户端查询数据

select * from RSA_3072_128_TB;

d7f642633f3d5d190d981e617438a8a6.jpeg

  • 通过不加 -C 登录查询数据

gsql -p 15400 -d postgres -U qmttest -r
select * from RSA_3072_128_TB;

40b14bf87c9d06b13a9b21e46377dd8d.jpeg

3.5 使用SM2_SM4_SM3_CEK创建加密表

名称:SM2_SM4_SM3_TB

CREATE TABLE SM2_SM4_SM3_TB (id_number int, name text encrypted with (column_encryption_key = SM2_SM4_SM3_CEK, encryption_type = DETERMINISTIC),credit_card varchar(19) encrypted with (column_encryption_key = SM2_SM4_SM3_CEK, encryption_type = DETERMINISTIC));

8c93eb067b5e769b7c6411a3932f025c.jpeg

  • 插入数据

INSERT INTO SM2_SM4_SM3_TB VALUES (1,'joe','6217986500001288393');
INSERT INTO SM2_SM4_SM3_TB VALUES (2,'joy','6219985678349800033');

f0c3d8e762241e4ee146e59408c43c36.jpeg

  • 客户端查询数据

select * from SM2_SM4_SM3_TB;

96c6ea1a682a73f7b079ea7c0a4dda9d.jpeg

  • 通过不加 -C 登录查询数据

gsql -p 15400 -d postgres -U qmttest -r
select * from SM2_SM4_SM3_TB;

5aaf882b139d05ade9f7f2388e7615e2.jpeg

4、组合加密方式验证

同一个表中,不同的列使用不同的加密方式。

  • 表名称:all_TB

说明:不同的列,使用不同的加密方式。
列id_number:不使用加密
列name1:RSA_2048_256_CEK,列credit_card1:RSA_3072_256_CEK,
列name2:RSA_2048_128_CEK,列credit_card2:RSA_3072_128_CEK,
列name3:SM2_SM4_SM3_CEK

CREATE TABLE all_TB (id_number int, name1 text encrypted with (column_encryption_key = RSA_2048_256_CEK, encryption_type = DETERMINISTIC),credit_card1 varchar(19) encrypted with (column_encryption_key = RSA_3072_256_CEK, encryption_type = DETERMINISTIC),name2 text encrypted with (column_encryption_key = RSA_2048_128_CEK, encryption_type = DETERMINISTIC),credit_card2 varchar(19) encrypted with (column_encryption_key = RSA_3072_128_CEK, encryption_type = DETERMINISTIC),name3 text encrypted with (column_encryption_key = SM2_SM4_SM3_CEK, encryption_type = DETERMINISTIC));

365555d2d0230fbe39e01c91409e6277.jpeg

  • 插入数据

INSERT INTO all_TB VALUES (1,'joe1','6217986500001288393','joe2','6217986500001288393','joe3');
INSERT INTO all_TB VALUES (2,'joy1','6219985678349800033','joy2','6219985678349800033','joy3');

badd334632a73d84dc57c428ad9199f1.jpeg

  • 客户端查询数据

select * from all_TB;

3c4852fb9e842178fd5322b1c426d1e2.jpeg

  • 通过不加 -C 登录查询数据

gsql -p 15400 -d postgres -U qmttest -r
select * from all_TB;

bbc95a39f4befa023915b9cb4c6467fe.jpeg

四、总结

  1. 在openGauss 3.0 版本中,国密SM2+SM4_SM3组合使用中,在查询时,是有问题的,openGauss 5.0.0 这个版本中,这个问题已经解决。

  2. 同一个表中,列可以是加密的,也可以是不加密的。

  3. 同一个表中,可以有不同的加密方式。

  4. 想要查询到明文,客户端必须有密钥文件,密钥文件需要进行妥善保管。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1041011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring面试题23:Spring支持哪些事务管理类型?Spring框架的事务管理有哪些优点?你更倾向用哪种事务管理类型?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring支持哪些事务管理类型? Spring 支持以下几种事务管理类型: 编程式事务管理:通过在代码中显式地使用事务管理 API(如 TransactionTempla…

AMEYA360:瑞萨电子整合Reality AI工具与e² studio IDE,扩大其在AIoT领域的卓越地位

全球半导体解决方案供应商瑞萨电21日宣布已在其Reality AI Tools?和e2 studio集成开发环境间建立接口,使设计人员能够在两个程序间无缝共享数据、项目及AI代码模块。实时数据处理模块已集成至瑞萨MCU软件开发工具套件(注),以方便…

腾讯mini项目-【指标监控服务重构】2023-08-26

今日已办 Venus 的 Trace 无感化 定义 handler 函数 fiber.Handler 的主要处理逻辑返回处理中出现的 error返回处理中响应 json 的函数 // handler // Description: // Author xzx 2023-08-26 18:00:03 // Param c // Return error // Return func() error : function for …

【Redis】记录一次K8S存储故障导致Redis集群拓扑异常的修复过程

文章目录 背景处理新节点遗忘旧节点 背景 集群部署在K8S环境内,存储使用的localpv,有一台K8S主机节点磁盘故障,导致在该节点上的redis节点均出现故障,主要表现为持久化失败、集群拓扑异常,持久化失败可以临时关闭RDB和…

Python:pyts库中的GramianAngularField

您想要使用pyts库中的GramianAngularField类,这是一个用于时间序列数据图像转换的工具。要使用这个类,首先确保您已经安装了pyts库。如果尚未安装,您可以使用以下命令来安装它: pip install pyts一旦安装完成,您可以通…

sql分词查询,实现类似ES的效果

需求:希望通过缩写查询到全称,列如输入常州一院,要得到常州市第一人民医院。 1、创建全文索引 # 创建全文索引 create FULLTEXT INDEX ft_hospitalname ON hospital_information(hospitalname) with parser ngram;2、编写查询sql # 自然语…

计算机专业毕业设计项目推荐09-个人医疗系统(Spring+Js+Mysql)

个人医疗系统(SpringJsMysql) **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以及…

【python】pycharm导入anaconda环境

参考 Pycharm导入anaconda环境的教程图解 - 知乎 (zhihu.com)

el-table实现穿梭功能

第一种 <template><el-row :gutter"20"><el-col :span"10"><!-- 搜索 --><div class"search-bg"><YcSearchInput title"手机号" v-model"search.phone" /><div class"search-s…

【算法训练-动态规划】一 连续子数组的最大和

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【动态规划】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

代数——第2章——群

第 2 章 群(Groups) II est peu de notions en mathematiques qui soient plus primitives que celle de loi de composition. (数学中很少有比合成律更原始的概念了。) --------------------------------------------------------Nicolas Bourbaki 2.1 合成律(LAWS OF CO…

Python中的封装

迷途小书童 读完需要 3分钟 速读仅需 1 分钟 当我们谈到 Python 中的封装时&#xff0c;可以将其类比为一个礼物盒子。封装是面向对象编程的一个重要概念&#xff0c;它允许我们将数据和相关的方法包装在一个单独的单元中&#xff0c;就像将礼物放在一个盒子里一样。 在 Python…

nginx_0.7.65_00截断_nginx解析漏洞

nginx_0.7.65_00截断_nginx解析漏洞 文章目录 nginx_0.7.65_00截断_nginx解析漏洞1 环境搭建1 解压nginx_0.7.652 双击启动&#xff0c;如有闪退&#xff0c;端口占用的情况&#xff0c;在conf文件nginx.conf修改一下端口号3 查看一下进程有nginx4 启动成功访问127.0.0.1:18080…

SpringBoot全局异常处理源码

SpringBoot全局异常处理源码 一、SpringMVC执行流程二、SpringBoot源码跟踪三、自定义优雅的全局异常处理脚手架starter自定义异常国际化引入封装基础异常封装基础异常扫描器&#xff0c;并注册到ExceptionHandler中项目分享以及改进点 一、SpringMVC执行流程 今天这里叙述的全…

一、imx6ull 最新交叉编译工具下载地址,及安装方法

IMX6ULL为Cortex-A7单核处理器&#xff0c;架构为32位&#xff0c;支持硬件浮点功能。所以下载如下图所示交叉编译工具 linaro GNU-A 针对Cortex-A系列版本 ARM官方稳定版本&#xff0c; ARM官网下载地址:https://developer.arm.com/downloads/-/gnu-a 百度网盘地址&#xff…

消息队列(RabbitMQ+RocketMQ+Kafka)

消息队列是一种应用程序之间通过异步通信进行数据交换的通信模式 消息队列的类型&#xff1a; 点对点&#xff0c;一对一的消息传递模型&#xff0c;其中每个消息只能被一个接收者消费。发送者将消息发送到队列中&#xff0c;而接收者从队列中获取消息并进行处理&#xff0c;…

ElasticSearch - DSL查询文档语法,以及深度分页问题、解决方案

目录 一、DSL 查询文档语法 前言 1.1、DSL Query 基本语法 1.2、全文检索查询 1.2.1、match 查询 1.2.2、multi_match 1.3、精确查询 1.3.1、term 查询 1.3.2、range 查询 1.4、地理查询 1.4.1、geo_bounding_box 1.4.2、geo_distance 1.5、复合查询 1.5.1、相关…

mac 解决 vscode 权限不足问题,Insufficient permissions

commod 空格&#xff0c;输入终端并打开写入指令 sudo chown -R xxxxxx1 xxxxx2&#xff08;例如我的sudo chown -R admin Desktop&#xff0c;具体参数查看下方&#xff09; x1: 用户名&#xff0c;可通过左上角查看 x2: 目标文件夹。可以另起一个终端&#xff0c;用cd 和 l…

第1关:Hive 的 Alter Table 操作

相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 1.Alter Table 命令 Alter Table 命令 Alter Table 命令 可以在 Hive 中修改表名&#xff0c;列名&#xff0c;列注释&#xff0c;表注释&#xff0c;增加列&#xff0c;调整列顺序&#xff0c;属性名等操作。…

光谱-空间特征分割提取:多光谱图像压缩

Spectral–Spatial Feature Partitioned Extraction Based on CNN for Multispectral Image Compression &#xff08;基于CNN的光谱-空间特征分割提取多光谱图像压缩&#xff09; 近年来&#xff0c;多光谱成像技术的迅速发展引起了各领域的高度重视&#xff0c;这就不可避免…