住房和建设局网站,莱芜金点子最新招聘信息招聘网,tomcat 怎么做网站,网站服务器ip地址怎么查文章目录 openGauss学习笔记-55 openGauss 高级特性-全密态数据库55.1 连接全密态数据库55.2 创建用户密钥55.3 创建加密表55.4 向加密表插入数据并进行查询 openGauss学习笔记-55 openGauss 高级特性-全密态数据库
全密态数据库意在解决数据全生命周期的隐私保护问题#xf… 文章目录 openGauss学习笔记-55 openGauss 高级特性-全密态数据库55.1 连接全密态数据库55.2 创建用户密钥55.3 创建加密表55.4 向加密表插入数据并进行查询 openGauss学习笔记-55 openGauss 高级特性-全密态数据库
全密态数据库意在解决数据全生命周期的隐私保护问题使得系统无论在何种业务场景和环境下数据在传输、运算以及存储的各个环节始终都处于密文状态。当数据拥有者在客户端完成数据加密并发送给服务端后在攻击者借助系统脆弱点窃取用户数据的状态下仍然无法获得有效的价值信息从而起到保护数据隐私的能力。
由于整个业务数据流在数据处理过程中都是以密文形态存在通过全密态数据库可以实现
保护数据在云上全生命周期的隐私安全。无论数据处于何种状态攻击者都无法从数据库服务端获取有效信息。帮助云服务提供商获取第三方信任。无论是企业服务场景下的业务管理员、运维管理员还是消费者云业务下的应用开发者用户通过将密钥掌握在自己手上使得高权限用户无法获取数据有效信息。让云数据库服务借助全密态能力更好的遵守个人隐私保护方面的法律法规。
全密态数据库目前支持两种连接方式gsql连接和jdbc连接。下面将详细介绍两种连接方式下数据库的使用流程。
55.1 连接全密态数据库 GSQL连接数据库执行以下命令打开密态开关 gsql -p PORT -d postgres -r -C参数说明 -p端口号-d数据库名称-C是打开密态开关。 JDBC支持密态数据库相关操作需要设置enable_ce1
55.2 创建用户密钥
全密态数据库有两种密钥即客户端主密钥CMK和数据加密密钥CEK。CMK用于加密CEKCEK用于加密用户数据。
密钥创建的顺序和依赖依次为 创建CMK 创建CEK。 GSQL环境下创建CMK和CEK 【创建CMK】 CREATE CLIENT MASTER KEY client_master_key_name WITH KEY_STORE key_store_name, KEY_PATH key_path_value, ALGORITHM algorithm_type;参数说明 client_master_key_name 该参数作为密钥对象名在同一命名空间下需满足命名唯一性约束。 取值范围字符串需符合标识符的命名规范。 KEY_STORE 指定管理CMK的密钥工具或组件取值目前仅支持localkms。 KEY_PATH KEY_STORE负责管理多个CMK密钥KEY_PATH选项用于在KEY_STORE中唯一标识CMK。取值类似“key_path_value”。 ALGORITHM 由本语法创建的用于加密COLUMN ENCRYPTION KEY该参数用于指定加密算法的类型。取值范围RSA_2048、RSA3072和SM2。 说明 密钥存储路径默认情况下localkms将在 L O C A L K M S F I L E P A T H 路径下生成 / 读取 / 删除密钥文件用户可手动配置该环境变量。但是用户也可以不用单独配置该环境变量在尝试获取 LOCALKMS_FILE_PATH路径下生成/读取/删除密钥文件用户可手动配置该环境变量。但是用户也可以不用单独配置该环境变量在尝试获取 LOCALKMSFILEPATH路径下生成/读取/删除密钥文件用户可手动配置该环境变量。但是用户也可以不用单独配置该环境变量在尝试获取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。 所以为了能够成功创建密钥相关文件在密钥存储路径下应该保证没有已存在的与密钥相关文件名同名的文件。 【创建CEK】 CREATE COLUMN ENCRYPTION KEY column_encryption_key_name WITH(CLIENT_MASTER_KEY client_master_key_name, ALGORITHM algorithm_type, ENCRYPTED_VALUE encrypted_value);参数说明 column_encryption_key_name 该参数作为密钥对象名在同一命名空间下需满足命名唯一性约束。 取值范围字符串要符合标识符的命名规范。 CLIENT_MASTER_KEY 指定用于加密本CEK的CMK。 取值为CMK对象名该CMK对象由CREATE CLIENT MASTER KEY语法创建。 ALGORITHM 指定该CEK将用于何种加密算法。 取值范围为AEAD_AES_256_CBC_HMAC_SHA256、AEAD_AES_128_CBC_HMAC_SHA256和SM4_SM3 ENCRYPTED_VALUE可选项 该值为用户指定的密钥口令密钥口令长度范围为28 ~ 256个字符。28个字符派生出来的密钥安全强度满足AES128。若用户需要用AES256密钥口令的长度需要39个字符。如果不指定则会自动生成256比特的密钥。 说明 由于SM2、SM3、SM4等算法属于中国国家密码标准算法为规避法律风险需配套使用。如果创建CMK时指定SM4算法来加密CEK则创建CEK时必须指定SM4_SM3算法来加密数据。 【示例:GSQL环境下】 -- 创建$GAUSSHOME/etc/localkms/路径
mkdir -p $GAUSSHOME/etc/localkms/
-- 使用特权账户创建一个普通用户alice。openGauss# CREATE USER alice PASSWORD ********;
-- 使用普通用户alice的账户连接密态数据库并执行本语法。gsql -p 57101 postgres -U alice -r -C
-- 创建客户端加密主密钥CMK对象。openGauss CREATE CLIENT MASTER KEY alice_cmk WITH (KEY_STORE localkms , KEY_PATH key_path_value”, ALGORITHM RSA_2048);
-- 创建客户端列加密密钥CEK对象。openGauss CREATE COLUMN ENCRYPTION KEY ImgCEK WITH VALUES (CLIENT_MASTER_KEY alice_cmk, ALGORITHM AEAD_AES_256_CBC_HMAC_SHA256); JDBC环境下创建CMK和CEK // 创建客户端主密钥Connection conn DriverManager.getConnection(url,user,password);Statement stmt conn.createStatement();int rc stmt.executeUpdate(CREATE CLIENT MASTER KEY ImgCMK1 WITH ( KEY_STORE localkms , KEY_PATH key_path_value , ALGORITHM AES_256_CBC);); // 创建列加密密钥int rc2 stmt.executeUpdate(CREATE COLUMN ENCRYPTION KEY ImgCEK1 WITH VALUES (CLIENT_MASTER_KEY ImgCMK1, ALGORITHM AEAD_AES_256_CBC_HMAC_SHA256););55.3 创建加密表
在创建了客户端主密钥CMK和数据加密密钥CEK之后就可以使用CEK创建加密表了。加密表的创建支持对加密列进行随机加密和确定性加密两种方式。 GSQL连接环境下创建加密表 【示例】 openGauss# CREATE TABLE creditcard_info (id_number int, name text encrypted with (column_encryption_key ImgCEK, encryption_type DETERMINISTIC),credit_card varchar(19) encrypted with (column_encryption_key ImgCEK, encryption_type DETERMINISTIC));参数说明 ENCRYPTION_TYPE为ENCRYPTED WITH约束中的加密类型encryption_type_value的值为[ DETERMINISTIC | RANDOMIZED ]。 JDBC环境下创建加密表 int rc3 stmt.executeUpdate(CREATE TABLE creditcard_info (id_number int, name varchar(50) encrypted with (column_encryption_key ImgCEK, encryption_type DETERMINISTIC),credit_card varchar(19) encrypted with (column_encryption_key ImgCEK1, encryption_type DETERMINISTIC)););55.4 向加密表插入数据并进行查询
创建了加密表以后可以在密态数据库模式下连接参数-C向加密表中插入数据、查看数据。当使用普通环境关掉连接参数-C时是无法对加密表进行操作的查看加密表时也只能看到密文数据。 GSQL环境下向加密表插入数据并查看 openGauss# INSERT INTO creditcard_info VALUES (1,joe,6217986500001288393); INSERT 0 1 openGauss# INSERT INTO creditcard_info VALUES (2, joy,6219985678349800033); INSERT 0 1 openGauss# select * from creditcard_info where name joe; id_number | name | credit_card -------------------------------------- 1 | joe | 6217986500001288393 (1 row)说明 使用非密态客户端查看该加密表数据时是密文。 openGauss# select id_number,name from creditcard_info; id_number | name ------------------------------------------------------ 1 | \x011aefabd754ded0a536a96664790622487c4d36 2 | \x011aefabd76853108eb406c0f90e7c773b71648f (2 rows)JDBC环境下向加密表插入数据并查看 // 插入数据int rc4 stmt.executeUpdate(INSERT INTO creditcard_info VALUES (1,joe,6217986500001288393);); // 查询加密表ResultSet rs null; rs stmt.executeQuery(select * from creditcard_info where name joe;); // 关闭语句对象stmt.close();上述我们列出的是全密态数据库特性的基本使用方法更全面的使用介绍可以参考官方文档中的对应章节。 点赞你的认可是我创作的动力 ⭐️ 收藏你的青睐是我努力的方向 ✏️ 评论你的意见是我进步的财富