关于数据库的安全性 , 是广大 DBA 们的所关注的 , 但是要想做到绝对的安全几乎是不可能的 , 那么要怎么能让我们的数据库达到一个比较安全的级别呢 ? 下面我们就来讨论一下数据库的安全性 .
实现数据库安全有一个典型的安全架构 , 如图
关于数据库的安全性_第1张图片
 
这种安全架构是最典型的 , 也是大部分公司通用的架构 . 关于硬件问题当然是选最好的 , 就不多说了 .
一、数据库服务器的安全主要包括
1. 载体安全性:主要包括安装最新的补丁,(注意:并不是所有最新的补丁都要安装,要考虑一下安装这个补丁以后是否会产生冲突);杀毒软件(这个不用说大家也知道吧);安全的文件系统;注册表和组策略。
2. 物理安全性:这个要看你们公司的实力了
3. 网络安全性。
二、数据库本身的安全设置包括
1. 用户访问的安全性
2. 数据存储安全性
3. 网络传输的安全性
4. 数据加密
数据库本身的安全设置是我主要讨论的
1.      用户访问安全性
SQL Server 中用户访问的验证方式主要有两种,一种是 WINDOWS 集成验证,另一种是混合验证。 点击属性
 
关于数据库的安全性_第2张图片
 
在安全性中可以选择验证方式
关于数据库的安全性_第3张图片
 
修改数据库管理员的口令,安全性——登录名——右键单击 sa ——选择属性
关于数据库的安全性_第4张图片
 
这里就可以修改了,当然密码最好复杂,越复杂安全性就越高。
关于数据库的安全性_第5张图片
 
最后一个就是创建用户并且给他分配权限了,创建的用户不能给他全部的权限,那样对数据库来说就太危险了。
我们直接用命令来创建好了。
先创建一个 windows 用户
关于数据库的安全性_第6张图片
 
这样就创建好了,下一步是在 SQL Server 中创建这个 zhangjie 这个用户的登录账户了。
关于数据库的安全性_第7张图片
 
我们可以为用户指定数据库,也就是当他登录数据库的时候,他只能看到给他指定的那个数据库,这样就大大增加了数据库的安全性。
 
想知道这步操作是否成功,打开数据库— yg —安全性—用户,我们可以看到 zhangjie 这个用户已经出现了,说明这步操作成功
关于数据库的安全性_第8张图片
 
下面来为用户分配权限
分配权限的基本语法是这样的: grant 权限 on 对象名 to 用户名
我这里就给他分配一个最基本的查看权限好了。
 
接下来我们来登录一下 zhangjie 这个用户,由于我们创建的是 WINDOWS 用户,所以我们在登录的时候需要注销,然后用 zhangjie 登陆
关于数据库的安全性_第9张图片
 
我们来试验一下 zhangjie 这个用户的权限,可以看到查看这个表,是没什么问题了
关于数据库的安全性_第10张图片
 
我们来创建一个表试试,呵呵,应为没有权限被拒绝了
关于数据库的安全性_第11张图片
 
既然可以创建 WINDOWS 用户来访问 SQL ,我们当然也可以在数据库中直接来创建用户
这边创建用户需要在查询中来用命令创建。直接来看实例好了
 
我们已经可以看到用户已经被创建了出来
关于数据库的安全性_第12张图片
 
接下来就是为MX指定数据库了
关于数据库的安全性_第13张图片
 
下面来分配权限,这回分配一个查看和更新的权限好了
关于数据库的安全性_第14张图片
 
这样就可以了,在这里就暂且不试验了,大家自己可以试验一下,绝对没问题的,呵呵。注意:里登陆的时候就不用换用户了,直接在数据库上用混合验证来登录就行了
 
