SQL-Server数据库安全管理

转自:http://blog.chinaunix.net/u3/112561/showart_2218234.html

以SQL-Server2005为例来说一下关于数据库安全管理方面的知识(因为我学的就是SQL-Server2005)。SQL Server 2005主要从以下几个方面来保证数据库安全管理的:
1.SQL Server 2005的安全机制。
2.设置数据库权限。
3.数据库访问审核。
4.屏蔽SQL Server常见的漏洞。下面我们了解一下以上各个方面的详细信息:
一、SQL Server 2005 的安全机制:
    SQL Server 2550的安全机制主要包括以下五个方面:
1.客户机的安全机制:
客户机的安全机制是指:用户必须能够登录到客户机,然后才能使用SQL Server 2005应用系统或客户机管理工具来访问数据库。对于使用Windows系统的客户来说,它主要涉及的是操作系统的安全,主要是Windows账号的安全(这个意思就是保证你的电脑系统的安全,也就保证了SQL Server 2005的第一道防线)。
2.网络传输的安全机制:
网络传输的安全一般采用数据的加密和解密技术来实现,但加密的SQL Server会使网络速度变慢,所以对安全性要求不高的网络一般都不采用加密技术。
3.服务器安全机制:
服务器安全机制是指:当用户登录服务器时,必须使用一个账号(也称为登录账号)和密码,这个账号和密码是服务器上的账号和密码,服务器会按照不同的身份验证方式来判断这个账号和密码的正确性。
4.数据库的安全机制:
任何能够登录到服务器的账号和密码都对应着一个默认的工作数据库。SQL Server对数据库级的权限管理采用的是“数据库用户”的概念。
5.数据库对象的安全机制:
用户通过前面四道防线后才能访问数据库中的数据对象,对数据对象能够做什么样的访问称为访问权限。常见的访问权限包括数据的查询、更新、插入和删除。
二、设置数据库服务器的访问权限
    SQL Server的安全性是建立在认证和访问许可两种安全机制上的。其中认证是指用来确定登录SQL Server的用户的登录账户是否正确,以此来验证其是否有连接SQL Server的权限。用户登录数据库的合法身份有两种:Windows的用户或组、SQL Server登录用户。
1.SQL Server的验证模式:
SQL server有两种身份验证模式:Windows身份验证模式和混合验证模式(就是WINDOWS和SQL SERVER验证模式)。
(1).Windows身份验证模式:
    Windows身份验证模式是通过Windows用户账号直接连接SQL Server服务器,Windows用户或组被映射到SQL Server的登录用户。在该模式下用户只需要通过Windows身份验证就可以直接连接到SQL Server服务器,而不用考虑SQL Server服务器本身。这种身份验证模式适用于域环境下。
(2).SQL Server和Windows混合身份验证模式:
   在这种混合模式下,既可以用Windows用户账号直接登录SQL Server服务器,也可以使用SQL Server用户账号来登录SQL Server服务器。当然使用SQL Server身份验证模式时必须先创建SQL Server用户。这种模式适用于工作组环境下。
注意:因为Windows98不支持Windows身份验证,所以当SQL Server运行在Windows 98环境下时,就只能使用混合模式。还有就是当我们改变了SQL Server的验证模式时,就必须重新启动SQL Server服务。
     Windows身份验证模式与SQL Server身份验证模式相比有以下优势:
》用户访问SQL Server时速度更快,不用输入用户名和密码。
》可以利用Windows账户策略来直接进行管理,在安全方面比SQL Server身份验证模式更加安全。
》提供了更多的功能,比如:口令复杂度、口令最小长度、账户锁定等。
    我们可以通过打开“SQL Server Management Studio”连入数据库后选择系统默认有的那个综合选项右击“属性”——“安全性”选项中来设置SQL Server的身份验证模式。当我们修改了身份验证模式后一定要重启服务(当然系统会也会提示你重新启动服务)。选种默认数据库右击选择“重新启动”后,SQL Server的身份验证模式就修改了!然后断开连接重新连接时有两个选项“Windows身份验证模式”与“SQL Server身份验证模式”。
