谁能简单介绍下数据库加密

谁能简单介绍下数据库加密,第1张

一、数据加密是什么?

数据库加密技术属于主动防御机制,可以防止明文存储引起的数据泄密、突破边界防护的外部黑客攻击以及来自于内部高权限用户的数据窃取,从根本上解决数据库敏感数据泄漏问题。数据库加密技术是数据库安全措施中最顶级的防护手段,也是对技术性要求最高的,产品的稳定性至关重要。

二、数据库加密的方式有哪些?

目前,不同场景下仍在使用的数据库加密技术主要有:前置代理加密、应用系统加密、文件系统加密、后置代理加密、表空间加密和磁盘加密等,下文将对前四种数据加密技术原理进行简要说明。

1、前置代理加密技术

该技术的思路是在数据库之前增加一道安全代理服务,所有访问数据库的行为都必须经过该安全代理服务,在此服务中实现如数据加解密、存取控制等安全策略,安全代理服务通过数据库的访问接口实现数据存储。安全代理服务存在于客户端应用与数据库存储引擎之间,负责完成数据的加解密工作,加密数据存储在安全代理服务中。

2、应用加密技术

该技术是应用系统通过加密API(JDBC,ODBC,CAPI等)对敏感数据进行加密,将加密数据存储到数据库的底层文件中;在进行数据检索时,将密文数据取回到客户端,再进行解密,应用系统自行管理密钥体系。

3、文件系统加解密技术

该技术不与数据库自身原理融合,只是对数据存储的载体从 *** 作系统或文件系统层面进行加解密。这种技术通过在 *** 作系统中植入具有一定入侵性的“钩子”进程,在数据存储文件被打开的时候进行解密动作,在数据落地的时候执行加密动作,具备基础加解密能力的同时,能够根据 *** 作系统用户或者访问文件的进程ID进行基本的访问权限控制。

4、后置代理技术

该技术是使用“视图”+“触发器”+“扩展索引”+“外部调用”的方式实现数据加密,同时保证应用完全透明。核心思想是充分利用数据库自身提供的应用定制扩展能力,分别使用其触发器扩展能力、索引扩展能力、自定义函数扩展能力以及视图等技术来满足数据存储加密,加密后数据检索,对应用无缝透明等核心需求。

三、数据库加密的价值

1、在被拖库后,避免因明文存储导致的数据泄露

通常情况下,数据库中的数据是以明文形式进行存储和使用的,一旦数据文件或备份磁带丢失,可能引发严重的数据泄露问题;而在拖库攻击中,明文存储的数据对于攻击者同样没有任何秘密可言——如Aul、MyDul等很多成熟的数据库文件解析软件,均可对明文存储的数据文件进行直接分析,并输出清晰的、结构化的数据,从而导致泄密。

数据库加密技术可对数据库中存储的数据在存储层进行加密,即使有人想对此类数据文件进行反向解析,所得到的也不过是没有任何可读性的“乱码”,有效避免了因数据文件被拖库而造成数据泄露的问题,从根本上保证数据的安全。

2、对高权用户,防范内部窃取数据造成数据泄露

主流商业数据库系统考虑到初始化和管理的需要,会设置以sys、sa或root为代表的数据库超级用户。这些超级用户天然具备数据访问、授权和审计的权限,对存储在数据库中的所有数据都可以进行无限制的访问和处理;而在一些大型企业和政府机构中,除系统管理员,以数据分析员、程序员、服务外包人员为代表的其他数据库用户,也存在以某种形式、在非业务需要时访问敏感数据的可能。

数据库加密技术通常可以提供独立于数据库系统自身权限控制体系之外的增强权控能力,由专用的加密系统为数据库中的敏感数据设置访问权限,有效限制数据库超级用户或其他高权限用户对敏感数据的访问行为,保障数据安全。

在SQl2005下自带的函数hashbytes()

,此函数是微软在SQL

SERVER

