关于数据库的安全性

  • 格式:doc
  • 大小:569.50 KB
  • 文档页数:17

关于数据库的安全性

关于数据库的安全性,是广大DBA们的所关注的,但是要想做到绝对的安全几乎是不可能的,那么要怎么能让我们的数据库达到一个比较安全的级别呢?下面我们就来讨论一下数据库的安全性.

实现数据库安全有一个典型的安全架构,如图

这种安全架构是最典型的,也是大部分公司通用的架构.关于硬件问题当然是选最好的,就不多说了.

一、数据库服务器的安全主要包括

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角色名

架构管理

架构:(schmea)

在 SQL Server 2005 中,架构和创建它的数据库用户不再关联,完全限定名(fully-qualified name)现在包含4个部分:server.database.schema.object

用四点表示把表示:服务器名、数据库名、用户名、对象。

1、 架构与用户的管理没有从属关系

2、 创建用户的时候可以指定默认架构,一般都推荐使用这种方法。

3、 如果不指定,则用户属于DBO,拥有所有的权限

4、 如果存在架构名,对象名访问对象是一直按在指定架构中查找。如果找不到,则在DBO中查找。

对于架构特点的理解小节如下:

1.一个架构中不能包含相同名称的对象,相同名称的对象可以在不同的架构中存在。

2.一个架构只能有一个所有者,所有者可以是用户, 数据库角色, 应用程序角色。

3.一个用数据库角色可以可以拥有一个默认架构,和多个架构。

4.多个数据库用户可以共享单个默认架构。

5.由于架构与用户独立,删除用户不会删除架构中的对象。

创建架构命令:create schema 架构名

将表放入架构中:create table 架构名.表名(姓名,年龄,………)

给架构分配权限:grant 权限 on schema::架构名 to 用户名

更改用户架构:alter user 用户名 with defaule_schema=架构名

显示当前用户:select user

增加角色:sp_addrole 角色名

加入用户:sp_addrolemember 角色名 用户名

查看角色中的现有用户:sp_helprolemember 角色名

把角色加入某个架构:alter authorization on schema::架构名 to

角色名

创建架构

架构在数据库下—安全性—架构

语法:create schema 架构名

我创建了一个名字是test的架构

创建一个属于test架构的表

语法:create table sales.表名

分配权限

语法:grant 权限 on sckema::架构名 to 用户名

更改用户架构

语法:alter user 用户名 with default_schema=架构名

删除架构

语法:drop schema 架构名

更改对象架构

语法:alter schema 新架构名 transfer 原架构名.表名