2.设置登录账户:
    可以通过“SQL Server Management Studio”来创建和管理登录账户,默认的QL Server是用Windows身份验证模式,SQL Server的登录账户无法登录。只能建立SQL Server登录账户后才能使用SQL Server账户登录。当然要使用SQL Server账户登录,就必须把身份验证模式改为混合模式。下面介绍一下SQL Server中创建登录账户的方法:
    其实在SQL Server中创建登录账户的方法有两种:一是Windows身份验证模式的登录名,另一种是SQL Server身份验证模式的登录名。Windows身份验证模式的登录名首先得在系统中存在这个账户才行,不然的话不可以创建。假如系统中存在这个账户,那么直接输入“NETBIOS名称/用户账号”或点击“搜索”来建立。SQL Server身份验证模式的登录名就得自己建立一个用户名,并且输入密码及设置相应的策略来创建 。在建立的过程中会有些别的选项,比如:服务器角色、用户映射、安全对象、状态等。后面我们会一一介绍各个选项的意义。
    建立登录账户的操作是:选择默认数据库下面的“安全性”右击选择“新建”——“登录”来创建。

 
3.服务器角色的概念:
    服务器角色(也称做固定服务器角色)是执行服务器级管理操作的权限的集合。我们可以简单的把它理解成“Windows系统中的组”。它跟“Windows系统中的组”是一样的作用。只不过称呼不同罢了!-_-!固定服务器角色及其描述如下表:(或者你可以到“安全性”下的“服务器角色”选项中查看)。

服务器角色 

 描述

Sysadmin 可以执行SQL Server上的任何活动,任何具有这种角色成员身份的人都是服务器上的SA。值得注意的是,Windows的Adminsitrators组被自动映射到该角色中,为提高安全性,建议把Administrators组Sysadmin角色中删除。
Dbcreator 可以创建和更改数据库。
Serveradmin  可以更改服务器范围的配置选项和关闭服务器,该角色成员所控制的功能对于服务器的性能会产生较大的影响。
Securityadmin 管理和审核登录账户(例如:管理登录名,读取错误日志以及创建数据库许可权限的登录名等)。
Processadmin  可以终止SQL Server长时间运行的进程。 
Setupadmin  配置复制和链接服务器。
Diskadmin  用于管理磁盘文件。 
Bulkadmin  可以运行Bulk Insert语句 
   注意:链接服务器可以使SQL Server对远程服务器上的数据源执行命令。Bulk Insert语句主要是用来实现SQL Server的大数据量文本文件的批量导入。
    我们在实际生活中,可以根据自己工作的实际情况来运用这些个角色来为用户分配数据库服务器权限。打开服务器角色配置页的方法是:默认数据库下的“安全性”选项中的“登录名”。然后选择你要为哪个用户配置服务器角色,然后选择用户右击“属性”来打开。打开后选择第二项“服务器角色”来为用户配置服务器角色权限。
二、新建数据库用户:
    在建立了SQL Server登录账户以后,需要授予用户或组许可,使他们能够在数据库中执行任务。登录账户用于访问SQL Server实例,数据库用户则用于访问数据库。要想访问某个数据库,就必须在这个数据库上建立相对应的数据库用户。
    实际上数据库用户是映射到登录账户上的。也就是当我们新建一个登录名时,就可以把它映射到一个数据库里,成为这个数据库的数据库用户。建立一个数据库用户的具体步骤如下:
    首先建立一个登录名——然后把这个登录名映射到你想要建立数据库用户的数据库中(当然你首先得有你自己的数据库)。下面是建立一个数据库DB上的一个数据库用户的步骤:
1.首先建立自己的数据库:

2.然后新建登录名(我这里是使用的Windows用户,直接搜索找到用户就OK了):
 
3.把登录账户映射到数据库DB让其成为数据库DB的数据库用户:

4.然后就可以到DB数据库下面的“安全性”——“用户”里面就可以找到你映射的数据库用户了!
如果有多个人对某个数据库具有相同的权限的时候,我们可以直接在AD中新建一个组,然后把这些个用户加入到组里,最后到SQL Server服务器上新建一个登录名,新建时候输入“域名中"."前面的部分\组名”(例如:域名是abc.com的话,那么输入时候就输入“abc\组名”)。新建好后,这个组中的用户就都可以登录SQL Server数据库了。
三、数据库角色:
    数据库角色的作用是为数据库用户设置对某个数据库的权限,而数据库角色又分为固定数据库角色和用户定义数据库角色。固定数据库是一组SQL Server 预定义的数据库角色,具有数据库级别的管理权力,用来完成常用的数据库任务。
1.固定数据库角色有以下几种:
 
固定数据库角色 

 说明

