DB2中的数据值加密

【导读】本文描述如何使用 IBM DB2 Universal Database Version (Unix & Windows) 中提供的新函数轻松地将数据加密集成到数据库应用程序中。

多年来,数据库已经能够阻止未经授权的人看到其中的数据,这通常是通过数据库管理器中的特权和权限来实现的。在当前的环境下,对存储数据的保密的需求日益增长。这意味着即使 DBA 对表中的数据有完全的访问权限,但是表中可能还有数据拥有者不希望任何其他人看到的某些信息。特别是对于基于 Web 的应用程序,这一问题就更加明显了,在这种应用程序中,用户输入的数据(比如信用卡号)需要保存起来,以备同一用户以后使用该应用程序。同时,用户拥有者希望能够确保任何其他人不能访问这种数据。为了实现这种功能,DB2 内置了一些 SQL 函数,这些函数允许应用程序加密和解密数据。当将数据插入到数据库中时,可以使用用户提供的加密密码对其加密。当检索该数据的时候,必须提供相同的密码才能解密数据。对于要多次使用同一个密码的情况,可以使用一个赋值语句设置 ENCRYPTION PASSWORD 值,并令其在某次连接期间内有效。

本文将描述这些 SQL 函数,并给出一些关于如何使用这些加密函数的例子。我们还将讨论在关系数据库中使用加密数据的设计和性能相关事项。

实现

下面显示了这些新的 SQL 函数的签名。在 DB2 文档的 SQL Reference 部分中有更详细的文档。(为了确保对加密的数据使用正确的数据类型和长度,请务必阅读 SQL Reference 中 ENCRYPT 函数下的“Table Column Definition”部分。)

Encrypt (StringDataToEncrypt, PasswordOrPhrase, PasswordHint)

Decrypt_Char(EncryptedData, PasswordOrPhrase)

GetHint(EncryptedData)

Set Encryption Password

用于对数据加密的算法是一个 RC2 分组密码(block cipher),它带有一个 128 位的密钥。这个 128 位的密钥是通过消息摘要从密码得来的。加密密码与 DB2 认证无关,仅用于数据的加密和解密。

这里可以提供一个可选的参数 PasswordHint,这是一个字符串,可以帮助用户记忆用于对数据加密的 PasswordOrPhrase。(例如,可以使用 'George' 作为记忆 'Washington'的提示。)

列级加密

列级加密(column level encryption)意味着对于一个给定列中的所有值都使用相同的密码进行加密。这种类型的加密可以在视图中使用,也可以在使用了一个公共密码的情况下使用。当对一个或多个表中所有的行使用相同的密钥时,ENCRYPTION PASSWORD 专用寄存器将十分有用。

例 1:这个例子使用 ENCRYPTION PASSWORD 值来保存加密密码。它对雇员的社会保险号进行加密,并以经过加密的形式将其存储在 EMP 表中。

create table emp (ssn varchar(124) for bit data);

set encryption password = 'Ben123';

insert into emp (ssn) values(encrypt('289-46-8832'));

insert into emp (ssn) values(encrypt('222-46-1904'));

insert into emp (ssn) values(encrypt('765-23-3221'));

select decrypt_char(ssn) from emp;

时间: 2024-09-09 14:18:48

DB2中的数据值加密的相关文章

数据结构 单链表-设计算法在带头结点的单链表L中删除数据值最小的结点

问题描述 设计算法在带头结点的单链表L中删除数据值最小的结点 //单链表类型定义如下: typedef struct node { int data; struct node *next; } ListNode; typedef ListNode *LinkList; //设计算法在带头结点的单链表L中删除数据值最小的结点(设链表中各结点数据值 均不相同).函数的原型为:void f34(LinkList L)

DB2中的数据移动(一)_DB2

DB2中所谓的数据移动包括   1. 数据的导入Import   2. 数据的导出Export   3. 数据的装入Load   导入和装入都是利用DB2的相关命令把某种格式的文件中的数据保存到数据库中的表中   导出是指把DB2数据库的表中的数据保存到某种格式的文件当中去   数据移动的作用   如果要在不同的数据库管理系统之间转移数据数据移动通常是最实用的一种方法因为任何一种数据库管理系统都支持常用的几种文件格式通过这个通用的接口就很容易实现不同系统间数据的转移.   这三个命令中Expor

