能举一个数据库数据加密的例子吗?

发布网友 发布时间:2022-04-22 03:26

我来回答

1个回答

热心网友 时间:2023-12-01 10:48

到目前为止,Oracle 提供两种加密方式:
a) 加密 API 例如包 和 dbms_crypto (在 Oracle 数据库 10g 第 1 版和更高版本中)。 使用这些包,我们可以构建我们自己的基础架构,对数据进行加密。 这种方法的灵活性最强,但是构建和管理却相当复杂。
b) 透明的数据加密是 Oracle 数据库 10g 第 2 版和更高版本的一个特性;使用该特性后,我们就不必手动进行密码管理了。 数据库管理密码,但是正如名称所指,加密是透明的——数据仅仅以加密的方式存储而已。 当我们选择了这种方式,扩展性比较差。

对字符型和其他数据类型进行加密要用UTL_RAW..CAST_TO_RAW进行数据类型的转换。实验中采用的DATA_CRYPTO中提供的加密和解密函数已经完成了字符转换,不需要再手动进行转换了。为什么不采用字符类型来存放密文,是因为不同语言版本的Oracle数据库转换后的字符类型不同,当一个数据库中的密文移动到其他语言版本的数据库中将不能解密。所以选择了RAW和BLOB.
下面开始实验:
1) 首先我们在ldd600模式下安装DATA_CRYPTO包和创建一个员工表,它包括两个字段,ename,salary。
SQL> @cry_install.sql
2) 我们将对salary列进行加密,因为员工的工资也属于隐私。
加密之前
进行加密:SQL> update people
2 set salary=data_crypto.encrypt(salary,'sal key');
加密之后,
请问who能看的懂?但是注意我们存放的还是字符型,data_crypto包中的encrypt_char用来把字符型加密为RAW型。但是建表的时要指定salary列的类型为raw。这里就不试了。
我们看看这些数据如果为raw型是什么样子的
1) 查询时我们要对其进行解密,才能解读
SQL> select ename,data_crypto.decrypt(salary,'sal key') salary
2 from people;
对照一下,和加密之前的数据完全相同。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com