达梦(DM)数据库存储加密

embedded/2024/10/18 8:26:46/

达梦DM数据库存储加密

  • 非透明加密
    • CFALGORITHMSENCRYPT
    • CFALGORITHMSDECRYPT
    • SF_ENCRYPT_BINARY
    • SF_DECRYPT_TO_BINARY
    • SF_ENCRYPT_CHAR
    • SF_DECRYPT_TO_CHAR
    • SF_ENCRYPT_DATE
    • SF_DECRYPT_TO_DATE
    • SF_ENCRYPT_DATETIME
    • SF_DECRYPT_TO_DATETIME
    • SF_ENCRYPT_DEC
    • SF_DECRYPT_TO_DEC
    • SF_ENCRYPT_TIME
    • SF_DECRYPT_TO_TIME
    • SF_GET_CIPHER_NAME

这里主要讲述DM数据库存储加密中比较常用也比较容易理解的非透明加密相关内容。

非透明加密

引用官方的话说:DM 对非透明加密的支持是通过对用户提供加解密接口实现的。用户在使用非透明加密时,需要提供密钥并调用加解密接口。采用非透明加密可以保证个人私密数据不被包括 DBA 在内的其他人获取。
非透明加密通过用户调用存储加密函数来进行,DM 提供了一系列的存储加密函数,还提供了一个数据加密包 DBMS_OBFUSCATION_TOOLKIT。
简单的说:就是DM数据库提供了存储加密函数,用户调用存储加密函数对指定的数据进行加解密操作。

CFALGORITHMSENCRYPT

对指定类型的明文进行加密,并返回密文,密文数据类型和 SRC 类型相同,语法格式

CFALGORITHMSENCRYPT(SRC VARCHAR/TEXT/CLOB,ALGORITHM INT,KEY VARCHAR
)

参数说明:
SRC 需要被加密明文的类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
获取当前DM数据库支持的加密算法

SELECT * FROM V$CIPHERS;

在这里插入图片描述
执行加密操作

select CFALGORITHMSENCRYPT('111111',514,'secret key');

在这里插入图片描述

CFALGORITHMSDECRYPT

对密文进行解密,并得到加密前的相同数据类型的明文,语法格式

CFALGORITHMSDECRYPT(SRC VARCHAR/TEXT/CLOB,ALGORITHM INT,KEY VARCHAR)

参数说明:
SRC 需要被解密密文的数据类型
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
执行解密操作

select CFALGORITHMSDECRYPT('9FF46AA8D86FB25ADED775837F400BB5FE',514,'secret key');

在这里插入图片描述

SF_ENCRYPT_BINARY

对 VARBINARY 类型明文进行加密,并返回密文,语法格式

SF_ENCRYPT_BINARY(SRC VARBINARY,ALGORITHM INT,KEY VARCHAR,IV VARCHAR)

参数说明:
SRC 需要被加密的 VARBINARY 类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
加密语句

select SF_ENCRYPT_BINARY(0x12345678EF,514,'secret key',NULL);

在这里插入图片描述

SF_DECRYPT_TO_BINARY

对密文进行解密,并得到加密前的 VARBINARY 类型明文,语法格式

SF_DECRYPT_TO_BINARY(SRC VARBINARY,ALGORITHM INT,KEY VARCHAR,IV VARCHAR)

参数说明:
SRC 需要被解密的 VARBINARY 类型密文
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
解密语句

select SF_DECRYPT_TO_BINARY('0x78AAAC21D0A2875AB86DDF16D9E0C063',514,'secret key',NULL);

在这里插入图片描述

SF_ENCRYPT_CHAR

对 VARCHAR 类型明文进行加密,并返回密文,语法格式

SF_ENCRYPT_CHAR(SRC VARCHAR,ALGORITHM INT,KEY VARCHAR,IV VARCHAR)

参数说明:
SRC 需要被加密的 CHAR/VARCHAR 类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
加密语句

select SF_ENCRYPT_CHAR('111111',514,'secret key',NULL);