DB2中的数据移动

数据移动的作用: 如果要在不同的数据库管理系统之间转移数据,数据移动通常是最实用的一种方法,因为任何一种数据库管理系统都支持常用的几种文件格式,通过这个通用的接口,就很容易实现不同系统间数据的转移. 这三个命令中,Export最简单,因为从表中向文件转移数据,通常不会出现错误,也不会有非法的数据. 在讲解命令之前,首先介绍一下文件的格式,用于DB2数据移动的文件格式有四种: 1. ASC--非定界ASCII文件,是一个ASCII字符流.数据流中的行由行定界符分隔,而行中的每一列则通过起始和结束位

DB2中的数据移动-装入

装入(Load) 装入命令格式与导入类似,命令关键字是Load,但是后面的参数比导入命令多的多,详细用法可以自行参考DB2文档. 装入与导入类似,都是将输入文件中的数据移入到目标表中,二者的不同点将在实例中逐步解释. 在装入之前,目标表必须已经存在. 装入的性能比导入高,原因在后面结合实例详细解释. 装入操作不记录到日志中,所以不能使用日志文件进行前滚操作. 装入分为4个阶段: 1. 装入阶段 在这个阶段发生两件事:数据存储在表中,收集索引键并排序.在装入时,DBA可以指定多长时间生成一致点.

sqlserver中重复数据值只取一条的sql语句_MsSql

复制代码 代码如下: --建立数据表createtable TestData ( ID int identity(1,1) primary key, Data int, ColA varchar(20), ColB varchar(20) ) go --插入测试数据 declare @counts int declare @i int set @counts = 10000 set @i = 1 while @i<=@counts begin insert TestData (Data,ColA

在ASP.NET页面中实现数据饼图

在<在ASP.NET页面中实现数据棒图>中已经介绍了ASP.NET中数据棒图的绘制方法.前文已经说过,ASP.NET之所以能够在客户端浏览器中形成各种数据图片,是因为在ASP.NET中提供了绘图功能,具体的作法是先在服务器端创建一个Bitmap实例,然后利用ASP.NET中提供的绘图功能,按照要生成的图片的模样,进行绘制,最后把绘制好的实例以数据流的方式传送到客户端的浏览器上,并形成图片显示出来.本文要介绍的在ASP.NET页面中实现数据饼图采用的基本也是这种方法.饼图有时称为"Pi

插入操作-DB2 中如何将表中数据复制一份,改变表中一个联合主键的值,

问题描述 DB2 中如何将表中数据复制一份,改变表中一个联合主键的值, 如下: 表A有3个字段是联合主键(非自增长) create table A ( a VARCHAR(20) not null, b VARCHAR(100) not null, c VARCHAR(10) not null, constraint P_Key_1 primary key (a, b, c) ); 表中数据: a b c 1 2 0 1 3 0 如何将表中数据复制一份,改变表中一个联合主键的值,将字段"c&qu

总结C语言在嵌入式开发中应用的知识点(文件数据的加密与解密)

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> 好几天没写总结了,因为最近特别特别忙,各种驱动的代码都要我去改去测试,我主要最近主要是在搞驱动中数据,文件加密解密这块,就这块内容,便运用到了C语言最核心的两个知识点---数组和指针.</span>  加密数据和文件为什么要用到指针和数组?          首先你要打开一

解决DB2数据库修改字段值/插入数据失败

修改字段中出现不能修改现象:有以下原因: 1.字段是否有约束? 2.字段值是否自增? 3.该表是否被使用,或者关联触发器? DB2中,插入数据过程,对字段的增加易出现隐性问题:  代码如下 复制代码 INSERT INTO LGLK.T_UUM_DEPT (UUID ,DEPT_NO, DEPT_NAME, PARENT_ID, ISLEAF, STATUS, CJZID, CJZSSBMID, CJSJ) VALUES ( '402881f03e11768c013e1187f22e0002',