首页 > 数据库 >openGauss学习笔记-120 openGauss 数据库管理-设置密态等值查询-概述及使用gsql操作密态数据库

openGauss学习笔记-120 openGauss 数据库管理-设置密态等值查询-概述及使用gsql操作密态数据库

时间:2023-11-11 18:33:20浏览次数:40  
标签:info key 数据库 密态 KEY openGauss name

openGauss学习笔记-120 openGauss 数据库管理-设置密态等值查询-概述及使用gsql操作密态数据库

120.1 密态等值查询概述

随着企业数据上云,数据的安全隐私保护面临越来越严重的挑战。密态数据库将解决数据整个生命周期中的隐私保护问题,涵盖网络传输、数据存储以及数据运行态;更进一步,密态数据库可以实现云化场景下的数据隐私权限分离,即实现数据拥有者和实际数据管理者的数据读取能力分离。密态等值查询将优先解决密文数据的等值类查询问题。密态等值查询目前支持客户端工具gsql和JDBC。接下来分别介绍如何使用客户端工具执行密态等值查询的相关操作。

120.2 使用gsql操作密态数据库

  1. 以操作系统用户omm登录CN所在主机。

  2. 执行以下命令打开密态开关,连接密态数据库。

    gsql -p PORT postgres -r -C
    
  3. 创建客户端主密钥CMK和列加密密钥CEK。创建CMK的语法请参考CREATE CLIENT MASTER KEY、创建的CEK的语法请参考CREATE COLUMN ENCRYPTION KEY。

    --创建客户端加密主密钥(CMK)
    openGauss=# CREATE CLIENT MASTER KEY ImgCMK1 WITH (KEY_STORE = localkms, KEY_PATH = "key_path_value1", ALGORITHM = RSA_2048);
    openGauss=# CREATE CLIENT MASTER KEY ImgCMK WITH (KEY_STORE = localkms, KEY_PATH = "key_path_value2", ALGORITHM = RSA_2048);
    openGauss=# CREATE COLUMN ENCRYPTION KEY ImgCEK1 WITH VALUES (CLIENT_MASTER_KEY = ImgCMK1, ALGORITHM  = AEAD_AES_256_CBC_HMAC_SHA256);
    CREATE COLUMN ENCRYPTION KEY
    openGauss=# CREATE COLUMN ENCRYPTION KEY ImgCEK WITH VALUES (CLIENT_MASTER_KEY = ImgCMK, ALGORITHM  = AEAD_AES_256_CBC_HMAC_SHA256);
    CREATE COLUMN ENCRYPTION KEY
    

    查询存储密钥信息的系统表结果如下。

    openGauss=# SELECT * FROM gs_client_global_keys;
     global_key_name | key_namespace | key_owner | key_acl |        create_date
    -----------------+---------------+-----------+---------+----------------------------
     imgcmk1         |          2200 |        10 |         | 2021-04-21 11:04:00.656617
     imgcmk          |          2200 |        10 |         | 2021-04-21 11:04:05.389746
    (2 rows)
    openGauss=# SELECT column_key_name,column_key_distributed_id ,global_key_id,key_owner  FROM gs_column_keys;
     column_key_name | column_key_distributed_id | global_key_id | key_owner
    -----------------+---------------------------+---------------+-----------
     imgcek1         |                 760411027 |         16392 |        10
     imgcek          |                3618369306 |         16398 |        10
    (2 rows)
    
  4. 创建加密表。

    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 = ImgCEK1, encryption_type = DETERMINISTIC));
    NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'id_number' as the distribution column by default.
    HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
    CREATE TABLE
    

    查询表的详细信息如下,Modifiers值为encrypted则表示该列是加密列。

    openGauss=# \d creditcard_info
            Table "public.creditcard_info"
       Column    |       Type        | Modifiers
    -------------+-------------------+------------
     id_number   | integer           |
     name        | text              |  encrypted
     credit_card | character varying |  encrypted
    
  5. 向加密表插入数据并进行等值查询。

    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 | \x011aefabd754ded0a536a96664790622487c4d366d313aecd5839e410a46d29cba96a60e4831000000ee79056a114c9a6c041bb552b78052e912a8b730609142074c63791abebd0d38
             2 | \x011aefabd76853108eb406c0f90e7c773b71648fa6e2b8028cf634b49aec65b4fcfb376f3531000000f7471c8686682de215d09aa87113f6fb03884be2031ef4dd967afc6f7901646b
    (2 rows)
    
  6. (可选)对加密表进行alter和update操作。

    openGauss=# ALTER TABLE creditcard_info ADD COLUMN age int ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = ImgCEK, ENCRYPTION_TYPE = DETERMINISTIC);
    ALTER TABLE
    openGauss=# \d creditcard_info
            Table "public.creditcard_info"
       Column    |       Type        | Modifiers
    -------------+-------------------+------------
     id_number   | integer           |
     name        | text              |  encrypted
     credit_card | character varying |  encrypted
     age         | integer           |  encrypted
    openGauss=# ALTER TABLE creditcard_info DROP COLUMN age;
    ALTER TABLE
    openGauss=# update creditcard_info set credit_card = '80000000011111111' where name = 'joy';
    UPDATE 1
    openGauss=# select * from creditcard_info  where name = 'joy';
     id_number | name |    credit_card
    -----------+------+-------------------
             2 | joy  | 80000000011111111
    (1 row)
    

