以下是SQL 可信奈计算的具体目标
在产品的设计与测试阶段减少潜在的安全问题
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

通过提供工具和指挥手册的方式帮助用户对正在使用的系统进行保护,;漏洞检测。***防御,系统恢复和维护
通过文档和定期交流。将最近的安全信息告知客户 。帮助他们维护SqL 的安全性和完整性。
还引进了安全改进和新的安全特性。分为以下的几个范围。
(1)       控制用户对服务器的访问
(2)       禁止服务和限制服务配置
(3)       减少新特性遭受***的表面积
SQL的安全机制
(1)       客户机的安全机制
(2)       网络传输的安全机制
(3)       服务器的安全机制
(4)       数据库的安全机制
(5)       收据对象的安全机制
网络传输的安全一般采用收据的加密和解密技术实现,但加密的SQL会使网络速度变慢。所以对安全行不高的网络一般都不采用加密技术。
任何能够登录到服务器的账号密码都对应着一个默认的工作数据库。SQL对数据库级 的权限管理采用的是数据库用户的概念
用户通过前面的四道防线后才能访问数据库中的数据对象,对数据对象能够做什么样的访问称为访问权限。
常见的访问权限包括数据的查询,更新。插入和删除。
设置数据库权限
SQL的安全性是建立在认证和访问许可两种机制之上,
其中认证是指用来确定登录SQL的用户的登录账号和密码是否正确。以此来验证其是否具有连接SQL的权限。用户登录数据库的合法身份有两种:Windows 的用户或组,SQL 登录账户。

 

设置数据库的访问权限
1、  SQL的验证模式
Windows 身份的验证模式  最安全
最适用于只在部门访问数据库情况
通过Windows 用户账号连接SQL服务器。Windows 用户或组被映射到SQL 的登录账户,用户只要通过Windows 认证就可以连接到SQL,而SQL本身没有必要管理一套登录数据。
混合验证模式:SQL和Windows 身份验证模式
允许用户使用Windows 身份验证或SQL身份验证进行连接
注意:当SQL实例在98 上运行时,必须使用混合模式。因为98不支持Windows 身份认证,
当修改了身份认证模式之后,一定要重新启动SQL服务
Windows 身份的验证模式相对于SQL身份验证模式有以下的优势
用户访问SQL时速度更快。不用输入用户名和密码。
可以利用Windows 系统自身工具和安全策略进行账户管理。在安全方面更加有效,时微软推荐的身份验证模式
提供了更多的功能。例如安全确认和口令加密。审核。口令失败。最小口令长度和账号的锁定。

 

 

 

 

 

首先启动SqlServer 服务 连接
设置身份验证模式
在服务器上属性 <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
完成后需要重新启动服务

 

设置登陆账号
默认的SQL使用Windows身份验证模式,SQL的登录账号无法登录。只能建立SQL登录账户之后才能使用SQL账户登录、如果需要利用创建的SQL账户登录。需要将身份验证模式改为混合模式
注意:不管使用哪种身份验证方式。系统管理员的登录账户SA的密码都不能为空,建议修改sA的用户名。
注意:如果需要创建Windows 登录账户。一定要保证系统中已经创建了这个系统账户。
密码策略包括
强制实施密码策略
强制密吗过期
用户在下策登录时必须更改密码
注意:SQL在这里的密码策略是由操作系统安全性保证的。如果需要实施强制密码策略。一定要保证域或本地策略已经启用了强密码策略。

 

服务器角色的概念
角色划分了服务器角色与数据库角色
服务器角色也称做固定服务器角色是执行服务器级管理操作的权限的集合。这些角色是内置在系统中的,常用管理功能。使管理员可以很方便的给用户授予权限,他们作用域整个的服务器,而不是单独的那个数据库、
不能创建服务器角色、每个角色有一定的权限、登录账户可以添加到服务器角色

 

 

 

 

 

登录名
在指派登录账户到服务器角色中时,应注意以下的几点
不能添加,修改和删除服务器角色
任何已经被指派到服务器角色的登录账户可以添加其他登录账户到这个角色
可以使用对象资源管理器来从服务器角色中去除登录账户

 

 

设置数据库的访问权限
数据库用户概述域创建
数据库用户是映射到登录账户上的
当一个登录账户对应到一个Windows 组时。可以建立一个数据库用户映射到这个登录账户。以使 Windows 组的成员可以访问数据库。此外,还可以为这个Windows组的成员单独建立用户,而不用在新建登录账户。

 

建立一个数据库用户
验证新建地 数据库用户

 

特殊用户
特殊用户时数据库预定义的。在SQL中有两个特殊的用户:DBOGuest
DBO 是数据库的所有者。对该数据库具有所有权限,默认情况下。具有固定服务器角色Sysadmin的成员都自动映射到所有数据库的DBO 用户上,DBO不能被删除,每个数据库都有自己的DBO用户,
Guest 是来宾用户,同样不能被删除,不需要映射任何登录账户。同时他可以代表任何登录账户,只要一个登录账户连接到服务器。那么他对任何数据库都是一个Guest 用户。当数据库中有Guest 用户的时候。就表示任何连接到服务器的登录账户都可以访该数据库。
如果在model数据库中启用了Guest 账户。以后所有新建数据库默认情况都会启用Guest账户。
注意:Guest账户默认的情况下是被禁用的。
Matertempdb 是不能禁用Guest 账户操作的。但是被限制了许可和权限。

 