db_owner  可以执行所有配置和维护活动,还可以删除数据库
db_securutyadmin  可以修改角色成员身份和管理权限 
db_accessadmin   可以为Windows登录名、组和SQL Server登录名添加或删除数据库访问权限 
db_backupoperator  可以备份数据库 
db_datareader     可以从所有用户表中读取所有数据 
db_datawriter      可以在所有用户表中添加、删除或更改数据 
db_ddladmin      可以在数据库中运行任何数据定义的语言命令 
db_denydatareader   不能读取数据库内用户表中的任何数据 
db_denydatawriter    不能添加、修改或删除数据库内用户表中的任何数据 
public  维护默认的权限  
               
    注意:PUBLIC角色是特殊的固定数据库角色,特点是:捕获数据库中用户的所有默认权限、所有用户和角色或组默认属于public角色、无法将用户和组或角色指派给它,因为默认情况下它们即属于该角色、不能被删除。为public角色授予权限时必须非常小心,因为一个小小的错误可能导致用户非法访问数据库。
2.用户自定义数据库角色:
    当固定服务器角色不能满足要求时,就可以自己创建数据库角色,定义一组用户具有相同的权限。可以使用SQL Server Management Studio的对象资源管理器创建用户定义数据库角色。为数据库设置权限的步骤如下:
(1).打开你新建的数据库下面的“安全性”选项下的“角色”里的“数据库角色”来设置数据库权限。
然后你想让你的用户拥有什么权限就把他加入到哪个数据库角色中。然后这个用户就拥有了相应的权限。比如把个用户加入到db_owner角色中。
四、数据库访问审核:
    审核可以帮助跟踪并阻止系统中未经授权的用户行为。对那些具有高特权但却干坏事的管理员或者用户进行审核,对保护系统十分有用。一个好的审核系统允许只对那些重要的事件进行过滤,因此用户不会淹没在海量的信息中。所有数据平台均在不同程度上提供审查功能。
下面来说一下SQL Server安全审核的设置:
首先打开数据库服务器的“属性”——“安全性”里的“登录审核”选项来设置数据库访问审核。根据自己的实际情况来设置那些选项。比如你是要审核“登录失败”的还是“登录成功”的或者是“登录失败和成功”都进行审核的。当这些设置好后,你就可以用一个错误的登录名或正确的登录名来登录一下试试审核启动没有。你可以在Windows系统中的“事件查看器”里面找到审核的内容。
五、屏蔽SQL Server常见漏洞:
1.修改SA密码。
    因为SA是SQL Server默认的超级管理员,所以一定要确保SA密码的安全性。最好是把SA密码设的复杂点,如果有必要可以把SA的用户名也修改了。
2.删除或禁用不必要的用户:
    系统中包含的默认用户,往往因为用户名的公开,成为黑客攻击的目标。所以安全的做法是应该将这些公开的用户删除或禁用后重建。比如说:默认的Administrators组就可以直接删了或禁用。
3.删除危险的存储过程:
    为什么要删除不必要的存储过程呢?因为有些存储过程很容易被人利用,用来提升权限或进行破坏。主要有以下几种存储过程:
(1).执行操作系统命令的存储过程xp_cmdshell。
(2).操纵OLE自动化对象的存储过程。
(3).注册表访问的存储过程。
(4).文件操作类存储过程。
(5).进程管理类存储过程。
(6).任务管理类存储过程。
上面这几种存储过程因为我也不怎么懂所以在这里不详细介绍了,你们可以看我另一篇文章“SQL高级注入使用之存储过程”(
http://blog.chinaunix.net/u3/112561/showart_2223533.html )这是我从我们老师那里转的^_^。有兴趣的可以去看看。
4.关闭不必要的网络连接功能。
    SQL Server 提供外围应用配置器单一的界面,减少外围应用,停止或禁用不必要的服务或连接。外围应用的减少使得对系统的攻击途径减少,有助于提高安全性。使用“外围应用配置器”可以启用、禁用、开始或停止SQL Server2005安装的一些功能服务和远程连接。打开“外围应用配置器”的步骤是:“开始”——“程序”——“Microsoft SQL Server 2005”——“配置工具”——“SQL Server外围应用配置器”来打开“SQL Server外围应用配置器”。打开后自己就可以配置了。
5.配合防火墙过滤指定端口访问:
    默认情况下,SQL Server2005会侦听TCP1433端口,并将1433UDP端口用于客户端与服务器间的协议。因此,也为攻击者提供了大量入侵机会,所以应该结合防火墙来限制对端口的访问。使用SQL Server配置管理器可以通过更改默认端口、配置命名实例来侦听同一端口,也可以隐藏端口。
6.禁用不必要的协议。
7.加密数据(也就是通过证书等加密方法来加密数据来保证数据安全)。
8.定期安装补丁。
    好了,这一节就完了。。。真累-_-!。

你可能感兴趣的:(SQL-Server数据库安全管理)