2005中提供的,可以用来计算一个字符串的

MD5

SHA1

值,使用方法如下:

--获取123456的MD5加密串

select

hashbytes('MD5',

'123456')

;

--获取123456的SHA1加密串

select

hashbytes('SHA1',

'123456')

;有了这个函数可以在sqlserver中为字符串进行加密,但是hashbytes()

函数的返回结果是

varbinary类型,(以

0x

开头

16

进制形式的二进制数据)通常情况下,我们需要的都是字符串型的数据,很多人首先想到的可能就是用

CAST

Convert

函数将varbinary

转换为

varchar,但这样转换后的结果会是乱码,正确转换

varbinary

可变长度二进制型数据到

16

进制字符串应该使用系统内置函数

sysfn_varbintohexstr()(只在sqlserver2005下有),如下所示:select

sysfn_varbintohexstr(hashbytes('MD5',

'123456'))

然后就可以截取需要的部分select

lower(right(sysfn_varbintohexstr(hashbytes('MD5','123456')),32))为md5加密串。

安华金和数据库加密的技术方案主要有三种种:包括前置代理、应用加密和后置代理。前置代理的技术思路就是在数据库之前增加一道安全代理服务,对数据库访问的用户都必须经过该安全代理服务,在此服务中实现如数据加解密、存取控制等安全策略;然后安全代理服务通过数据库的访问接口实现数据在O中的最终存储。

安华金和数据库加密 应用层加密方案的主要技术原理是:

(1) 应用系统通过加密API(JDBC,ODBC,C API等)对敏感数据进行加密,将加密数据存储到Oracle数据库中;

(2)

在进行数据检索时,将密文数据取回到客户端,再进行解密;

(3) 应用系统将自行管理密钥。

后置代理的基本技术路线是使用“视图”+“触发器”+“扩展索引”+“外部调用”的方式实现数据加密,同时保证应用完全透明。

该方案的核心思想是充分利用数据库自身应用定制扩展能力,分别使用其触发器扩展能力、索引扩展能力、自定义函数扩展能力以及视图等技术来满足数据存储加密,加密后数据检索,对应用无缝透明等最主要需求。后置代理方案的核心目标包括:A、实现在数据库中敏感数据的按列加密;B、对应用提供透明的加密数据访问;C、为加密数据提供高效的索引访问;D、实现独立于数据库的权限控制;E、调用国产的加密算法。

目前在国内安华金和的数据库加密产品是最成熟的,已经广泛应用于运营商、中央部委等大型系统上。

对数据加密,限制别人复制拷贝,截图,邮件等方式把数据传送出去,还可用机器绑定码的方式,这也就所有你想加密的数据只有在你这台电脑上查看,其他电脑上也是看不了的,即使硬盘拆下来放到其他电脑上也是看不到的,希望对你有帮助,可能没讲清楚的可以给我回信息。

好像没这东西

你在编程语言中实现把

这种情况我都是用MD5加密

虽然你不想听理论。。。我也懒得写代码。。。

1、把用户的密码用MD5改变成32个字符

2、将这字符串写到数据库里

3、判断密码是否正确的时候,把用户输入的密码在用MD5改变成32个字符、判断这字符串和数据库中字符串是否相同

下面是JAVA的MD5用法

import javasecurityMessageDigest;

public class MD5 {

private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",

"6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };

//将字节数组转换为十六进制字符串

private static String byteArrayToHexString(byte[] b) {

StringBuffer resultSb = new StringBuffer();

for (int i = 0; i < blength; i++) {

resultSbappend(byteToHexString(b[i]));

}

return resultSbtoString();

}

//将字节转换为十六进制字符

private static String byteToHexString(byte b) {

int n = b;

if (n < 0)

n = 256 + n;

int d1 = n / 16;

int d2 = n % 16;

return hexDigits[d1] + hexDigits[d2];

}

public static String MD5Encode(String origin) {

String resultString = null;

try {

resultString = new String(origin);

//MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法

MessageDigest md = MessageDigestgetInstance("MD5");

resultString = byteArrayToHexString(mddigest(resultString

getBytes("GBK")));

} catch (Exception ex) {

}

return resultString;

}

public static void main(String[] args)

{

Systemoutprintln(MD5MD5Encode("admin"));

Systemoutprintln(MD5MD5Encode("密码内容"));

}

}

