关于数据库的安全性

关于数据库的安全性 , 是广大 DBA 们的所关注的 , 但是要想做到绝对的安全几乎是不可能的 , 那么要怎么能让我们的数据库达到一个比较安全的级别呢 ? 下面我们就来讨论一下数据库的安全性 .
实现数据库安全有一个典型的安全架构 , 如图
关于数据库的安全性_第1张图片
 
这种安全架构是最典型的 , 也是大部分公司通用的架构 . 关于硬件问题当然是选最好的 , 就不多说了 .
一、数据库服务器的安全主要包括
1. 载体安全性:主要包括安装最新的补丁,(注意:并不是所有最新的补丁都要安装,要考虑一下安装这个补丁以后是否会产生冲突);杀毒软件(这个不用说大家也知道吧);安全的文件系统;注册表和组策略。
2. 物理安全性:这个要看你们公司的实力了
3. 网络安全性。
二、数据库本身的安全设置包括
1. 用户访问的安全性
2. 数据存储安全性
3. 网络传输的安全性
4. 数据加密
数据库本身的安全设置是我主要讨论的
1.      用户访问安全性
SQL Server 中用户访问的验证方式主要有两种,一种是 WINDOWS 集成验证,另一种是混合验证。 点击属性
 
 
在安全性中可以选择验证方式
 
修改数据库管理员的口令,安全性――登录名――右键单击 sa ――选择属性
 
这里就可以修改了,当然密码最好复杂,越复杂安全性就越高。
 
最后一个就是创建用户并且给他分配权限了,创建的用户不能给他全部的权限,那样对数据库来说就太危险了。
我们直接用命令来创建好了。
先创建一个 windows 用户
 
这样就创建好了,下一步是在 SQL Server 中创建这个 zhangjie 这个用户的登录账户了。
 
我们可以为用户指定数据库,也就是当他登录数据库的时候,他只能看到给他指定的那个数据库,这样就大大增加了数据库的安全性。
 
想知道这步操作是否成功,打开数据库― yg ―安全性―用户,我们可以看到 zhangjie 这个用户已经出现了,说明这步操作成功
 
下面来为用户分配权限
分配权限的基本语法是这样的: grant 权限 on 对象名 to 用户名
我这里就给他分配一个最基本的查看权限好了。
 
接下来我们来登录一下 zhangjie 这个用户,由于我们创建的是 WINDOWS 用户,所以我们在登录的时候需要注销,然后用 zhangjie 登陆
 
我们来试验一下 zhangjie 这个用户的权限,可以看到查看这个表,是没什么问题了
 
我们来创建一个表试试,呵呵,应为没有权限被拒绝了
 
既然可以创建 WINDOWS 用户来访问 SQL ,我们当然也可以在数据库中直接来创建用户
这边创建用户需要在查询中来用命令创建。直接来看实例好了
 
我们已经可以看到用户已经被创建了出来
 
接下来就是为MX指定数据库了
 
下面来分配权限,这回分配一个查看和更新的权限好了
 
这样就可以了,在这里就暂且不试验了,大家自己可以试验一下,绝对没问题的,呵呵。注意:里登陆的时候就不用换用户了,直接在数据库上用混合验证来登录就行了
 
删除用户
1. 撤销权限,
语法是这样的: revoke 权限 on 对象名 ( 也就是表明 ) from 用户名
2. 删除登录名
语法: login 登录名
3. 删除用户
Drop user 用户名   例如: drop user zhangjie
注意 : 我们在删除用户之前一定要先撤销权限,如果不先撤销权限的话是不能删除用户的
关于用户访问的安全性,还有一点不得不说的东西,那就是密码策略
用组策略来设置,在 cmd 中输入   gpedit.msc 就会弹出组策略编辑器
 
在上图中我们可以看到,在 密码策略 中可已设置,这个自己设置到自己认为安全的程度就好了。而 账户锁定策略 我个人比较喜欢,这个是专门防止别人来猜密码而设定的,大家也可以按照自己的喜好来定了
 
试验一下,在连续 3 次输错密码以后 ~ �� ~,成功了
 
角色
关于 角色 我们也要说一下,创建 角色 需要在数据库中来创建,在该数据库下―安全行―角色;分为 数据库角色 应用程序角色
 
创建角色
语法: create role 角色名
 
向角色中添加用户 ( 就拿 zhangjie 这个用户来说吧 )
语法: exec sp_addrolemember ‘ 角色名 ’,’ 用户名
鼠标右键 DB ―属性,我们可以看到, zhangjie 这个用户已经加入了角色 DB
 
