第12章 数据库安全管理.docx
《第12章 数据库安全管理.docx》由会员分享,可在线阅读,更多相关《第12章 数据库安全管理.docx(33页珍藏版)》请在冰豆网上搜索。
第12章数据库安全管理
第12章数据库安全管理
【学习目标】
本章将要学习SQLServer安全控制机制、身份验证模式、服务器安全性管理,角色设置与管理,权限管理。
本章学习要点:
◆两种身份验证模式的设置;
◆登录账号的设置与管理;
◆数据用用户账号设置与管理;
◆三类角色的设置与管理;
◆权限管理。
【学习导航】
数据的安全性是指保护数据以防止因非法使用而造成数据的泄密、破坏。
数据库集中存放大量数据并为用户共享,所以数据的安全性显得非常重要。
通过安全有效的设置可以实现用户的合法操作,又能防止数据受到未授权的访问或恶意破坏。
本章主要内容见图12-1所示的学习导航。
图12-1本章内容学习导航图
12.1数据库安全概述
目前,数据库管理系统已成为各行各业组织、机构进行信息管理的主要形式,数据库中存放着大量重要数据,而且为许多最终用户直接共享,使得安全性问题更为突出。
如果有人XX非法侵入了数据库,并查看和修改了数据,将造成重要信息泄密或数据库中数据的完整性和一致性受到破坏,给数据库的合法使用者造成无法弥补的损失和极大的危害,所以数据的安全性对个人和企业来说都是至关重要。
数据的安全性是指创建各种安全机制保护数据库以防止不合法的操作造成数据泄密、更改或破坏。
为了实现数据的安全性,SQLServer提供了有效的安全控制机制:
系统先对用户进行身份验证,合法的用户才能登陆数据库系统;再用检查用户权限的手段来检查用户是否有权访问服务器上的数据,如图12-2。
这种安全控制机制可以有效地防止非法用户入侵SQLServer服务器或不经授权用户对服务器上各种对象非法操作。
图12-2SQLServer安全控制机制
12.2SQLServer2005的安全机制
12.2.1安全控制机制
SQLServer提供的安全控制机制主要有两个阶段的验证。
(1)身份验证阶段。
用户要访问SQLServer2005服务器,SQLServer或操作系统首先对用户进行身份验证。
用户必须以正确的登录账户名和密码,也就是只有通过合法的身份才能登录SQLServer服务器,才能使用、管理SQLServer服务器。
(2)权限验证阶段。
用户以合法身份登录到SQLServer服务器上后,如果想访问服务器上的对象(基本表、数据库、视图、存储过程等),系统还将进一步验证用户是否经过授权具有访问服务器上数据的权限。
12.2.2身份验证模式
在SQLServer2005的用户登录、身份验证阶段,有两种安全模式:
Windows身份验证模式、混合身份验证模式(Windows身份验证和SQLServer身份验证)。
1.Windows验证模式
SQLServer数据库系统通常运行在基于NT构架的Windows操作系统(Windows2000/XP/2003等以上操作系统)上,而这类操作系统,本身就具备管理登录、验证用户合法性的能力。
所以Windows认证模式正是利用这一用户安全性和帐号管理机制,允许在SQLServer中使用WindowsNT操作系统的用户名和口令登录。
当然,SQLServer系统管理员必须把WindowsNT操作系统的帐户映射成SQLServer登录帐户。
在Windows验证模式下,当用户试图登录到SQLServer时,SQLServer数据库系统从WindowsNT操作系统的安全属性中获取登录用户的帐号与密码,并将它们与SQLServer中记录的Windows帐户相匹配。
如果在SQLServer中找到匹配的项,则接受这个连接,允许该用户进入SQLServer。
否则,拒绝该用户的连接请求。
使用Windows验证模式的优点:
(1)用户只要通过Windows的认证就可连接到SQLServer,而不必提交另外的用户登录名和口令密码。
(2)Windows认证模式充分利用了WindowsNT操作系统强大的安全性能及用户帐户管理能力,如安全合法性、口令加密、对密码最小长度进行限制、设置密码期限以及多次输入无效密码后锁定帐户等。
(3)在WindowsNT操作系统中可使用用户组,所以当使用Windows验证模式时,我们可以把用户归入一定的WindowsNT用户组,以便当在SQLServer中对WindowsNT用户组进行数据库访问权限设置时,能够把这种权限传递给每一个用户。
这种方法可以使用户方便地加入到系统中,并消除了逐一为每个用户进行的数据库访问权限设置而带来的不必要的工作量。
【提示】:
尽可能使用Windows身份验证模式以增强SQLServer安全。
2.混合身份验证模式
混合身份验证模式是指用户可以使用Windows身份验证或SQLServer身份验证的模式登录连接SQLServer实例。
实际上混合身份验证模式是在Windows身份验证模式外增加一个用户认证的安全层次。
在该验证模式下,用户首先以SQLServer提供的登录名和密码进行身份验证,SQLServer自己执行认证处理。
如果用户输入的登录信息与SQLServer系统表中(用户的登录帐户信息保存在master数据库中的sysxlogins系统表里)的记录相匹配,则通过验证,允许该用户登录到SQLServer;否则,用户须再用Windows的账户和密码进行身份验证,如果通过验证,则登录成功。
如果SQLServer身份验证和Windows身份验证都不能通过,则拒绝用户的连接请求,登录SQLServer服务器失败。
【提示】
使用混合身份验证模式主要是为了兼容和允许非WindowsNT用户及Internet客户端应用程序连接SQLServer。
3.身份验证模式设置
身份验证模式可以在安装SQLServer2005过程中指定或使用“SQLServerManagementStudio”管理器指定。
对于已经指定了验证模式的SQLServer服务器,也可以进行修改。
设置或修改认证模式的用户必须使用系统管理员或安全管理员帐户。
(一)身份验证模式设置
【案例12-1】将当前SQLServer实例的验证模式由“windows身份验证”改为“SQLServer和Windows身份验证”模式。
(1)启动SQLServerManagementStudio,在【对象资源管理器】中右键单击服务器,选择【属性】,打开【服务器属性】对话框,如图12-3所示。
图12-3【服务器属性】对话框
(2)选择【安全性】选项,更改【服务器的身份验证】为“SQLServer和Windows验证模式”,单击【确定】按扭,完成验证模式的设置,如图12-4所示。
图12-4服务器身份验证设置
【提示】:
修改验证模式后,必须停止SQLServer服务,重新启动后才能使设置生效。
(二)身份验证模式测试
【案例12-2】对当前SQLServer实例的windows身份验证模式测试。
(1)启动SQLServerManagementStudio,在【已注册的服务器】窗口中右键单击当前服务器,选择【属性】命令。
(2)打开【编辑服务器注册属性】窗口,如图12-5所示。
在其【常规】选项卡中的【服务器名称】下拉列表框中选择当前的服务器名称;在【身份验证】下拉列表框中选择要使用的身份验证方式:
“Windows身份验证”或“SQLServer身份验证”,这里选择“Windows身份验证”。
(3)设置完成后,单击【测试】按钮,验证设置是否正确。
(4)测试正确后,单击【保存】按钮,完成身份验证设置。
图12-5〈编辑服务器注册属性〉窗口
【提示】:
如果选择“SQLServer身份验证”,必须输入登录名和密码。
12.3服务器安全性管理
登录数据库服务器的帐户及其权限管理,是SQLServer数据库服务器的安全控制手段。
在SQLServer2005中有两类帐号:
一类是登录到服务器的登陆帐号,它属于服务器的层面,用户登录到SQLServer后,并没有权限对数据库进行操作;另一类是使用数据库的用户帐号和权限。
用户通过身份验证成功登录到SQLServer之后,如果要访问或操作服务器中的数据库资源(数据库、基本表、视图、存储过程、约束等),则必须要有相应的用户帐号和经系统管理员授权后拥有的一定权限。
12.3.1登录帐号创建和管理
1.创建登录账号
【案例12-3】在当前数据库引擎中创建“Windows身份验证”登录账号(对应Windows操作系统中用户fyj)。
(1)启动SQLServerManagementStudio,在【对象资源管理器】中选择服务器,展开【安全性】节点。
(2)右键单击【登录名】,选择【新建登录名】,打开【登录名-新建】对话框。
(3)单击【搜索】按钮,打开【选择用户或组】对话框。
(4)单击【对象类型】,选择“用户”。
(5)单击【高级】按钮,再单击【立即查找】按钮,选择windows用户fyj,如图12-6所示。
(6)选择用户或组后,单击【确定】按钮,返回【登录名-新建】对话框。
(7)选择“windows身份验证”登录名,单击【确定】按钮,就可以创建了与windows用户fyj对应的登录名fyj。
图12-6添加windows用户fyj为登录名
(8)展开第
(2)步骤中的【登录名】节点,即可看到已经创建的用户名。
【提示】
·创建“windows身份验证”登录名时,必须先创建对应的windows用户。
·单击【默认数据库】下拉列表框,选择该用户访问的默认数据库。
·单击【服务器角色】选项卡,可以查看或修改登录名在固定服务器角色中的成员身份。
·单击【用户映射】选项卡,可以查看或修改登录名到数据库用户的映射。
·单击【安全对象】选项卡,可以查看或修改安全对象。
·单击【状态】选项卡,可以查看或修改登录名的状态信息。
【案例12-4】在当前数据库引擎中创建“SQLServer身份验证”(登录名:
sqlfyj,密码:
123456)。
(1)启动SQLServerManagementStudio,在【对象资源管理器】中选择服务器,展开【安全性】节点。
(2)右键单击【登录名】,选择【新建登录名】,打开【登录名-新建】对话框。
(3)在默认的【常规】选项界面中,为【登录名】文本框中输入名称“sqlfyj”,然后选中“SQLServer身份验证”单选按钮,并输入密码“123456”,确认密码。
如图12-7所示。
(4)其他的设置和创建“Windows身份验证”登录名一样。
【提示】
选择“用户在下次登录时必须更改密码”选项,表示每次使用该登录名后都必须更改密码。
但如果操作系统版本不支持“用户在下次登录事必须更改密码”功能,请取消该选项。
图12-7设置SQLServer身份验证登录名
2.查看登录账号
【案例12-5】查看sqlfyj用户的属性,并将登录状态设置为“启用”。
(1)启动SQLServerManagementStudio,在“对象资源管理器”中依次展开【数据库】节点、【安全性】节点、【登录名】节点。
这时可以看到系统创建的默认登录账号及已建立的其他登录帐号。
(2)右键单击登录名sqlfyj,选择【属性】,打开【登录属性】对话框,如图12-8所示。
(3)选择【状态】选项卡,选择【登录】中的【启用】。
●选择【常规】选项卡,可以查看和设置登录名的基本属性;
●选择【服务器角色】选项卡,查看和设置登录名所属的服务器的角色;
●选择【用户映射】选项卡,查看和设置映射到此登录名的用户和数据库角色。
图12-8登录账号属性
【提示】
sa是SQLServer创建的默认的系统管理员登录,该账号拥有最高的管理权限,可以执行服务器范围内所有操作。
3.删除登录名
在【案例12-5】的【登录名】节点中右键单击要删除的登录名,选择【删除】,打开【删除对象】对话框,单击【删除】按钮即可。
12.3.2数据库用户账号及权限
登录账号本身并不提供访问数据库对象的用户权限。
一个合法的登录帐号只表明该帐号通过了Windows认证或SQLServer认证,允许该帐号用户进入SQLServer,但不表明可以对数据库数据和数据对象进行某种操作。
所以当用户通过身份验证连接到SQLServer以后,还必须取得相应的数据库访问权限,才能使用该数据库。
用户对数据的访问权限以及对数据库对象的所有关系都是通过用户帐号来控制的。
数据库用户在定义时必须与一个登录名相关联,一个登录名可以与服务器上的所有数据库进行关联;也就是说,一个登录名可以映射到不同的数据库产生多个数据库用户,而一个数据库用户只能映射到一个登录名。
1.创建数据库用户
【案例12-6】创建与登录名sqlfyj对应的stu数据库用户stufyj。
(1)启动SQLServerManagementStudio,在【对象资源管理器】中依次展开【数据库】节点、要创建用户的数据库【stu】节点、【安全性】节点。
(2)右键单击【用户】,选择【新建用户】。
图12-9【数据库用户—新建】对话框
(3)打开【数据库用户—新建】对话框,如图12-9所示。
(4)输入数据库用户名“stufyj”。
(5)点击登录名输入框右边的按钮,打开【选择登录名】对话框。
选择【浏览】按钮,打开【查找对象】对话框,选择对应的登录名sqlfyj。
(6)根据该用户的权限要求,设置此用户拥有的架构。
(7)根据该用户的权限要求,设置数据库角色成员身份,比如设置为数据库拥有者db_ower。
(8)单击【安全对象】选项,进入【安全对象】界面,添加数据库用户能访问的数据库对象。
(9)单击【确定】按钮,完成数据库用户的创建。
【提示】
·数据库用户必须和一个登录名相关联。
·建立一个数据库用户账号时,要为该账号设置某种权限,该用户账号才能访问操作数据库中的数据,设置权限可以通过为它指定适当的数据库角色来实现。
2.查看数据库用户账号
【案例12-7】查看数据库用户stufyj的账号属性。
(1)启动SQLServerManagementStudio,在“对象资源管理器”中依次展开【数据库】节点、【stu】数据库节点、【安全性】节、【用户】节点。
(2)右键单击【stufyj】,选择【属性】。
(3)打开“数据库-stufyj”对话框,查看和设置数据库用户的属性,如图12-10所示。
图12-10用户stufyj账号属性
3.修改数据库用户权限
修改数据库用户的权限时,可以通过修改该用户账号所属的数据库角色来实现。
(1)启动SQLServerManagementStudio,在【对象资源管理器】窗口中选择服务器,依次展开【数据库】、用户所在的数据库、“【安全性】→【用户】节点。
(2)右键单击目标用户(如stufyj),选择【属性】命令,打开【数据库用户—stufyj】属性窗口,如图12-10。
(3)在【此用户拥有的架构】列表框中和在【数据库角色成员身份】列表框中重新选择既可。
(4)进入【安全对象】选项,修改数据库用户能访问的数据库对象。
(5)单击【确定】按钮,完成数据库用户的修改。
4.删除数据库用户
启动SQLServerManagementStudio,在【对象资源管理器】窗口中选择服务器,依次展开【数据库】→【用户所在的数据库】→【安全性】→【用户】节点。
右键单击用户名,选择【删除】即可。
12.4角色设置与管理
在SQLServer2005中提供了“角色”这个概念,角色实际是授予了一定权限的用户组。
SQLserver管理者可以将某些用户设置为某一角色,这样只需对角色进行权限设置便可实现对隶属于该角色的所有用户的权限设置,大大减少了管理员的工作量。
SQLServer2005中有三类角色:
服务器角色、数据库用户角色、应用程序角色。
12.4.1服务器角色
服务器角色是指根据SQLserver的管理任务以及这些任务相对的重要等级,把具有SQLserver管理职能的用户划分成不同的用户组,每一组所具有的管理SQLserver的权限均已被预定义。
服务器角色适用在服务器范围内,并且其权限不能被修改。
一般仅指定需要管理服务器的登录者为服务器角色成员。
1.预定义服务器角色
SQLSverve2005系统共有8种预定义的服务器角色,如表12-1所示。
表12-1预定义服务器角色
服务器角色
说明
功能描述
Bulkadmin
BULKINSERT操作员
管理大容量数据插入
Diskadmin
磁盘管理员
可以管理磁盘文件
Dbcreator
数据库创建者
可以创建、更改、删除和还原任何数据库
Processadmin
进程管理员
管理在SQLServer中运行的进程
Securityadmin
安全管理员
管理登录名及其属性;可以GRANT、DENY和REVOKE服务器级权限
和数据库级权限,也可以重置SQLServer登录名的密码
Setupadmin
安装程序管理员
可以添加和删除链接服务器,建立数据库复制,管理扩展存储过程。
Serveradmin
服务器管理员
管理SQLServer服务器范围内的配置和关闭服务器
sysadmin
系统管理员
可以在SQLServer中执行任何活动;默认情况下Administrators
组(本地管理员组)的所有成员都是sysadmin角色的成员
【提示】:
用户不能再创建新的服务器角色,只能为角色添加登录成员。
2.设置服务器角色
【案例12-8】使用SSMS,将登录名“sqlfyj”加入到服务器角色“securityadmin”中。
(1)启动SQLServerManagementStudio,在【对象资源管理器】展开【安全性】→【服务器角色】节点。
(2)右键单击【securityadmin】,选择【属性】。
(3)打开【服务器角色属性-securityadmin】对话框,如图12-11所示。
(4)单击【添加】按钮,打开【选择登录名】对话框,从中选择要添加到securityadmin服务器角色的登录名,单击【确定】即可。
(5)如果要删除该角色中的登录名,只要在【角色成员】窗口中选择相应的登录名,然后单击【删除】按钮即可。
图12-11【服务器角色属性-securityadmin】对话框
【提示】
·不能添加和删除服务器角色。
·在将登录添加到固定服务器角色时,该登录将得到与此角色相关的权限。
·不能更改sa登录和public的角色成员身份。
3.查看登录名所属服务器角色
在图12-8登录账号属性中,选择【服务器角色】选项卡,即可查看和设置登录名所属的服务器的角色。
【提示】
·在固定服务器角色属性中可以看到选定服务器角色所包含的登录名。
·在登录名的属性中可以查看该登录名属于哪些服务器的角色。
4.删除服务器角色成员
在图12-11所示的“服务器角色属性”对话框中选择要从该角色中删除的登录者,然后单击【删除】按钮即可。
【提示】:
不能从服务器角色中删除SA登录账号。
12.4.2数据库角色
数据库角色实际上就是具有某些特定的访问数据库或数据库对象的操作权限的用户组。
使用数据库角色的好处是:
通过将用户添加到某个数据库角色中去,可直接为其赋予该角色规定的权限。
此外,通过修改数据库角色的权限可修改隶属于该角色的所有用户的权限。
【提示】
·在同一数据库中,一个用户可属于多个角色。
·数据库角色中可以包括用户以及其他的数据库角色。
·在SQLServer2005中提供了预定义的固定数据库角色,此外,用户也可自定义数据库角色。
1.固定数据库角色
固定数据库角色就是在每个数据库中都存在的系统预先定义好的具有某些特定访问数据库或数据库对象的操作权限的用户组。
系统管理员可以将不同级别的用户加入到这些角色中,固定数据库角色的成员也可将其他用户添加到本角色中。
SQLServer2005提供了10个预定义的固定数据库角色,如表12-2所示。
表12-2SQLSverve中的固定数据库角色
固定数据库角色
描述
Db_owner
在特定的数据库中具有全部活动的权限
Db_accessadmin
具有添加或删除数据库用户、组和角色的权限
Db_securityadmin
可以管理全部权限、对象所有权、角色和角色成员资格
Db_ddladmin
有权添加、修改和删除数据库对象,但无权授予、拒绝或废除权限。
Db_backupoperator
具有备份数据库的权限
Db_datareader
可以查看来自数据库中所有用户表的全部数据。
Db_datawriter
有权添加、更改或删除数据库中所有用户表的数据。
Db_denydatareader
无权查看数据库内任何用户表或视图中的数据。
db_denydatawrirer
无权更改数据库内的数据。
除了以上固定数据库角色外,在SQLServer2005中还有一个特殊的固定数据库角色Public。
每个数据库用户都属于public数据库角色。
Public数据库角色保存在每个数据库中,包括系统数据库和所有用户数据库。
如果想让数据库中的每个用户都能具有某个特定的权限,则将该权限指派给public角色。
同时,如果没有给用户专门授予某个对象的权限,用户默认只能使用public角色的权限。
【提示】
·public数据库角色不能被删除。
·数据库角色是在数据库级别上定义;只能存在于一个数据库中,不能跨多个数据库。
【案例12-9】将数据库用户stufyj添加到stu数据库的固定数据库角色db-owner中。
(1)启动SQLServerManagementStudio,在【对象资源管理器】中依次展开【数据库】节点、【stu】节点、【安全性】节点、【角色】节点、【数据库角色】节点。
(2)右键单击【db-owner】,选择【属性】,如图12-12所示。
(3)打开【数据库角色属性-db-owner】对话框。
(4)单击【添加】按钮,打开【选择数据库用户或角色】对话框,选择【浏览】按钮,选择指定登录名“stufyj”。
(5)单击【确定】按钮,将数据库用户“stufyj”添加到“db-owner”数据库角色中。
【提示】
·在将数据库用户添加到固定数据库角色时,该数据库用户将得到与此数据库角色相关的权限。
·固定数据库角色不能被添加、修改和删除。
图12-12数据库角色
2.自定义数据库角色
如果系统提供的固定数据库角色不能满足要求,用户也可创建自定义数据库角色。
例如,教务管理数据库Teaching对A、B和C三类人员分别建立了不同级别的用户帐户,并且将它们加入三个级别不同的固定数据库角色赋予了不同的权限。
现在,A、B、C三类人员将对数据库中的某一表进行同一特定的操作。
这时,用户可以自定义创建一个数据库角色,将要对该表操作的相应权限赋予该角色,然后再将A、B、C三类人员加入该角色中。
【案例12-10】使用SQLServerManagementStudio,在stu数据库中,创建用户定义数据库角色db-newrole。
(1)启动SQLServerManagementStudio,在【对象资源管理器】中依次展开【