在这里插入图片描述

SF_DECRYPT_TO_CHAR

对密文进行解密,并得到加密前的 VARCHAR 类型明文,语法格式

SF_DECRYPT_TO_CHAR(SRC VARBINARY,ALGORITHM INT,KEY VARCHAR,IV VARCHAR)

参数说明:
SRC 需要被解密的 VARBINARY 类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
解密语句

select SF_DECRYPT_TO_CHAR('0x9FF46AA8D86FB25ADED775837F400BB5',514,'secret key',NULL);

在这里插入图片描述

SF_ENCRYPT_DATE

对 DATE 类型明文进行加密,并返回密文,语法格式

SF_ENCRYPT_DATE(SRC DATE,ALGORITHM INT,KEY VARCHAR,IV VARCHAR)

参数说明:
SRC 需要被加密的 DATE 类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
加密语句

select SF_ENCRYPT_DATE(cast('2023-11-11' AS DATE),514,'secret key',NULL);

在这里插入图片描述

SF_DECRYPT_TO_DATE

对密文进行解密,并得到加密前的 DATE 类型明文,语法格式

SF_DECRYPT_TO_DATE(SRC VARBINARY,ALGORITHM INT,KEY VARCHAR,IV VARCHAR)

参数说明:
SRC 需要被解密的 VARBINARY 类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
解密语句

select SF_DECRYPT_TO_DATE('0x67331E1603728F30CA76DC3B4C77A028',514,'secret key',NULL);

在这里插入图片描述

SF_ENCRYPT_DATETIME

对 DATETIME 类型明文进行加密,并返回密文,语法格式

SF_ENCRYPT_DATETIME(SRC DATETIME,ALGORITHM INT,KEY VARCHAR,IV VARCHAR)

参数说明:
SRC 需要被加密的 DATETIME 类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
加密语句

select SF_ENCRYPT_DATETIME(cast('2023-11-11 11:11:11' AS datetime),514,'secret key',NULL);

SF_DECRYPT_TO_DATETIME

对密文进行解密,并得到加密前的 DATETIME 类型明文,语法格式

SF_DECRYPT_TO_DATETIME(SRC VARBINARY,ALGORITHM INT,KEY VARCHAR,IV VARCHAR)

参数说明:
SRC 需要被加密的 DATETIME 类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
解密语句

select SF_DECRYPT_TO_DATETIME ('0xF46D6469B5958A4D04C96948F8F9428C',514,'secret key',NULL);

在这里插入图片描述

SF_ENCRYPT_DEC

对 DEC 类型明文进行加密,并返回密文,语法格式

SF_ENCRYPT_DEC(SRC DEC,ALGORITHM INT,KEY VARCHAR,IV VARCHAR)

参数说明:
SRC 需要被加密的 DEC 类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
加密语句

select SF_ENCRYPT_DEC(cast('3.1415900000' AS dec(15,8)),514,'secret key',NULL);

在这里插入图片描述

SF_DECRYPT_TO_DEC

对密文进行解密,并得到加密前的 DEC 类型明文,语法格式

SF_DECRYPT_TO_DEC(SRC VARBINARY,ALGORITHM INT,KEY VARCHAR,IV VARCHAR)

参数说明:
SRC 需要被解密的 VARBINARY 类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
解密语句

select SF_DECRYPT_TO_DEC ('0xE19597CBA4C0EAA4437454BB12041A49',514,'secret key',NULL);

在这里插入图片描述

SF_ENCRYPT_TIME

对 TIME 类型明文进行加密,并返回密文,语法格式

SF_ENCRYPT_TIME(SRC TIME,ALGORITHM INT,KEY VARCHAR,IV VARCAHR)

参数说明:
SRC 需要被加密的 TIME 类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
加密语句

select SF_ENCRYPT_TIME(cast('11:11:11' AS time),514,'secret key',NULL);

在这里插入图片描述

SF_DECRYPT_TO_TIME