标签:info,key,数据库,密态,KEY,openGauss,name
From: https://blog.51cto.com/shuchaoyang/8318973

相关文章

  • 高斯数据库HCNA之数据定义
    三、数据定义1、DDL分类DDL(DataDefinitionLanguage数据定义语言),用于定义或修改数据库中的对象,主要分为三种类型语句:CREATE、ALTER和DROPCREATE用来创建数据库对象ALTER用来修改数据库对象的属性DROP则是用来删除数据库对象2、数据库对象什么是数据库对象数据库对象是数据......
  • DM8数据库单机部署
    1.环境主备X86contos7 64位ulimit-adatasegsize          (kbytes,-d)unlimitedfilesize              (blocks,-f)unlimitedopenfiles                     (-n)65537virtualmemory         (kbytes,-v......
  • Java基础、MySQL数据库、Web前端(HTML、CSS、JavaScript)
    一、选择题(每题1分,共20题,共20分),注:可能有多选哦!1、在Java中,下列标识符不合法的有(   )A.newB.$UsdollarsC.1234 D.car.taxi2、定义了int型二维数组int[][]a=newinta[6][7]后,数组元素a[3][4]前的数组元素个数为(  )  A.24 B.25 C.18 D.173、下面程序的运行结果是( ......
  • milvus向量数据库源码编译
    (milvus源码编译)编译环境os:ubuntu22.04.6live-server,x64gcc:9.4.0cmake:3.24.0go:1.18.10milvus:v2.3.2操作系统建议使用ubuntu。在centos7上未编译成功。在root账户下操作。安装gcc因为后面需要安装cmake,因此先安装如下依赖:aptinstallg++gccmakelibssl-dev......
  • 解决sqlserver数据库显示单个用户
    今天突然发现数据库显示为单个用户并且,访问速度超慢,执行以下语句解决了1USEmaster;2GO3DECLARE@SQLVARCHAR(MAX);4SET@SQL=''5SELECT@SQL=@SQL+';KILL'+RTRIM(SPID)--杀掉该进程6FROMmaster..sysprocesses7WHEREdbid=DB_ID('Test');89......
  • 基于MacOS M2 芯片的Mysql 数据库安装与使用
    第一步:MySQL软件下载与安装1.1 登录网址:https://dev.mysql.com/downloads/mysql/,选择系统:MacOS,版本:8.0.35,或者更新的版本,OSversion选择ARM,64-bit,点击下Download1.2 接下来安装软件:双击mysql-8.0.35-macos13-arm64.dmg,点继续或下一步,使用强密码usestrongpasswordencr......
  • 国产瀚高数据库简单实践 及 authentication method 13 not supported 错误解决方法
    近几年IT界软硬件“国产化”搞得很密集,给很多公司带来了商机。但是有些公司拿国外的代码改改换个皮肤,就是“自主知识产权”的国产软件,光明正大卖钱,这个有点...,还经常有丑闻露出,譬如某星浏览器、C某-IDE...话不多说,最近有个项目需要国产化改造,业主方推荐了国产数据库---瀚高数据库......
  • Grafana监控Oracle数据库的表大小等信息
    Grafana监控Oracle数据库的表大小等信息方案oracledb_exporter以及prometheusgrafana使用的SQL以及配置文件[[metric]]context="table_sizeinfo"labels=["table_nameinfo","table_tablespace"]metricsdesc={table_rownum="tablerownum&q......
  • 数据库设计心得
    数据库设计心得前言我们小组的项目较为特殊,我们小组是基于Miniob的SQL请求并发处理的子系统,意思是在原有Miniob这个DBMS上面完善其功能,并且实现能够对SQL请求的并发处理。由于本身项目就是一个数据库管理系统,想要根据这个数据库管理系统再设计新的表不太合适。但我们小组仍然竭......
  • Python MySQL 数据库查询:选择数据、使用筛选条件、防止 SQL 注入
    从表格中选择数据要从MySQL中的表格中选择数据,请使用"SELECT"语句:示例选择"customers"表格中的所有记录,并显示结果:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",datab......