❶ 数据库加密的实现技术
对数据进行加密,主要有三种方式:系统中加密、客户端(DBMS外层)加密、服务器端(DBMS内核层)加密。客户端加密的好处是不会加重数据库服务器的负载,并且可实现网上的传输加密,这种加密方式通常利用数据库外层工具实现。而服务器端的加密需要对数据库管理系统本身进行操作,属核心层加密,如果没有数据库开发商的配合,其实现难度相对较大。此外,对那些希望通过ASP获得服务的企业来说,只有在客户端实现加解密,才能保证其数据的安全可靠。
1.常用数据库加密技术
信息安全主要指三个方面。一是数据安全,二是系统安全,三是电子商务的安全。核心是数据库的安全,将数据库的数据加密就抓住了信息安全的核心问题。
对数据库中数据加密是为增强普通关系数据库管理系统的安全性,提供一个安全适用的数据库加密平台,对数据库存储的内容实施有效保护。它通过数据库存储加密等安全方法实现了数据库数据存储保密和完整性要求,使得数据库以密文方式存储并在密态方式下工作,确保了数据安全。
1.1数据库加密技术的功能和特性
经过近几年的研究,我国数据库加密技术已经比较成熟。
一般而言,一个行之有效的数据库加密技术主要有以下6个方面的功能和特性。
(1)身份认证:
用户除提供用户名、口令外,还必须按照系统安全要求提供其它相关安全凭证。如使用终端密钥。
(2) 通信加密与完整性保护:
有关数据库的访问在网络传输中都被加密,通信一次一密的意义在于防重放、防篡改。
(3) 数据库数据存储加密与完整性保护:
数据库系统采用数据项级存储加密,即数据库中不同的记录、每条记录的不同字段都采用不同的密钥加密,辅以校验措施来保证数据库数据存储的保密性和完整性,防止数据的非授权访问和修改。
(4)数据库加密设置:
系统中可以选择需要加密的数据库列,以便于用户选择那些敏感信息进行加密而不是全部数据都加密。只对用户的敏感数据加密可以提高数据库访问速度。这样有利于用户在效率与安全性之间进行自主选择。
(5)多级密钥管理模式:
主密钥和主密钥变量保存在安全区域,二级密钥受主密钥变量加密保护,数据加密的密钥存储或传输时利用二级密钥加密保护,使用时受主密钥保护。
(6) 安全备份:
系统提供数据库明文备份功能和密钥备份功能。
1.2对数据库加密系统基本要求
(1) 字段加密;
(2) 密钥动态管理;
(3) 合理处理数据;
(4) 不影响合法用户的操作;
(5) 防止非法拷贝;
1.3数据库数据加密的实现
使用数据库安全保密中间件对数据库进行加密是最简便直接的方法。主要是通过系统中加密、DBMS内核层(服务器端)加密和DBMS外层(客户端)加密。
在系统中加密,在系统中无法辨认数据库文件中的数据关系,将数据先在内存中进行加密,然后文件系统把每次加密后的内存数据写入到数据库文件中去,读入时再逆方面进行解密就,这种加密方法相对简单,只要妥善管理密钥就可以了。缺点对数据库的读写都比较麻烦,每次都要进行加解密的工作,对程序的编写和读写数据库的速度都会有影响。
在DBMS内核层实现加密需要对数据库管理系统本身进行操作。这种加密是指数据在物理存取之前完成加解密工作。这种加密方式的优点是加密功能强,并且加密功能几乎不会影响DBMS的功能,可以实现加密功能与数据库管理系统之间的无缝耦合。其缺点是加密运算在服务器端进行,加重了服务器的负载,而且DBMS和加密器之间的接口需要DBMS开发商的支持。
在DBMS外层实现加密的好处是不会加重数据库服务器的负载,并且可实现网上的传输,加密比较实际的做法是将数据库加密系统做成DBMS的一个外层工具,根据加密要求自动完成对数据库数据的加解密处理。
采用这种加密方式进行加密,加解密运算可在客户端进行,它的优点是不会加重数据库服务器的负载并且可以实现网上传输的加密,缺点是加密功能会受到一些限制,与数据库管理系统之间的耦合性稍差。
数据库加密系统分成两个功能独立的主要部件:一个是加密字典管理程序,另一个是数据库加解密引擎。数据库加密系统将用户对数据库信息具体的加密要求以及基础信息保存在加密字典中,通过调用数据加解密引擎实现对数据库表的加密、解密及数据转换等功能。数据库信息的加解密处理是在后台完成的,对数据库服务器是透明的。
按以上方式实现的数据库加密系统具有很多优点:首先,系统对数据库的最终用户是完全透明的,管理员可以根据需要进行明文和密文的转换工作;其次,加密系统完全独立于数据库应用系统,无须改动数据库应用系统就能实现数据加密功能;第三,加解密处理在客户端进行,不会影响数据库服务器的效率。
数据库加解密引擎是数据库加密系统的核心部件,它位于应用程序与数据库服务器之间,负责在后台完成数据库信息的加解密处理,对应用开发人员和操作人员来说是透明的。数据加解密引擎没有操作界面,在需要时由操作系统自动加载并驻留在内存中,通过内部接口与加密字典管理程序和用户应用程序通讯。数据库加解密引擎由三大模块组成:加解密处理模块、用户接口模块和数据库接口模块。
❷ 请问数据库要如何保密
1、思路:在需要加密字段的表中,增加对应的加密后的密文字段。
例如表users中有字段salary需要加密,则增加新字段encrypted存放加密后的内容,而原salary的内容设为0值或者删除。
2、具体来说:编写PL/sql代码,主要是产生密钥和提供加密解密的function,其中加密解密的function调用Oracle8i提供的数据加密包:dbms_obfuscation_toolkit。
从而使数据得到加解密。
3、测试案例:
(1)、新建了一个SWING的单屏幕,在SF_POST_QUERY_OF_EACH_ROW()方法中调用Oracle已经建立好的function,对解密字段进行解密之后,再显示屏幕相应的字段上。
(2)、当进行insert或者update存盘,在SF_POST_DATABASE_COMMIT()方法中,调用加密function进行加密,然后存入数据库。
4、遇到的问题:
(1)查询的时候,由于在SF_POST_QUERY_OF_EACH_ROW()方法中解密后,又往屏幕中字段进行了set动作,导致屏幕的状态改变,最终导致屏幕存盘后会出现数据错误。
(2)这样做的效率比较低,因为每次都要在Java程序里调用解密,存盘时调用加密。
Oracle规定,不能对trigger的触发表进行操作。
还有,如果用自治事务去实现,同样在update动作的时候会造成dead lock发生。
❸ 数据库中怎样创建加密的存储过程
可以例用Oracle 自带的Wrap工具实现,此工具在$ORACLE_HOME/BIN目录下,具体如下
1、设置字符集环境变量
set NLS_LANG=CHINESE_CHINA.ZHS16GBK
2、创建一个存储过程文件
在E:\下创建test.sql文件,内容如下:
create or replace procere test1(i in number) as
begin
dbms_output.put_line(' 输入参数是'||to_char(i));
end;
3、加密
c:\> cd %ORACLE_HOME%\BIN
c:\>wrap iname=e:\test1.sql
PL/SQL Wrapper: Release 8.1.7.0.0 - Proction on Tue Nov 27 22:26:48 2001
Copyright (c) Oracle Corporation 1993, 2000.All Rights Reserved.
Processing test1.sql to test1.plb
4、运行test1.plb
sqlplus /nolog
SQL>conn TEST/TEST@db01
SQL> @e:\a.plb
过程已创建。
5、运行存储过程
SQL> set serveroutput on
SQL> execute test1(1);
输入参数是1
PL/SQL 过程已成功完成。
6、查看存储过程的代码
SQL> select name,text from all_source where type='PROCEDURE' and name='TEST1';
结果:看不到其原码
❹ 数据库中怎样创建加密的存储过程
可以例用Oracle
自带的Wrap工具实现,此工具在$ORACLE_HOME/BIN目录下,具体如下
1、设置字符集环境变量
set
NLS_LANG=CHINESE_CHINA.ZHS16GBK
2、创建一个存储过程文件
在E:\下创建test.sql文件,内容如下:
create
or
replace
procere
test1(i
in
number)
as
begin
dbms_output.put_line('
输入参数是'||to_char(i));
end;
3、加密
c:\>
cd
%ORACLE_HOME%\BIN
c:\>wrap
iname=e:\test1.sql
PL/SQL
Wrapper:
Release
8.1.7.0.0
-
Proction
on
Tue
Nov
27
22:26:48
2001
Copyright
(c)
Oracle
Corporation
1993,
2000.All
Rights
Reserved.
Processing
test1.sql
to
test1.plb
4、运行test1.plb
sqlplus
/nolog
SQL>conn
TEST/TEST@db01
SQL>
@e:\a.plb
过程已创建。
5、运行存储过程
SQL>
set
serveroutput
on
SQL>
execute
test1(1);
输入参数是1
PL/SQL
过程已成功完成。
6、查看存储过程的代码
SQL>
select
name,text
from
all_source
where
type='PROCEDURE'
and
name='TEST1';
结果:看不到其原码
❺ 一个好的数据库加密系统一般应满足哪些方面的要求
我认为,至少需要满足下面4个方面的要求。
1、保证数据库系统的整体性能没有明显下降
众所周知,数据库系统的数据处理性能对整个业务系统的整体性能表现有决定性的作用,在某些场合,数据库必须保证处理能力维持在某个较高水平才能满足业务需要。另一方面,数据库加密系统是一个对数据库中数据进行加密保护的应用系统,在数据从业务系统存储到数据库时要对数据进行加密,这个过程中明文数据需要被加密成密文,在数据由数据库中被读取出来传递到业务系统时要对数据进行解密,这个过程中密文需要被解密成明文。加密和解密是个根据一定的算法逻辑进行循环运算的过程,这个过程对CPU会产生一定的消耗,会影响数据库的性能。
数据库加密系统可以有多种技术路线来实现,业界已经验证和使用的技术路线包括应用系统加密、前置代理加密、后置代理加密、表空间透明数据加密、文件系统加密和磁盘加密。其中应用系统加密和前置代理加密技术会极大地影响数据库性能,仅适用于小量数据加密场景;后置代理加密技术在某些场景上也会大幅影响数据库性能,使用场景有明显限制;所以,好的数据库加密系统应该尽量使用后三种技术路线来实现。
2、保证数据安全
保存在数据库中的数据是用户的资产,因此,任何一个数据库加密系统都需要保证在有密钥的前提下能够对由自己加密的数据进行无损解密。因此,一个好的数据库加密系统应该具备密钥备份和恢复功能,以便于在加密机故障不可用时能够快速搭建新的加密机环境;另外,如果数据库加密系统提供了独立的工具或接口来实现加密机故障时用户数据的解密,则是更好的选择。
3、应用完全透明
数据库系统是为业务系统提供数据服务的,一个好的数据库加密系统应该对应用系统具备完全的透明性,这种透明性主要表现在:(1)部署数据库加密系统时,应用系统不需要做任何改造,即使是连接字符串都不需要修改;(2)在部署了数据库数据库加密系统后,数据库内部的存储过程、用户自定义函数、触发器、SQL代码段等可执行对象及主外键关系、各种索引、默认值、Check约束等均可以正常使用,也不需要做任何改变;(3)数据库自身的外围管理工具、第三方数据库工具等在部署数据库加密系统后仍然可以正常使用。
4、高可用性
数据库加密系统自身应具备高可用能力,可以以主备或多机的方式提供数据库加密服务,当其中的一台加密机发生故障时,其它加密机应可能快速接管加密服务,保证数据库系统和用户业务系统的可用性。
❻ 关于oracle数据库加密的函数
Oracle 提供两种加密方式:
a)加密 API 例如包 和 dbms_crypto 使用这些包,可以构建我们自己的基础架构,对数据进行加密。 这种方法的灵活性最强,但是构建和管理却相当复杂。
b)透明的数据加密是 Oracle 数据库 ;使用该特性后,就不必手动进行密码管理了。
数据库管理密码,但是正如名称所指,加密是透明的——数据仅仅以加密的方式存储而已。在Oracle10g中出现了dbms_crypto替代了之前的dbms_obfuscation_toolkit,DBMS_CRYPTO增加了若干新的加密算法、哈希算法。
DBMS_CRYPTO还撤销了对于public组的执行权限。