数据库角色
数据库用户账号对该数据库所具有的权限由该账户所属的数据库角色决定,
SQL提供了两类数据库角色固定数据库角色和用户定义数据库角色
固定数据库角色
是一组SQl预定义的数据库角色。具有数据库级别的管理权力。用以完成常用的数据库任务。
Public角色是特殊的固定数据库角色
捕获数据库中用户的所用默认权限
所用用户,角色或组默认属于Public角色
无法将用户。组或角色指派给他。因为默认情况下他们即属于该角色
不能被删除

 

 

 

 

用户定义数据库角色
添加数据库角色成员

 

角色允许将用户分组。从而更易于将安全设置应用到数据库对象或者服务器,也可以分配权限给角色,然后通过将用户添加到角色或者从角色中删除用户来分配或回收权限。

 

设置数据库的访问权限
一般权限设置都是通过角色和架构来完成的,但是遇到架构里的个别对象的权限需要调整时。可以通过设置数据库对象访问权限来做到。
设置数据库对象的权限
权限用于控制对数据库对象的访问。以及指定用户对数据库可以执行的操作。访问数据资源的唯一方法是被直接授予权限或者通过角色或组的成员间接授予权限。
权限可以被授予,转授权限和拒绝
授予:允许一个数据库用户或角色执行所授权限指定的操作
转授权限:允许将所授权限转授给其他用户
拒绝:拒绝一个数据库用户或角色的特定权限,并且阻止他们从其他角色中继承这个权限。
全部不选择:根据用户所属的数据库角色的权限情况决定该对象的权限
拒绝语句总是优先于授予语句
为表授权
为数据库授权
数据库本身也是对象。为数据库授权时。可以为其授予在数据库中创建其他各种对象的权限。

 

 

数据库访问审核
审核帮助跟踪并阻止系统中未经授权的用户行为。一个好的审查系统允许只对那些重要的事件进行过滤。因为用户不会淹没在海量的信息中。
SQL 通过Windows 安全日志,SQL Profiler 以及触发器来提供审核功能。

 

 

SQL安全审核设置
如果希望有更加严密的审核跟踪。可以启用C2审核跟踪。C2是一个政府安全级别。他保证系统能够保护资源并具有足够的审核能力。C2模式会监视对所有数据库实体的所有访问企图。
注意:c2审核级别会保存大量的事件信息到日志文件里。所以文件大小会增长的特别快。如果日志文件的增长影响 了其他数据文件的存放。会导致数据库停用。所以,使用c2审核级别时一定要慎重。
SQL Profiler是对数据库的事件进行跟踪审查的工具
SQL Profiler 是专做审查和跟踪的工具,不仅可以起到安全审计的作用,。同时起到分析数据库的性能问题的作用,
触发器是SQL数据库提供的一种相应事件触发的存储过程。他能够对某个特定的数据库操作编程,能够起到日志记录。有效性验证和执行额外操作的作用。保证数据的一致性。
屏蔽SQl常见漏洞
修改Sa密码
SaSQL默认的超级管理员,所以一定要确保Sa密码的安全性
删除危险的存储过程
1.      执行操作系统命令的存储过程XP_cmdshell
2.      操纵OLE自动化对象的存储过程
3.      注册表访问的存储过程
4.      文件操作类存储过程
5.      进程管理类过程
6.      任务管理类过程
删除存储过程
Drop PROCEDURE SP_XXX
删除扩展存储过程
EXEC MASTER .. SP_DROPEXTENDEDPROC XP_XXX

 

打开外围应用配置器
选择XP_cmdshell功能

 

 

查看C盘下的结果

 

配合防火墙过滤指定端口访问
默认SQL会侦听1433 端口。并将1443UDP端口用于客户端与服务器间的协议。
禁止不必要的协议
1、  禁止不需要的协议。坚守网络***对象
2、  减少监听网卡和IP地址
3、  改变监听端口

 

加密数据
SQL中支持采用证书的方式来加密数据。
创建证书
create master key encryption by password= 'administrator123'
---加密密码administrator123---
create certificate c1
encryption by password= 'administrator123'
with subject = 'c1 certificate',
start_date='03/08/2009',
expiry_date='03/08/2022';
GO

 

创建测试表,name字段为要加密的列,数据类型为varbinary
create table testB(id int identity(1,1),name varbinary(5000))
注意:加密列的类型必须是varbinary ,因为加密后的数据是类型varbinary
使用加密函数向测试表中写入一条测试数据
insert into testB(name)
select encryptbycert(cert_id('c1'), 'haha')
利用下面的语句来提取加密的数据
select * from testB
利用下面的语句来解密数据
select id ,cast(decryptbycert(cert_id('c1'),name,N'administrator123')as varchar(20)) from testb
说明:decryptbycert 函数的返回类型为varbinary 所以要使用CAST函数将二进制转换为原始类型。Name为字段名,此处也必须是二进制,如果不是要做相应转换。

 

这个加密是比较安全的,每次加密后的二进制数据也并不相同。唯一的缺点是会消耗大量的资源,不适合在大数据量的环境下部署,另外加密后的数据量相对较大,如果是加密后内容过多的话。数据库的增长将会愈加明显。可以根据实施环境选择应用。
定期安装补丁
SQL最新的补丁是SP2