目前,在数据库中数据存放大多数都是以明文形式存放,要确保这些数据的安全,最有效的办法是对数据进行加密。对存储在数据库内的数据进行加密处理后,各用户的数据由各自所拥有的密钥加密,包括数据库管理员在内的其他用户都无法对获得的信息进行正常解密,从而保证了用户信息的安全。那么我们今天就来讲一下SQL Server 2005数据是如何加密的?
一、SQL Server 2005的数据安全
SQL Server 2005将数据加密算法和密钥管理作为数据库的内在特性,提供丰富的多层次的加密算法来保护它内部的密钥和数据,并能根据用户需求选择不同的加密粒度对数据进行加密。所有密钥或证书都由数据库系统内部管理,图1显示了SQL Sewer 2005采用多层密钥来保护它内部的密钥和数据。
其中,对称密钥适合加解密大量数据,存在密钥交付问题,在SQL SeIver中数据加解密由内部实现,则不存在密钥交付问题。非对称密钥有公,私钥,公钥能公开发布,当需要用加密方式向服务器外部传送数据时,这种加密方式更适合。数字证书可用于验证密钥使用者的身份。它们都可以做为加密数据的密钥,也可以傲为保护其他密钥的密钥,每个密钥也能通过设置密码对自身进行保护。
二、实现加解密数据的访问
下面利用VB语言词用SQL触发器,以数据库中密钥的操作为实例来说明加解密的过程。其中数字证书对对称密钥加密,对称密钥加密用户数据,数字证书由数据库主密钥和自身设置的密码保护。
基本步骤如下:
(1) SQL数据库连接
'数据库连接字符串
Public Function sqIConnecLSrring o As StringsqlConnectString=“Provider-SQLOLEDB.l;
&-”Persist Security Info=False;”
&-“User ID=sa;
PWD=密码;
lnitial Catal08=EncryptionDB;”
&-”Data Sourctcp:192.168.99.4,1026"
End Function
(2)建立密钥体系
在第一次用密钥加密数据时,需要由用户在数据库中建立相关密钥,在此例中建立数字证书CeIt_Gy和对称密钥Sym_Gy,其中数字证书用于加密对称密钥,数字证书本身由密码'guoHK.123’进行保护。
Set CNN=New ADODB.Connection
CNN.Open sqlConnectString
’建立数字证书并用密码保护
SqICERT=" CREATE CERTIFICATE Cert_Gy ENCRYPTION;
BY PASSWORD='guoHK123' WITH SUBJECI' = 'cert en-cryptlion by password', START_DATE -'2009 -01 -01;
EX-PIRY_DATE=-2009-12-31 "
Cnn.Execute sqICERT
'建立对称密钥由数字证书加密
sqISYM="CREATE SYMMETRIC KEY Sym_Gy WITH ALGORITHM=DES ENCRYPTION BY CERTIFICATE Cert_Gy"
Cnn.Execute sqISYM
(3)数据加密存储
先打开对称密钥Sym_Gy,使用加密函数EncryptByKey()对数据进行加密保存到数据库,然后关闭对称密钥。主要语句如下:
'打开对称密钥Sym_Gy
Cnn.Execute”OPEN SYMMETRIC KEY Sym_Gy DE-CRYly兀ON BY CERTIFICATE Cert_Gy With PASSWORD= 'guoHK.123'"
'使用对称密钥Sym_Gy对输人数据进行加密存人数据库
SQL=” INSERT INTO test(Loguser,psw,note)VALUES”&_
"("'& Textl&竹,'EncryptByKcy (Key_GUID('Sym_Gy,)"&Text2&",),”&_
"EncryptByKey(Key_GUID('Sym_Gy,) ," &Text3&"7""
Cnn.Execute SQL
'关闭Sym_Gy对称密钥
Cnn.Execute”CLOSE SYMMETRIC KEY Sym_Gy”
(4)读取解密数据
当用户需要读取数据时,打开对称密钥Sym_Gy,用解密函数decryptbykey()进行解密数据读取出明文,最后关闭对称密钥,主要语句如下:
'打开对称密钥
Cnn .Execute”OPEN SYMMETRIC KEY Sym_Gy DE-CRYPTION BY CERTIFICATE Cert_Gy With PASS-WORD='guoHK.123,"
Set Rs=New ADODB.Recordset
'从数据库的表中读取数据解密
Rs.Open"select loguser,cast (decryptbykey (psw) as var-char (20)) as psw,
cast (decryptbykey (note) as varchar(20)) as note from test " , Cnn, adOpenStatic, adLockBatchOptimistic
'关闭Sym_Demo对称密钥
Cnn.Execute”CLOSE SYMMETRIC KEY Sym_Gy"
从图2中看到,从VB实例中输入的数据,被用户生成的对称密加密保存在数据库中,直接读取的是乱码,使用用户生成的对称密钥解密后则能正常读出明文。
我们利用SQL Sewer 2005提供的丰富的加密算法进行数据的加解密存储,减少了用户在编程方面对数据库安全及密钥的管理等负担,对程序设计本身影响小,提高了用户数据的安全性。但也还存在一些问题和不足,如大量的数据文件加密导致存储空间增加,数据本身的操作性下降,数据加解密过程是在数据库中完成,在网络则是以明文传输等。但不管怎样,通过调用SQL Server 2005的内置加密特性,给大量使用数据库的用户提供一个方便的安全存储空间,最大限度地保证数据的存储安全。
小知识之SQL
SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。