作为数据库管理员,您可以对数据库进行加密,使别人更难以破译数据库中的数据。可以使用简单加密或高度加密来保护您的数据库。 注意:压缩加密的数据库将从数据库中解除加密。 简单加密简单加密等效于模糊处理,并可使人使用磁盘实用程序难以查看文件以破译数据库中数据。简单加密并不要求用一个密钥来对数据库进行加密。 SQL Anywhere 的早期版本支持简单加密技术。 高度加密对数据库文件采用高度加密技术后,若没有密钥 (口令),就无法对数据库进行 *** 作。它还对包含在数据库及事务日志中的信息进行加密,这样信息就不会通过使用磁盘实用程序查看文件而很容易地被破译。没有密钥,数据则完全无法访问。 所选用于进行高度加密的算法是 AES:它是数据块加密算法,被美国 "国家标准与技术协会 (NIST)" 选作数据库密码的新的 " 高级加密标准"(AES)。 可以与 CREATE DATABASE 语句一起使用 ENCRYPTION 和 KEY 选项来对数据库进行高度加密。同样,数据库管理员也可以使用 dbinit 实用程序不同的选项结合,对数据库进行初始化,并启用高度加密。您还可以使用 "Sybase Central 创建数据库 " 向导来创建高度加密的数据库。与-ek 或 -ep 选项结合使用 dbinit 实用程序可以实现高度加密,并且指明是在提示框中还是在命令提示符处指定密钥。 创建高度加密的数据库 (SQL)1从 Interactive SQL 连接到一个现有的数据库。 2执行包含 ENCRYPTION 和 KEY 选项的 CREATE DATABASE 语句。例如,下面的语句在 C:\ 目录中创建一个名为myencrypteddbdb 的数据库文件。 CREATE DATABASE 'c:\\myencrypteddb' TRANSACTION LOG ON ENCRYPTED ON KEY '0kZ2o52AK#'创建高度加密的数据库 (命令提示符)1在命令提示符下,使用 dbinit 实用程序创建一个数据库。必须 包括下列选项: �6�1-ea:用于指定加密算法。 �6�1-ek 或 -ep:用于指定加密密钥以及希望在命令提示符处 还是在对话框中输入它。 下列命令 (应在一行中输入所有内容)创建一个高度加密的数 据库并指定输入加密密钥作为命令的一部分。 dbinit -ek "0kZ2o56AK#" "myencrypteddbdb"2从命令提示符处启动数据库。 dbeng9 myencrypteddbdb -ek "0kZ2o56AK#"与大多数口令一样,最好选择不容易被猜测的密钥值。我们建议您为密钥选择一个包含 8 到 30 位数字的值,且该值是大写和小写字符、数字、字母以及特殊字符的组合。 注意:一定要在安全的位置存储一份密钥。每次启动或修改数据库时,都需要使用该密钥。丢失了密钥将导致数据库完全无法访问,而无法访问的数据库是无法进行恢复的。

如何在SQL Server数据库中加密数据

在Sql Server 中经常要对存在表中数据加密,比如密码字段,我们可以利用Sql 中自带的加密函数pwdencrypt()来进行加密,加密之后无法解密码,需要使用pwdcompare('原文','密码')对比,如果返回结果为1,表示密码相符,如果为0,表示不符

以上就是关于谁能简单介绍下数据库加密全部的内容,包括:谁能简单介绍下数据库加密、sql server中怎么给数据库表中的用户密码加密、数据库怎么加密等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9812948.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存