随着因特网的日益扩大、数据库技能的成熟。网络数据库的安全性疑问显得日益主要。当今的网络数据库更多是互联的、多级的,不同安全级别的数据库,因此,数据库的安全性不仅涉及到数据库之间的安全性,更多的是涉及到一个数据库中多功能的安全性。理想数据库的安全性主要从多个方面来考虑:
一 通过典型的网络防御设计方案-------背靠背模型来防止 入侵数据库,
二 服务器载体的安全性,
三 服务器配置的安全性 。
一网络外层防御设计的安全性
外层的安全性威胁最主要是来自病毒的侵犯,对此,采用防、杀、管相结合的综合管理办法,采用VPN技能构建数据库系统访问的虚拟专用网来保证网络接入的安全性和数据传输的安全性,通过软硬件防火墙技能,实现网间隔离和网段隔离,从而确保系统免受病毒等的非法入侵。
二服务器载体的安全性
操作系统是数据库系统运行的平台,为数据库系统提供一定程度的安全保卫。目前操作系统平台大多数是Windows server 2003和unix,安全级别都很好,平台的安全性主要体现在操作系统安全策略、安全管理策略、数据安全等。其中操作系统安全包括密码策略、用户锁定策略、审核策略、ipsec 、用户权限指派、加密数据的恢复代理等等。
三服务器配置的安全性
(一) 用户的访问控制
在SQL2000中只能通过SQL SERVER验证和SQL SERVER 、Windows验证,而SQL2005中在SQL2000的基础上新增了密码策略,更好的实现了用户访问的安全性。
1通过增强密码的强度来保证安全性
在beijing服务器上建立一个Windows 用户登录
Create login [beijingmary] from windows with default_database=master
建立一个强制实施密码策略的SQL用户
Create login mary with password=’Ccjsj1200’ must_change,default_database=master,check_exp iration=on, check_policy=on
通过下面的SQL语句可以查看所有登陆的口令策略:
Select name , is_policy_checked , is_exp iration_checked from sys.sql_logins
执行结果如下:
Is_policy_checked中的值为1表示该列上运用强制策略,is_exp iration_checked的值为1表示运用了强迫口令过期
若想使刚建立的用户运用复杂性口令,但不强迫口令有过期时间,可运用 :alter login zhangsan with check_exp iration=off
若强迫口令过期,可运用 : alter login zhangsan with check_exp iration=on
2 禁用一些不常用的账户
如果SQL SERVER账户被黑客用来攻击数据库实例,那么禁用该账户就可以防止 黑客通过该账户执行 攻击,如禁用zhang san ,可以运用:alter login zhangsan disable
3限定指定用户对数据库的访问权限
(1)如指定用户mary 对ITET数据库只有 权限
在命令提示符下建立用户:net user mary Ccjsj1200 /add
然后在服务器上限定访问
Create login [Beijingmary] with password=’Ccjsj1200’ from windows with default_database=master
Use itet
Create user mary from login [Beijingmary]
Grant on itet to mary
(2) 通过建立角色来管理用户的访问权限
A 建立角色: create role 角色名
B 在角色中添加用户:sp_addrolemember 角色名,用户名
C显示角色中用户的信息:sp_helprolemember 角色名
D 分配权限: grant on 角色名 to 用户名
E 删除角色中的用户:sp_droprolemember 角色名,用户名
F 删除角色:drop role 角色名
(二)数据存储的安全性
数据库的存储安全主要体现在数据的备份和恢复,数据库的备份有分为两种:硬件级的和软件级的。硬件级的备份是指通过添加硬件设备来冗余而保证系统的连续运行,软件级的备份是将数据保存到其他介质中。
软件级的备份:运用命令执行 备份:
建立备份的设备exec 数据库名.dbo.sp_addmpdevice @devtype=’disk’, @logicalname=’itetbak’,@physialname=’c:sql2005itet.bak’
或者是 sp_addmpdevice ‘disk’,’itetbak’,’c:sql2005itet.bak’
1完全备份
Backup databse 数据库名 to 备份目的地
2 还原
Restore database 数据库名from 备份目的地
3 差异备份
Backup database 数据库名 to备份目的地 with differential
4 查看备份状态
Restore headeronly from 备份设备
5 事务日志备份
Backup log 数据库名 to 备份目的地
硬件级的备份:通过数据库群集、数据库镜像、数据库复制、数据库日志传送等发式来达到数据库的正常运行。
(三)通过对数据的加密来确保数据传输的安全性
1口令加密:是个基本的数据加密技能,也是最弱的一种,它采用用户提供的口令字符串执行 加密
2 对称加密::运用单一的密钥对数据执行 加密和解密,我们也可理解为一个“暗号”
3非对称加密:它是最强的一种加密技能,因为它采用不同的密钥执行 加密和解密,结合证书来实现。在一般情况下不运用这种加密技能对数据量大的数据执行 加密,除非传输的数据安全性比操作数据的性能。
建立非对称密钥的语法如下:
Create asymmetric key asym_key_name
[authorization database_principal_name]
{
WITH ALGORITHM = {RSA_512 RSA_1024 RSA_2048}
}
ENCRYPTIONBY PASSWORD = ‘PASSWORD’
:: =
File =’path_to_strong-name_file’
Executable file =’path_to_executable_file’
Assembly assembly_name
从语法中可以看出,一般可以采用指定加密算法的要领来建立非对称密钥,也可以采用从夫已经存在的文件中加载的要领建立非对称密钥,可以运用的加密算法有512位的RSA、1024位的RSA、2048位的RSA算法。
下面我们建立一个名为BBS的非对称密钥
Use itet
Go
Create asymmetric key bbs
With algorithm = rsa_512
Encryption by password = ‘fe34&*$PO2hs’
可以从视图sys.asymmetric_keys中查到该非对称密钥:
Select * from sys.asymmetric_keys
也可从SQL SERVER Management studio 对象阅读器中依次展开【数据库】【itet】【安全性】【非对称密钥】中看到非对称密钥
在建立非对称密钥之后,我们来看看如何 用该密钥对bbs执行 加密。在SQL2005中运用 Encryptbyasymkey()加密和Decryptbyasymkey()解密数据
语法如下:
Encrybyasymkey ( asym_key_id, {‘cleartext’ @cleartext})
Dncrybyasymkey(asym_key_id, {‘ciphertext’ @ciphertext} [ ,’asym_key_password’])
其中:asym_key_id 是数据库中非对称密钥的id
Cleartext:是运用非对称密钥加密的数据字符串
@cleartext 可以是类型为var 、、 nvar、n、w等变量,包含了非对称密钥的加密数据
Ciphertext 是运用非对称密钥加密的数据字符串
@ciphertext 可以是类型为var、、nvar、n、w等变量
Asym_key_password: 是用于加密数据库中非对称密钥的密码
不管是加密还是解密都用到了asym_key_id这个参数,即非对称密钥的id,这个可以通过asymkey_id()产生。语法如下:
Asymkey_id(‘asym_key_name’) 通过非对称密钥的名字来返回非对称密钥的id
下面我们就以员工的工资来测试
加密:
Intsert into yuangong values (1,’zhanglijie’,’gongchengbu’,
encryptbyasymkey(asymkey_id(‘bbs’),’5000’))
解密:
id,uname,bumen,convert(var(20),
decryptbyasymkey(asymkey_id(bbs),gongzi,
cast(fe34&*$PO2hsas nvar))) as gongzi from dbo.yuangong
where id=1
三 防止 SQL注入
SQL注入主要是指黑客或恶意用户在运用 程序不知道的情况下通过运用 程序来对SQL数据库执行恶意代码来侵害数据库从而达到他们想要的结果。如对数据库的增、删、改等操作,我们可通过对命令
Or --、having --等命令的封锁来减少危害。