删除用户
1. 撤销权限,
语法是这样的: revoke 权限 on 对象名 ( 也就是表明 ) from 用户名
2. 删除登录名
语法: login 登录名
3. 删除用户
Drop user 用户名   例如: drop user zhangjie
注意 : 我们在删除用户之前一定要先撤销权限,如果不先撤销权限的话是不能删除用户的
关于用户访问的安全性,还有一点不得不说的东西,那就是密码策略
用组策略来设置,在 cmd 中输入   gpedit.msc 就会弹出组策略编辑器
关于数据库的安全性_第15张图片
 
在上图中我们可以看到,在 密码策略 中可已设置,这个自己设置到自己认为安全的程度就好了。而 账户锁定策略 我个人比较喜欢,这个是专门防止别人来猜密码而设定的,大家也可以按照自己的喜好来定了
关于数据库的安全性_第16张图片
 
试验一下,在连续 3 次输错密码以后 ~ ~,成功了
关于数据库的安全性_第17张图片
 
角色
关于 角色 我们也要说一下,创建 角色 需要在数据库中来创建,在该数据库下—安全行—角色;分为 数据库角色 应用程序角色
关于数据库的安全性_第18张图片
 
创建角色
语法: create role 角色名
 
向角色中添加用户 ( 就拿 zhangjie 这个用户来说吧 )
语法: exec sp_addrolemember ‘ 角色名 ’,’ 用户名
鼠标右键 DB —属性,我们可以看到, zhangjie 这个用户已经加入了角色 DB
关于数据库的安全性_第19张图片
 
角色分配权限
语法: grant 权限 on 对象名 to 角色名
我给 角色 DB 分配了一个 修改 员工表的权限,这个角色内的成员也同时拥有了这个权限
 
来试验一下,把张三的性别改成女好了。
关于数据库的安全性_第20张图片
 
成功了,呵呵。
最后让我们来删除角色中的用户并且删掉角色,删掉角色之前要先删掉角色内成员才可以
删掉角色成员
语法: sp_droprolemember ‘ 角色名 ’,’ 用户名
关于数据库的安全性_第21张图片
关于数据库的安全性_第22张图片
可以看到,执行命令以后, zhangjie 这个用户已经从角色中删除了。
 
删除角色
语法: drop role 角色名
关于数据库的安全性_第23张图片 
         删除完成!
 
 
