openGauss学习笔记-55 openGauss 高级特性-全密态数据库

这篇具有很好参考价值的文章主要介绍了openGauss学习笔记-55 openGauss 高级特性-全密态数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

openGauss学习笔记-55 openGauss 高级特性-全密态数据库

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

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

  • 保护数据在云上全生命周期的隐私安全。无论数据处于何种状态,攻击者都无法从数据库服务端获取有效信息。
  • 帮助云服务提供商获取第三方信任。无论是企业服务场景下的业务管理员、运维管理员,还是消费者云业务下的应用开发者,用户通过将密钥掌握在自己手上,使得高权限用户无法获取数据有效信息。
  • 让云数据库服务借助全密态能力更好的遵守个人隐私保护方面的法律法规。

全密态数据库目前支持两种连接方式:gsql连接和jdbc连接。下面将详细介绍两种连接方式下数据库的使用流程。

55.1 连接全密态数据库

  • GSQL连接数据库执行以下命令打开密态开关:

    gsql -p PORT -d postgres -r -C
    

    参数说明:

    • -p:端口号
    • -d:数据库名称
    • -C:是打开密态开关。
  • JDBC支持密态数据库相关操作,需要设置enable_ce=1

55.2 创建用户密钥

全密态数据库有两种密钥,即客户端主密钥CMK和数据加密密钥CEK。CMK用于加密CEK,CEK用于加密用户数据。

密钥创建的顺序和依赖依次为: 创建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。

    openGauss学习笔记-55 openGauss 高级特性-全密态数据库,openGauss学习笔记,openGauss,数据库,开源数据库,开源软件,sql说明: 密钥存储路径:默认情况下,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比特的密钥。

    openGauss学习笔记-55 openGauss 高级特性-全密态数据库,openGauss学习笔记,openGauss,数据库,开源数据库,开源软件,sql说明: 由于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学习笔记-55 openGauss 高级特性-全密态数据库,openGauss学习笔记,openGauss,数据库,开源数据库,开源软件,sql说明: 使用非密态客户端查看该加密表数据时是密文。

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

上述我们列出的是全密态数据库特性的基本使用方法,更全面的使用介绍,可以参考官方文档中的对应章节。

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

openGauss学习笔记-55 openGauss 高级特性-全密态数据库,openGauss学习笔记,openGauss,数据库,开源数据库,开源软件,sql文章来源地址https://www.toymoban.com/news/detail-691695.html

到了这里,关于openGauss学习笔记-55 openGauss 高级特性-全密态数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • openGauss学习笔记-33 openGauss 高级数据管理-视图

    视图与基本表不同,是一个虚拟的表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的

    2024年02月14日
    浏览(105)
  • openGauss学习笔记-34 openGauss 高级数据管理-SCHEMA

    SCHEMA又称作模式。通过管理SCHEMA,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的SCHEMA下而不引起冲突。 每个数据库包含一个或多个SCHEMA。数据库中的每个SCHEMA包含表和其他类型的对象。数据库创

    2024年02月13日
    浏览(62)
  • openGauss学习笔记-45 openGauss 高级数据管理-物化视图

    物化视图是相对普通视图而言的。普通视图是虚拟表,而物化视图实际上就是存储SQL执行语句的结果,可以直接使用数据而不用重复执行查询语句,从而提升性能。 按照刷新方式物化视图分为两种: 全量物化视图 :仅支持对已创建的物化视图进行全量更新,而不支持进行增

    2024年02月11日
    浏览(54)
  • openGauss学习笔记-28 openGauss 高级数据管理-NULL值

    NULL值代表未知数据。无法比较NULL和0,因为它们是不等价的。 创建表时,可以指定列可以存放或者不能存放NULL值,详情请参见 NOT NULL约束 。本节介绍IS NULL和IS NOT NULL操作符。 创建表customer_t1,数据如下: 28.1 IS NOT NULL 在WHERE子句中查找为NULL值的字段。 例如,列出表customer

    2024年02月14日
    浏览(54)
  • openGauss学习笔记-35 openGauss 高级数据管理-ALTER TABLE语句

    修改表,包括修改表的定义、重命名表、重命名表中指定的列、重命名表的约束、设置表的所属模式、添加/更新多个列、打开/关闭行访问控制开关。 35.1 语法格式 在一张已经存在的表上添加列。 在一张已经存在的表上删除列。 修改表的字段类型。 为一张已经存在表的列增

    2024年02月13日
    浏览(49)
  • openGauss学习笔记-60 openGauss 数据库管理-逻辑存储结构

    openGauss的数据库节点负责存储数据,其存储介质也是磁盘,本节主要从逻辑视角介绍数据库节点都有哪些对象,以及这些对象之间的关系。数据库逻辑结构如 图1 。 图 1 数据库逻辑结构图 说明: Tablespace,即表空间,是一个目录,可以存在多个,里面存储的是它所包含的数据

    2024年02月09日
    浏览(53)
  • openGauss学习笔记-09 openGauss 简单数据管理-创建数据库

    数据库安装完成后,默认生成名称为postgres的数据库。您需要自己创建一个新的数据库。 9.1 语法格式 创建数据库 查看数据库 使用“l”用于查看已经存在的数据库。 使用 “c + 数据库名” 进入已存在数据库。 修改数据库 删除数据库 9.2 参数说明 database_name 要创建、修改或

    2024年02月16日
    浏览(59)
  • openGauss学习笔记-74 openGauss 数据库管理-创建和管理视图

    74.1 背景信息 当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图,以便解决这个问题。 视图与基本表不同,不是物理上实际存在的,是一个虚表。数据库中仅存放视图的定义,而不存放视图对应的数据,这

    2024年02月07日
    浏览(56)
  • openGauss学习笔记-184 openGauss 数据库运维-升级-升级验证

    本章介绍升级完成后的验证操作。给出验证的用例和详细操作步骤。 184.1 验证项目的检查表 表 1 验证项目的检查表 序号 验证项目 检查标准 检查结果 1 版本查询 查询升级后版本是否正确 - 2 健康检查 使用gs_checkos工具完成操作系统状态检查。 - 3 数据库状态 使用gs_om工具完成

    2024年02月03日
    浏览(51)
  • openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户

    使用CREATE USER和ALTER USER可以创建和管理数据库用户。openGauss包含一个或多个已命名数据库。用户和角色在整个openGauss范围内是共享的,但是其数据并不共享。即用户可以连接任何数据库,但当连接成功后,任何用户都只能访问连接请求里声明的那个数据库。 非 三权分立 下,

    2024年02月08日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包