角色分配权限
语法: grant 权限 on 对象名 to 角色名
我给 角色 DB 分配了一个 修改 员工表的权限,这个角色内的成员也同时拥有了这个权限
 
来试验一下,把张三的性别改成女好了。
 
成功了,呵呵。
最后让我们来删除角色中的用户并且删掉角色,删掉角色之前要先删掉角色内成员才可以
删掉角色成员
语法: sp_droprolemember ‘ 角色名 ’,’ 用户名
可以看到,执行命令以后, zhangjie 这个用户已经从角色中删除了。
 
删除角色
语法: drop role 角色名
 
         删除完成!
 
 
关于应用程序角色, 应用程序角色 是特殊的数据库角色,用于允许用户通过特定应用程序获取特定数据。应用程序角色不包含任何成员,而且在使用它们之前要在当前连接中将它们激活。激活一个应用程序角色后,当前连接将丧失它所具备的特定用户权限,只获得应用程序角色所拥有的权限。
稍微说一下语法
创建: 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的架构
 
 
创建一个属于test架构的表 
语法:create table sales.表名 
分配权限 
语法:grant 权限 on sckema::架构名 to 用户名 
更改用户架构 
语法:alter user 用户名 with default_schema=架构名 
删除架构 
语法:drop schema 架构名 
更改对象架构 
语法:alter schema  新架构名 transfer 原架构名.表名 
好了,关于用户访问的安全性到这里就说完了,下面来看第二部分 
二、数据存储安全性 
数据存储分RAID存储,存储柜,光纤通道存储柜和SAN四种 
要说到存储安全性,就不得不说数据库备份
SQL中备份分为四种 
完全备份:备份指定数据库的所有内容。
差异备份:备份上一次完全备份以后发生更改的内容 
事务日志备份:备份上一次完全备份、差异备份以及事务日志备份以后发生更改的内容 
文件和文件组备份:备份单个的文件或文件组。现在已经基本不用了,因为现在CPU的处理速度很快,
 完全备份也用不了太多时间,并且完全备份是最安全的,所以不推荐用这种备份。 
备份路径:有两种,一种是自己指定路径,另一种是备份在备份设备中。 
先来做一个备份设备好了 
在服务器对象中―备份设备―右键 新建备份设备
  
我们给备份设备取个名字,路径用默认的就好,因为是实验环境,没有磁带
  
好了这样我们就多了一个备份设备 testbak
  
完全备份的语法:backup database 数据库名 to 备份目的地 
下面我要对yg这个数据库进行完全备份,我们先指定一个路径好了 
backup database yg to disk=c:\backup\yg1.bak’(名字可以自己指定)
备份到备份设备中跟备份到指定路径语法是一样的都是:
backup database 数据库名 to 备份设备名
执行命令之后可以在备份设备中找到我们刚刚做的备份,选择媒体内容就看到了 
还原
语法:restore database 数据库名 from 备份目的地
我们把yg这个数据库删了先,然后再还原出来 
  
接下来就要还原了,我直接从还原设备中还原的
 
可以看到,yg这个数据库已经还原出来了。 
差异备份语法:backup database 数据库名 to 备份目的地 with differential 
注意:前面说过了差异备份的特点,就是备份上一次完全备份以后发生更改的内 
容。所以要想做差异备份,先要在我们目前的这个数据库做一些更改才行。 
往员工表中插入一些记录好了,王五是我新添加的 
  
开始备份
  
备份完成,完成以后 
继续删除yg,删除yg 
先来查看一下 备份状态,这边也需要一个命令 
restore headeronly from testbak
            
  
关于第三列的那个15,解释一下,1代表完全备份,5代表差异备份 
下面开始还原 
要注意:我们需要先做一次完全还原以后,再做差异还原。 
语法:restore database yg from 数据库名with file=1,norecovery 
restore database yg from 数据库名with file=2,recovery 
file=1file=2 说的是这两个备份在备份设备中的序号 
  
还原完成了,我们的数据库又回来了 
  
事务日志备份和还原
           
语法:backup log 数据库名 to 备份目的地
  
做完这次备份以后,我们在数据库发生更改以后要再进行一次事务日志备份 
注意:事务日志备份是备份上一次完全备份、差异备份以及事务日志备份以后发 
生更改的内容。
如果你之前做了完全备份、差异备份和事务日志备份,那么你在还原的时候要按 
顺序依次还原各个备份。
 好了,我要说的就是这些了。 
 第一次写博客,不太会用这个东西,所以写的比较乱,请大家原谅。 
  
  
  
  
  
  
  
  

你可能感兴趣的:(sql,职场,休闲)