关于应用程序角色, 应用程序角色 是特殊的数据库角色,用于允许用户通过特定应用程序获取特定数据。应用程序角色不包含任何成员,而且在使用它们之前要在当前连接中将它们激活。激活一个应用程序角色后,当前连接将丧失它所具备的特定用户权限,只获得应用程序角色所拥有的权限。
稍微说一下语法
创建: create application role 角色名 with password=’ 密码
分配权限: grant 权限 on 角色名 to 用户名
使用角色:sp_setapprole [@rolename =] <角色名>,
[@password =] {Encrypt N'密码}|'密码'
[,[@encrypt =] '<加密选项>']这一段做的不够严谨,请见谅!
删除: drop application role 角色名

               
架构管理
这个也是用户访问安全性的最后一个环节
早期版本表示对象:服务器名.数据库名.用户名.对象名
2005表示对象是这样的:服务器名.数据库名.架构名.对象名
这里不得不说一下架构的好处:架构会让你的数据库运行流畅,维护简单,并有合理的备份体系。让你的工作事半功倍。
注意:1.用户与架构没有从属关系
            
2.对象建议制定属于某个架构
            
         3.如果某个对象没有指定默认架构,则默认为DBO
            
         4.表示AB(用户),直接查找A架构,如果A架构没有,则查找DBO
 
创建架构
            
架构在数据库下—安全性—架构
语法:create schema 架构名
我创建了一个名字是test的架构
关于数据库的安全性_第24张图片
 
 
创建一个属于test架构的表
         
语法:create table sales.表名
         
分配权限
         
语法:grant 权限 on sckema::架构名 to 用户名
         
更改用户架构
         
语法:alter user 用户名 with default_schema=架构名
         
删除架构
         
语法:drop schema 架构名
         
更改对象架构
         
语法:alter schema  新架构名 transfer 原架构名.表名
         
好了,关于用户访问的安全性到这里就说完了,下面来看第二部分
         
二、数据存储安全性
        
数据存储分RAID存储,存储柜,光纤通道存储柜和SAN四种
         
要说到存储安全性,就不得不说数据库备份
SQL中备份分为四种
            
完全备份:备份指定数据库的所有内容。
差异备份:备份上一次完全备份以后发生更改的内容
            
事务日志备份:备份上一次完全备份、差异备份以及事务日志备份以后发生更改的内容
            
文件和文件组备份:备份单个的文件或文件组。现在已经基本不用了,因为现在CPU的处理速度很快,
                  完全备份也用不了太多时间,并且完全备份是最安全的,所以不推荐用这种备份。
            
备份路径:有两种,一种是自己指定路径,另一种是备份在备份设备中。
            
先来做一个备份设备好了
            
在服务器对象中—备份设备—右键 新建备份设备

            
             关于数据库的安全性_第25张图片
            
我们给备份设备取个名字,路径用默认的就好,因为是实验环境,没有磁带

         
          关于数据库的安全性_第26张图片
         
好了这样我们就多了一个备份设备 testbak

         
          关于数据库的安全性_第27张图片
         
完全备份的语法:backup database 数据库名 to 备份目的地
         
下面我要对yg这个数据库进行完全备份,我们先指定一个路径好了
         
backup database yg to disk=c:\backup\yg1.bak’(名字可以自己指定)
关于数据库的安全性_第28张图片
备份到备份设备中跟备份到指定路径语法是一样的都是:
backup database 数据库名 to 备份设备名
执行命令之后可以在备份设备中找到我们刚刚做的备份,选择媒体内容就看到了 
关于数据库的安全性_第29张图片
还原
语法:restore database 数据库名 from 备份目的地
我们把yg这个数据库删了先,然后再还原出来 

         
          关于数据库的安全性_第30张图片
         
接下来就要还原了,我直接从还原设备中还原的
关于数据库的安全性_第31张图片
 
可以看到,yg这个数据库已经还原出来了。
            
差异备份语法:backup database 数据库名 to 备份目的地 with differential
            
注意:前面说过了差异备份的特点,就是备份上一次完全备份以后发生更改的内
            
容。所以要想做差异备份,先要在我们目前的这个数据库做一些更改才行。
            
往员工表中插入一些记录好了,王五是我新添加的
            

         
          关于数据库的安全性_第32张图片
         
开始备份

         
          关于数据库的安全性_第33张图片
         
备份完成,完成以后
              
继续删除yg,删除yg
              
先来查看一下 备份状态,这边也需要一个命令
              
restore headeronly from testbak
             

         
          关于数据库的安全性_第34张图片
         
关于第三列的那个15,解释一下,1代表完全备份,5代表差异备份
             
下面开始还原
             
要注意:我们需要先做一次完全还原以后,再做差异还原。
             
语法:restore database yg from 数据库名with file=1,norecovery
             
restore database yg from 数据库名with file=2,recovery
             
file=1file=2 说的是这两个备份在备份设备中的序号
             

         
          关于数据库的安全性_第35张图片
         
还原完成了,我们的数据库又回来了
              

         
          关于数据库的安全性_第36张图片
         
事务日志备份和还原
            
语法:backup log 数据库名 to 备份目的地

              
               关于数据库的安全性_第37张图片
              
做完这次备份以后,我们在数据库发生更改以后要再进行一次事务日志备份
              
注意:事务日志备份是备份上一次完全备份、差异备份以及事务日志备份以后发
              
生更改的内容。
如果你之前做了完全备份、差异备份和事务日志备份,那么你在还原的时候要按
              
顺序依次还原各个备份。

             
              好了,我要说的就是这些了。
             

             
              第一次写博客,不太会用这个东西,所以写的比较乱,请大家原谅。