如何保证数据库服务器的安全性

1.使用安全的密码策略
我们把密码策略摆在所有安全配置的第一步,请注意,很多数据库帐号的密码过于简单,这跟系统密码过于简单是一个道理。对于sa更应该注意,同时不要让sa帐号的密码写于应用程序或者脚本中。健壮的密码是安全的第一步!
SQL Server2005安装的时候,如果是使用混合模式,那么就需要输入sa的密码,除非你确认必须使用空密码。这比以前的版本有所改进。
同时养成定期修改密码的好习惯。数据库管理员应该定期查看是否有不符合密码要求的帐号。使用下面的SQL语句:Use master
Select name,Password from syslogins where password is null
2.使用安全的帐号策略。
由于SQL Server不能更改sa用户名称,也不能删除这个超级用户,所以,我们必须对这个帐号进行最强的保护,当然,包括使用一个非常强壮的密码,最好不要在数据库应用中使用sa帐号,只有当没有其它方法登录到 SQL Server 实例(例如,当其它系统管理员不可用或忘记了密码)时才使用 sa。建议数据库管理员新建立一个拥有与sa一样权限的超级用户来管理数据库。安全的帐号策略还包括不要让管理员权限的帐号泛滥。
SQL Server的认证模式有Windows身份认证和混合身份认证两种。如果数据库管理员不希望操作系统管理员来通过操作系统登陆来接触数据库的话,可以在帐号管理中把系统帐号“BUILTIN\Administrators”删除。不过这样做的结果是一旦sa帐号忘记密码的话,就没有办法来恢复了。很多主机使用数据库应用只是用来做查询、修改等简单功能的,请根据实际需要分配帐号,并赋予仅仅能够满足应用要求和需要的权限。比如,只要查询功能的,那么就使用一个简单的public帐号能够select就可以了。创建用户定义的数据库角色,然后分配权限。完成这个步骤最简单的方法是创建一些名字与全局组名字配套的角色。例如对于前面例子中的会计系统,我们可以创建Accounting Data Entry Operators、Accounting Data Entry Managers之类的角色。由于会计数据库中的角色与帐务处理任务有关,你可能想要缩短这些角色的名字。然而,如果角色名字与全局组的名字配套,你可以减少混乱,能够更方便地判断出哪些组属于特定的角色。
3.简化安全管理
SQL Server验证的登录不仅能够方便地实现,而且与NT验证的登录相比,它更容易编写到应用程序里。但是,如果用户的数量超过25,或者服务器数量在一个以上,或者每个用户都可以访问一个以上的数据库,或者数据库有多个管理员,SQL Server验证的登录不容易管理。由于SQL Server没有显示用户有效权限的工具,要记忆每个用户具有哪些权限以及他们为何要得到这些权限就更加困难。即使对于一个数据库管理员还要担负其他责任的小型系统,简化安全策略也有助于减轻问题的复杂程度。因此,首选的方法应该是使用NT验证的登录,然后通过一些精心选择的全局组和数据库角色管理数据库访问。
4.加强数据库日志的记录。
审核数据库登录事件的“失败和成功”,在实例属性中选择“安全性”,将其中的审核级别选定为全部,这样在数据库系统和操作系统日志里面,就详细记录了所有帐号的登录事件。定期查看SQL Server日志检查是否有可疑的登录事件发生,或者使用DOS命令。
findstr /C:"登录" d:\Microsoft SQL Server\MSSQL\LOG\*.*
5.管理扩展存储过程
对存储过程进行大手术,并且对帐号调用扩展存储过程的权限要慎重。其实在多数应用中根本用不到多少系统的存储过程,而SQL Server的这么多系统存储过程只是用来适应广大用户需求的,所以请删除不必要的存储过程,因为有些系统的存储过程能很容易地被人利用起来提升权限或进行破坏。
如果你不需要扩展存储过程xp_cmdshell请把它去掉。使用这个SQL语句:
use master
sp_dropextendedproc 'xp_cmdshell'
xp_cmdshell是进入操作系统的最佳捷径,是数据库留给操作系统的一个大后门。如果你需要这个存储过程,请用这个语句也可以恢复过来。
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
如果你不需要请丢弃OLE自动存储过程(会造成管理器中的某些特征不能使用),这些过程包括如下:
Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty
Sp_OAMethod Sp_OASetProperty Sp_OAStop
去掉不需要的注册表访问的存储过程,注册表存储过程甚至能够读出操作系统管理员的密码来,如下:
Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues
Xp_regread Xp_regremovemultistring Xp_regwrite
还有一些其他的扩展存储过程,你也最好检查检查。
在处理存储过程的时候,请确认一下,避免造成对数据库或应用程序的伤害。
6.使用协议加密
SQL Server 2005使用的Tabular Data Stream协议来进行网络数据交换,如果不加密的话,所有的网络传输都是明文的,包括密码、数据库内容等等,这是一个很大的安全威胁。能被人在网络中截获到他们需要的东西,包括数据库帐号和密码。所以,在条件容许情况下,最好使用SSL来加密协议,当然,你需要一个证书来支持。
7.不要让人随便探测到你的TCP/IP端口
默认情况下,SQL Server使用1433端口监听,很多人都说SQL Server配置的时候要把这个端口改变,这样别人就不能很容易地知道使用的什么端口了。可惜,通过微软未公开的1434端口的UDP探测可以很容易知道SQL Server使用的什么TCP/IP端口了(请参考《深入探索SQL Server网络连接的安全问题》)。
不过微软还是考虑到了这个问题,毕竟公开而且开放的端口会引起不必要的麻烦。在实例属性中选择TCP/IP协议的属性。选择隐藏 SQL Server 实例。如果隐藏了 SQL Server 实例,则将禁止对试图枚举网络上现有的 SQL Server 实例的客户端所发出的广播作出响应。这样,别人就不能用1434来探测你的TCP/IP端口了(除非用Port Scan)。
8.修改TCP/IP使用的端口
请在上一步配置的基础上,更改原默认的1433端口。在实例属性中选择网络配置中的TCP/IP协议的属性,将TCP/IP使用的默认端口变为其他端口。
9.拒绝来自1434端口的探测
由于1434端口探测没有限制,能够被别人探测到一些数据库信息,而且还可能遭到DOS***让数据库服务器的CPU负荷增大,所以对Windows 2000操作系统来说,在IPSec过滤拒绝掉1434端口的UDP通讯,可以尽可能地隐藏你的SQL Server。
10.对网络连接进行IP限制
SQL Server 2005数据库系统本身没有提供网络连接的安全解决办法,但是Windows 2000提供了这样的安全机制。使用操作系统自己的IPSec可以实现IP数据包的安全性。请对IP连接进行限制,只保证自己的IP能够访问,也拒绝其他IP进行的端口连接,把来自网络上的安全威胁进行有效的控制。
11.网络传输安全性
将明文转化为暗文:我们在给SQL申请证书要做到以下几步:
一:首先我们要在我们的计算机中安装证书服务;
开始—设置—控制面板
clip_image002
选择添加删除程序-----添加删除windows组件---------证书服务(弹出如果安装证书服务后,计算机名与于成员身份不能更改了点击是 )
clip_image004
clip_image006
选择 “独立根” 然后点击 下一步
clip_image008
填写 CA服务器的名称 如下图
clip_image010
默认 选择下一步弹出 安装证书服务时必须暂时停止Internet 信息服务 选择 是
clip_image012
系统 开始安装 CA证书服务处 如下图
clip_image014
如下图所示 安装CA服务器 安装完毕
clip_image016
二:为服务器申请证书
打开IE 在地址栏 里输入 HTTP://CA服务器的IP/certsrv 选择“申请一个证书”
clip_image018
在申请一个证书里 选择 “ 高级申请 ”
clip_image020
在高级申请 里 选择 “创建并先向此CA提交一个申请”
clip_image022
在填写 高级证书申请 时 注意两点 第一点是填写 “姓名”时不要添错, 第二点是在密钥选项 里的CSP 选择“Microsoft RSA SChannel Cryptographic Provider” 如下图
clip_image024
clip_image026
三:颁发证书
在CA服务器上 打开证书颁发机构如下图 在开始程序—管理工具—证书颁发机构 双击打开
clip_image028
在打开的证书颁发机构 找到“挂起的申请” 里会看到刚才申请的证书 鼠标右件--所有任务—选择颁发 如下图所示
clip_image030
四:下载并安装证书在次用IE打开 如下图 选择 “查看挂起的证书申请状态”
clip_image032
选择 刚刚 “申请的服务器证书” 双击 进入
clip_image034
选择 “安装此证书” 在弹出的“潜在的脚本冲突” 选择 是
clip_image036
五:给SQL服务器启用加密
在开始—程序—SQL server 2005—配置工具—SQL Server Configuration Manager 如下图
clip_image038
在打开的SQL Server Configuration Manager 里找到“MSSERVER的协议” 鼠标右键选择属性
clip_image040
弹出的MSSQLSERVER的协议属性里在标志里选择 打开服务器实例加密 如下图选择 是
clip_image042
在证书的标签里 选择为SQL服务器申请好的证书 如下图
clip_image044
对sql server服务器进行加密,然后必须重启SQL服务,如下图
clip_image046
完成后我们通过web传输的所有数据全都是通过加密的,即使对方从中间窃取到信息,也完全不用担心,数据库的数据文件不会丢失。
12.数据库存储安全性:做备份
备份分为:完全备份,差异备份,事务日志备份,文件和文件组备份。一般情况不用文件和文件组备份。
备份的目的地:磁盘的一个文件:disk='盘符及文件名';备份设备:先创建备份设备,在应用此设备即可
a:完全备份:备份数据库的所有内容。sql 语句为:
backup datebase 数据库名称 to disk='盘符及文件名'
backup datebase 数据库名称 to 备份设备名
创建一个备份设备:
sp_addumpdevice 'disk','itet_back','f:\backup\itet.bak'
例如:
use itet
create table test
(
编号 char(4),
姓名 varchar(10),
性别 char(2),
年龄 int
)
insert into test values ('0001','张三','男',20)
backup database itet to itet_back
drop database itet
use master
还原数据库:
语法:restore database 数据库名称 from 备份设备
restore database itet from itet_back
select * from itet..test
b:差异备份:备份的是上一次完全备份以后发生的更改的内容,只依赖完全备份
语法:backup database 数据库名称 to 备份设备 with differential
例如:
use itet
insert into test values ('0002','李四','女',29
select * from test
backup database itet to itet_back with differential
还原数据库:
语法:restore database 数据库名称 from 备份设备
use master
restore database itet from itet_back with file=1,norecovery
restore database itet from itet_back with file=3,recovery
select * from itet..test
c:事务日志备份:备份的是上一次备份以后发生更改的内容
语法:backup log 数据库名称 to 备份设备
insert into itet..test values ('0004','赵六','男',41)
huan
还原事务日志备份:
语法:restore log 数据库名称 from 备份设备
backup log itet to itet_back
drop database itet
restore headeronly from itet_back
restore database itet from itet_back with file=1,norecovery
restore database itet from itet_back with file=3,norecovery
restore log itet from itet_back with file=4,recovery
select * from itet..test
13.数据库的恢复模型:
简单模型:处于此模型,由只记录数据,不记录操作。
大容量日志记录:不记录大容量操作: "select into" "bulk insert"
完全模型:支持的备份类型最完整。
14.时刻确保你装了最新的服务程序更新包。
15.安装防病毒软件, 要保证数据库的安全,一定要先保证系统的安全,解决系统安全的好办法之一少不了安装防病毒软件,来防止***的***,避免有些病毒使服务器运转缓慢,有效的避免病毒给数据库带来的危害!
16. 物理安全性:数据库服务器的独立存放
数据库服务器的服务一定要独立,不要同时跑多个种类的数据库,防止发生冲突,防止用户通过其他数据库窃取到你另外的数据文件。还要注意的是数据库服务器一定要独立存放,不要跟过多的人接触,最好把服务器放到专门的服务器公司,专门来存放,避免数据文件的丢失。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章