对密文进行解密,并得到加密前的 TIME 类型明文,语法格式

SF_DECRYPT_TO_TIME(SRC VARBINARY,ALGORITHM INT,KEY VARCHAR,IV VARCHAR)

参数说明:
SRC 需要被解密的 VARBINARY 类型数据
ALGORITHM 加密算法 ID,不可以为 NULL。加密算法对应的 ID 可通过查询 V$CIPHERS 得到
KEY 采用的密钥,不可以为 NULL
IV 采用的初始化矢量,可以为 NULL
解密语句

select SF_DECRYPT_TO_TIME ('0x8EEFEE4328CE85853D81179C8D17EA87',514,'secret key',NULL);

在这里插入图片描述

SF_GET_CIPHER_NAME

根据加密算法 ID,获取加密算法的名称

SF_GET_CIPHER_NAME(CIPHER_ID IN INT)

参数说明:
CIPHER_ID 加密算法 ID
获取加密算法名称语句

select SF_GET_CIPHER_NAME(514);

在这里插入图片描述
到这里,关于DM数据库常用的加密函数,也就是半透明加密方式也就说完了。


http://www.ppmy.cn/embedded/21255.html

相关文章

新装电脑Flutter环境部署坑汇总(持续更新)

1.本地安装,安装fvm的坑 本人电脑使用windows ,安装fvm则一般使用choco安装,那么首先需要安装choco,打开powershell/或者cmd运行以下命令: Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager…

Hive判空函数 COALESCE 和 NVL 使用示例

Hive判空函数 COALESCE 和 NVL 使用示例 1. 在Hive中, COALESCE 和 NVL 函数都是用于处理NULL值的函数,以下是它们的用途总结: COALESCE: COALESCE 函数用于返回参数列表中第一个非NULL的数值或表达式。语法: COALESC…

浅识数据结构之时间复杂度

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 文章目录 前言一. 时间复杂度1.1 时间复杂度的概念1.2 时间复杂度如何计算1.3 时间复杂度如何表…

IntelliJ IDEA 如何启用 JDK 预览特性

IntelliJ IDEA 也可以启用 JDK 的预览特性。 针对项目,选择项目结构。 配置是在语言结构上。 单击语言结构上的 SDK 默认,往下拉,就可以看到针对新版本的选项。 同时还可以看到那些版本是支持新特性预览的,那些版本是不支持新特…

HotSpot JVM 中的应用程序/动态类数据共享

0.前言 本文的目的是详细讨论 HotSpot JVM 自 JDK 1.5 以来提供的一项功能,该功能可以减少启动时间,但如果在多个 JVM 之间共享相同的类数据共享 (CDS) 存档,则还可以减少内存占用。 1.类数据共享 (CDS) CDS 的想法是使用特定格式将预处理…

闲话 ASP.NET Core 数据校验(一):内置数据校验

前言 所谓输入的是垃圾,输出也必然是垃圾,有多少安全问题隐藏在请求的数据中,所以永远不能相信来自用户端的输入。 对请求数据的合法性进行校验,不仅有助于提升用户界面的友好性,而且有助于提高后台程序的安全性和稳…

【Hadoop】- MapReduce YARN 初体验[9]

目录 提交MapReduce程序至YARN运行 1、提交wordcount示例程序 1.1、先准备words.txt文件上传到hdfs,文件内容如下: 1.2、在hdfs中创建两个文件夹,分别为/input、/output 1.3、将创建好的words.txt文件上传到hdfs中/input 1.4、提交MapR…

VMware-Linux切换桥接模式上网教程(超详细)

这里写目录标题 1. 虚拟机关机2. VMware 虚拟网络配置2.1 检查是否存在 VMnet02.2 修改桥接模式2.3 修改Linux虚拟机网络适配器 3. Linux 系统配置3.1 修改系统网卡配置3.1.1 配置项含义解释3.1.2 查看物理机网络信息3.3.3 修改配置 3.2 重启服务 4. 测试网络连接情况5. 注意事…