论数据安全
在信息极度膨胀的当今社会,人们对信息的依赖程度越来越紧密,因此对信息系统中的数据的可靠和信息的安全要求也越来越高。本文着重对以计算机、网络传输等为载体的信息链作简要阐述,对如何保证其安全提供一些方法。(对
SQL Server2005
)
SQL Server 2005
有不同的版本:企业版、标准版、开发版、工作组、移动版和学习版。
SQL Server 2005
比
SQL Server 2000
有许多增强的功能。
一、
安全性的增强
二、
Transaction-SQL
增强
三、
面向开发人员的功能增强
四、
管理能里的增强
五、
可用性的增强
首先介绍数据安全性的几个重要方面:
1
:
SQL Server
服务器本身的配置有载体安全配置性和相关安全配置。
2
:用户
3
:存储(解决数据冗余问题)
4
:网洛传输的安全性
5
:数据的加密技术
下面我们具体阐述数据的管理机制:
载体安全性
:
1.
最新补丁
2.
完全的文件系统
3.
使用组策略或注册表加强安全性
4.
安装正版的杀毒软件
相关的安全配置:
1
.物理安全性
2
.网络安全性
3
.数据库安全性
4
.对数据进行加密
物理安全性
:
不要不相关的人接触就可以了(自己的理解,嘿嘿)
网络安全性
:关闭不要的网络服务
数据库安全性
又分为用户安全
.
储存安全
.
网络安全
.
加密安全
用户管理
两种用户:
1
:
windows
2
:
sql server
用户的身份验证方式
:
1
:
win
验证
2
:混合验证、
主策略
:
1
:密码策略
2
:锁定策略
3
:架构(
schema
)
下面我们用实例来操作验证:
例
1
:首先创建一个
windows
用户
ZS,
只能对
yuangong
表的内容进行
select
权限
1
:创建用户
Net user lt
密码
/add
2
:创建登录
Create login [dc\zs] from windows with default_database=master
3
:成为合法用户
Create user lt for login [dc\zs]
4
:分配权限
Grant select on yuangong to zs
删除
zs
登录
1
:撤销权限
Rovoke select on yuangong from zs
2:
删除用户、
Drop user zs
3
:删除用户
Drop login [dc\zs]
例
2
:再来创建一个
sql server
用户
zs,
只能查看
yuangong
表女生记录
1
:创建登录
Create login zs with paddword=’
密码
’
,
default_database=master
2:
成为合法用户
Create user zs for login zs
3
:配权限
Grant select on yuangong to zs
――所有记录
要想查看女生记录,必须引用视图:
Create view nv
As
Select * from yuangong where
性别
=’
女
’
Grant select on nan to zs
删除用户
zs
操作
1
:删除操作
Revoke select on yuangong from zs
2
:删除用户
Drop user zs
3
:删除登录
Drop login zs
架构:
架构是一组数据库的集合,它包含四个部分:
服务器名、数据库名、用户名、对象
1
、 架构与用户的管理没有从属关系
2
、 创建用户的时候可以指定默认架构,一般都推荐使用这种方法。
3
、 如果不指定,则用户属于DBO,拥有所有的权限
4
、 如果存在架构名,对象名访问对象是一直按在指定架构中查找。如果找不到,则在DBO中查找。
创建架构
Create schema
架构名
指定架构
Grant select schema::
架构名
to
用户名
删除架构
Revoke select schema::
架构名
from
用户名
更改用户的架构
Alter user
用户名
with default_schema=
架构类型
更改对象架构
Alter schema net transfer
架构类型
.
表名
Windows
与
sql server
权限分配
1
:
windows
组分配权限
2
:
sql server
角色分配权限
SQL Server
角色分配权限
角色
:
1
:服务器角色
2
:数据库角色
1
:标准数据库
2
:应用程序
角色管理
角色
定义角色。数据库的权限管理是一项十分艰巨的工作,系统中的用户及应用程序都要有一定的权限集,才能进行工作。对于一个具有诸多表,诸多用户及各种不同职责的应用环境,一旦应用系统改变了,用户的权限也需要相应的改变。基于角色的权限管理较好的解决了这些问题,只需根据部门和企业的安全政策、操作规则划分出不同的数据库角色,通常可以为系统的每个职务定义一个数据库角色,然后根据需要把这些角色授予相应用户,即使某职务的权限发生了改变,也需要简单的该职务相对应的角色的权限,而不必修改该职务的每一个用户的权限。
创建角色
/
删除角色
1:Create role
角色名
/ drop role
角色名
2:sp_addrole
角色名
/ sp_droprole
角色名
数据的存储安全
备份恢复策略
数据备份与恢复是实现信息安全运行的重要技术之一,能保证信息系统因各种原因遭到破坏时,能尽快投入使用。不同的数据库拥有不同的备份恢复方法。一般来说,数据库的备份有导出
/
导入、冷备份、热备份
;
数据库的恢复可以通过磁盘镜像、数据库备份文件和数据库在
线日志三种方式完成
引入在线日志备份的简单概念
:
在线日志备份
,
在线文件日志是在
DBSC
进行安全审计的时候同步生成的,它以文件格式记录所有提交数据库并成功执行的
SQL
语句、用户名、操作时间等相关信息。其作用就是在数据库被意外破坏后,配合数据库服务器端提供的备份策略,对已经恢复到“某一时间点上”数据库,逐条执行在其中记录的数据库操作,以实现数据库服务器的“最近点恢复”。
导出
/
导入
如何与其他数据源之间进行数据的导入与导出
:
导出
:
mysqL> SELECT * FROM AA INTO OUTFILE 'C:\\AA.TXT' FIELDS TERmINATED BY ',' en
closed by '"' lines terminated by '\r\n';
导入:
mysql> load data infile 'c:\\aa.txt' into table aa fields terminated by ',' enclosed by '"'
lines terminated by '\r\n';
备份方式
:
1:
完全备份
:
备份指定数据库中所有内容
Backup database
数据库
to
目的地
2:
差异备份
:
备份的是自完全以后发生更改的内容
Backup database
数据库
to
目的地
with differential
3:
事务日志备份
:
备份的是完全备份
,
差异备份以及事务日志备份以及以后发生更改的内容
Backup log
数据库
to
目的地
恢复模式
:
1:
简单
:
只备份数据文件
2:
大容量日志
:
大容量操作产生的日志不能备份
3:
完全
:
完全支持日志
,
即时点还原
特此声明
:
恢复模式的作用是制约备份方式
权限
权限设计:
仅仅完成用户的初级权限分配。从应用系统上来说,不同的用户可以操作的业务子系统是不同的
;
从数据库服务器上来说,有着相同模块操作权限的不同用户,他们操作表、视图、行列的权限又各不相同,这主要是由他们各自岗位的不同所决定的。使用应用程序的用户应该是数据库管理系统中的普通用户
,
与其在数据库服务器上的身份保持一致
;
应用系统需要按功能划分为不同的业务子系统,用户只能对他有权使用的业务子系统而涉及的数据库对象有相应的使用权限
.
数据灾难;
备份
在当今信息化的时代
,
由于自然灾害的无法抗拒性和突发事故的无发预测性
,
会损失一些重要的数据信息
,
那我们该如何保障这些信息的安全性呢
,
以下我们介绍怎样应对数据灾难
.
异地容灾系统
异地容灾是指在相隔较远的异地,建立两套或多套功能相同的
IT
系统,当主系统因意外停止工作时,备用系统可以接替工作,保证系统的不间断运行。异地容灾中涉及的一个重要概念是数据复制,数据复制的主要目的是确保异地间各个系统关键数据和状态参数的一致。它可分为同步复制和异步复制。
同步复制的工作过程如下:当主系统主机向本地的存储设备发送一个
I/O
请求时,这个请求同时被传送到备份系统的存储设备中,等到两个存储设备都处理完成后,才向主系统主机返回确认信号。这样确保两个存储设备中数据的一致性。但是,当两个系统距离较远或者通讯效率不够时,向容灾系统发送
I/O
请求,会造成主系统明显的延迟,甚至会使主机无法正常工作。
异步复制是指主系统内主机与存储设备间的
I/O
处理与数据复制过程无关,即主机无须等待远端存储设备完成数据复制就开始下一次
I/O
操作。这样主系统与备份系统之间数据复制的通讯效率高,不会影响到主系统内部的处理能力,但是这样可能产生两系统中数据不一致问题。
数据加密策略
数据安全加密具体代码实现
备份主密钥:
backup service master key to file='c:\bak\smk.key' encryption by password='Ccjsj1200'
还原主密钥:
restore service master key from file='c:\bak\smk.key' decryption by password='Ccjsj1200'
创建主密钥加密:
create master key encryption by password='Ccjsj1200'
select * from sys.databases
select * from sys.symmetric_keys
备份主密钥加密口令:
backup master key to file='c:\bak\dmk.bak' encryption by password='Ccjsj1200'
修改删除加密服务:
alter master key drop encryption by service master key
修改增加加密服务:
alter master key add encryption by service master key
open master key decryption by password='Ccjsj1200'
创建非对称密钥:
create asymmetric key asy with algorithm=RSA_2048
关闭主密钥:
close master key
删除主密钥:
drop master key
还原主密钥:
restore master key from file='c:\bak\dmk.bak' decryption by password='Ccjsj1200' encryption by password='Ccjsj1200'
*************
证书
***********************
创建证书:
create certificate cert1 encryption by password='Ccjsj1200' with subject='text',start_date='06-02/2009',expiry_date='06-02-2010'
create certificate cert2 with subject='test',start_date='06-02-2009',expiry_date='06-02-2012'
select * from sys.certificates
删除证书:
drop certificate cert1
修改证书密码:
alter certificate cert1 with private key (decryption by password='Ccjsj1200',encryption by password='Ccjsj1200')
备份证书:
backup certificate cert1 to file='c:\bak\mycert.cer' with private key
(file='c:\bak\mypvt',decryption by password='Ccjsj1200',encryption by password='Ccjsj1200')
修改证书移除私密:
alter certificate cert1 remove private key
alter certificate cert1 with private key (file='c:\bak\mypvt',decryption by password='Ccjsj1200',encryption by password='Ccjsj1200')
删除证书:
drop certificate cert1
create certificate cert2 from file='c:\bak\mycert.cer' with private key
(file='c:\bak\mypvt',decryption by password='Ccjsj1200',encryption by password='Ccjsj1200')
声明证书:
declare @a varchar(100),@b varbinary(max)
set @a='sql server easy'
set @b=encryptbycert(cert_id('cert1'),@a)
select @b
select cast(decryptbycert(cert_id('cert1'),@b,N'Ccjsj1200')as varchar(200))
drop certificate cert1
**********
非对称密钥
**************
create asymmetric key asy with algorithm=RSA_2048 Encryption by password='Ccjsj1200'
create asymmetric key asy1 with algorithm=RSA_2048 Encryption by password='Ccjsj1200'
select * from sys.asymmetric_keys
alter asymmetric key asy with private key (decryption by password='Ccjsj1200',encryption by password='Ccjsj1200')
操作系统:
sn.exe -k c:\bak\df.key
create asymmetric key asy1 from file='c:\bak\df.bak' encryption by password='Ccjsj1200'
drop asymmetric key asy1
drop asymmetric key asy1 remove private key
create asymmetric key asy1 from file='c:\bak\df.key' encryption by password='Ccjsj1200'
声明非对称密钥:
declare @a varchar(100),@b varbinary(max)
set @a='dufei'
set @b=encryptbyasymkey(asymkey_id('asy'),@a)
select @b
select cast(decryptbyasymkey(asymkey_id('asy'),@b,N'Ccjsj1200') as varchar(100))
*************
对称密钥
*****************
create symmetric key sym1 with algorithm=AES_256 encryption by password='Ccjsj1200'
open symmetric key sym1 decryption by password='Ccjsj1200'
select * from sys.symmetric_keys
open symmetric key sym1 decryption by password='Ccjsj1200'
alter symmetric key sym1 add encryption by certificate cert1
alter symmetric key sym1 drop encryption by password='Ccjsj1200'
close symmetric key sym1
open....
declare @a varchar(100),@b varbinary(max)
set @a='dufei'
set @b=encryptbykey(key_guid('sym1'),@a)
select @b
select cast(decryptbykey(@b) as varchar(200))
*********************