1、安全管理,Page 2/31,概述,做为管理员,您的工作是有效的管理数据库访问,可以通过创建用户登录、配置登录权限和分配角色完成此目标。 管理安全主要目标: 平衡用户对数据库访问需求与需要保护数据防止非授权数据访问之间的矛盾 限制数据库权限以便减少用户执行有害命令或过程(恶意的或意外地)的可能 弥补其他安全漏洞,Page 3/31,SQL Server 2005的安全认证模式,当用户使用SQL Server 2005时,需要经过两个安全性阶段,身份验证阶段和权限认证阶段。 (1)身份验证阶段:用户在SQL Server2005上获得任何数据库的访问权限之前,必须登录到SQL Server 20
2、05上,并被认为合法的。SQL Server2005或者Windows对用户进行验证。如果通过验证,用户可以连接到SQL Server2005服务器上,否则服务器拒绝用户登录。 (2)权限认证阶段:如果身份验证通过,只表示用户可以连接到SQLServer 2005服务器上,然后,需要检测用户是否有访问数据库的权限。为此需要授予每个数据库中映射到用户登录的帐户权限,权限认证可以控制用户对数据库进行操作。,Page 4/31,服务器级安全性,用户可以使用以下三种方式向SQL Server认证 Windows用户登录名 Windows用户组成员资格 SQL Server专用登录名(服务器设置了混合模
3、式) 服务器使用loginid来识别用户,服务器识别用户后,用户获得了通过固定服务器角色授予的服务器级管理权限。如果用户数据sysadmin角色,将具备全面访问所有服务器函数、数据库和对象的权限 可授予用户访问数据库的权限,如果用户没有访问某个数据库的权限,可以调整数据库服务器配置,使其获得guest用户的权限。,Page 5/31,服务器安全性,SQL Server使用两阶段身份验证方案,首先由服务器对用户进行身份验证,用户获准访问服务器后,就可以授予访问各个数据库的权限 SQL Server将所有登录信息存储在master数据库中。,Page 6/31,SQL Server身份验证模式,任
4、何用户在使用SQL Server数据库之前,必须经过系统的安全身份验证。 SQL Server 2005提供了两种验证模式:(1)Windows身份验证:只进行windows身份验证(2)混合身份验证:同时使用 Windows身份验证和SQL Server身份验证,Page 7/31,安全身份验证,(1)SQL Server数据库系统通常运行在Windows服务器上,而Windows作为网络操作系统,本身就具备管理登录、验证用户合法性的能力,因此Windows验证模式正是利用了这一用户安全性和帐号管理的机制,允许SQL Server可以使用Windows的用户名和口令。在这种模式下,用户只需要
5、通过Windows的验证,就可以连接到SQL Server,而SQL Server本身也就不需要管理一套登录数据。 (2)SQL Server身份验证模式允许用户使用SQL Server安全性连接到SQL Server。在该认证模式下,用户在连接SQL Server时必须提供登录名和登录密码,这些登录信息存储在系统表syslogins中,与Windows的登录帐号无关。SQL Server自身执行认证处理,如果输入的登录信息与系统表syslogins中的某条记录相匹配,则表明登录成功。,Page 8/31,安全身份验证,利用SQL Server管理平台可以进行认证模式的设置,步骤如下: (1)
6、打开Server管理平台,右击要设置认证模式的服务器,从弹出的快捷菜单中选择“属性”选项,则出现SQL Server属性对话框。 (2)在SQL Server属性对话框中选择“安全性”选项页,如图所示。 (3)在“服务器身份验证”选项栏中,可以选择要设置的认证模式,同时在“登录审核”中还可以选择跟踪记录用户登录时的哪种信息,例如登录成功或登录失败的信息等。 (4)在“服务器代理帐户”选项栏中设置当启动并运行SQL Server时,默认的登录者中哪一位用户。,SQL Server服务器属性页框,Page 9/31,查看当前的身份验证模式,可使用系统存储过程xp_loginconfig检查服务器使
7、用的身份验证模式 Exec xp_loginconfig login mode,Page 10/31,Windows身份验证,Windows身份验证优于混合认证模式、这不仅是用户不再需要获悉另一个密码,也利于网络安全设计。 Windows身份验证,不仅能够验证windows用户身份,还能验证windows用户组的身份,Page 11/31,使用windows组登录,1 添加新的windows组 使用图形(省略)使用T-SQL代码添加windows用户与组 exec sp_grantlogin lgnew 2 删除windows登录名 使用图形(略) exec sp_revokelogin lg
8、new 3拒绝windows登录名 可以使用sp_denylogin拒绝用户登录,从而阻止用户访问SQL Server,即使她通过其它方式获得访问SQL Server的权限exec sp_denylogin lgtom 要在拒绝后还原登录名,必须首先使用sp_grantlogin将其授予访问权。,Page 12/31,4、孤立的windows用户 将windows帐户添加到SQL Server中后,如果将其从windows域中删除,该用户任存在SQL Server中,但处于孤立状态。因此将无法访问SQL Server. Sp_validatelogins可以找到孤立的用户 解决方法: a、使用
9、sp_revokedbaccess 删除用户对所有数据的访问权限 b、使用sp_revokelogin 撤销对服务器的访问权限c、将用户添加到新的登录名,Page 13/31,SQL Server登录,当不便或不能使用windows身份验证时,可以选在SQL Server登录,它不仅提供向后兼容性,还可支持使用硬编码的SQL Server登录名的应用程序。启用混合身份验证模式后就自动创建一个sa用户,它是固定服务器角色sysadmin成员,具有访问服务器的权限。 在T-SQL中使用sp_addlogin来添加SQL登录名 sp_addlogin login,password,defaultda
10、tabase 例如:把joe添加到SQL Server用户,默认使用northwind数据库exec sp_addlogin joe,123,northwind,Page 14/31,更改密码 exec sp_password 123,456,joe 如果密码为空使用null 删除登录名 exec sp_droplogin joe,Page 15/31,数据库级安全性,用户获得访问服务器权限后,就可以授予访问各个数据的权限 在数据库级别,通过将用户加入固定数据库角色授予特定的管理权限 现在用户任不能访问数据,要使其能够访问数据,必须授予访问数据库对象(表、存储过程、视图、函数)的权限 用户定义
11、的角色是定制角色,其作用就像用户组。可授予角色访问数据库对象的权限,并将用户加入到角色中去。 所有用户都自动成为标准数据库角色public成员,Page 16/31,Guest登录名,如果存在guest用户帐户,则任何试图访问数据库但没有成为数据库用户的用户都拥有数据库用户guest的权限 创建数据时不会自动创建guest帐户,必须将其添加到数据库用户 Exec sp_adduser guest添加了却在登录中看不到,Page 17/31,授予用户访问数据库权限,通过management studio从登录名的角度授予数据的权限,使用登录属性对话框,用户映射选项卡 T-SQL 将tom授予数据
12、库northwind use northwind exec sp_grantdbaccess tom,abc 第一个参数:服务器登录名 第二个参数:可以选的数据库用户名 撤销 exec sp_revokedbaccess abc,Page 18/31,服务器登录帐号和用户帐号管理,SQL Server服务器登录管理 利用SQL Server管理平台可以创建、管理SQL Server登录帐号。其具体执行步骤如下: (1)打开SQL Server管理平台,单击需要登录的服务器左边的“+”号,然后展开安全性文件夹。 (2)右击登录名(login)图标,从弹出的快捷菜单中选择“新建登录名”选项,则出现
13、SQL Server“登录名新建”对话框,如图所示。,图新建登录名对话框,Page 19/31,服务器登录帐号和用户帐号管理,SQL Server服务器登录管理 (3)在“名称”文本框中输入登录名,在身份验证选项栏中选择新建的用户帐号是Windows 认证模式,或是SQL Server认证模式。 (4)选择“服务器角色”页框,如图所示。在服务器角色列表框中,列出了系统的固定服务器角色。在这些固定服务器角色的左端有相应的复选框,打勾的复选框表示该登录帐号是相应的服务器角色成员。,服务器角色对话框,Page 20/31,服务器登录帐号和用户帐号管理,SQL Server服务器登录管理 (5)选择“
14、用户映射”页框,如图所示。上面的列表框列出了“映射到此登录名的用户”,单击左边的复选框设定该登录账号可以访问的数据库以及该帐号在各个数据库中对应的用户名。下面的列表框列出了相应的“数据库角色成员身份”清单,从中可以指定该帐号所属的数据库角色。,图用户映射对话框,Page 21/31,服务器登录帐号和用户帐号管理,SQL Server服务器登录管理 (6)选择“安全对象”页框,如图所示。安全对象是 SQL Server数据库引擎授权系统控制对其进行访问的资源。点击“添加”按钮,可对不同类型的安全对象进行安全授予或拒绝。 (7)设置完成后,单击“确定”按钮即可完成登录帐号的创建。,图 安全对象对话
15、框,Page 22/31,服务器登录帐号和用户帐号管理,2. 用户帐号管理 在一个数据库中,用户帐号惟一标识一个用户,用户对数据库的访问权限以及对数据库对象的所有关系都是通过用户帐号来控制的。 利用SQL Server管理平台可以授予SQL Server登录访问数据库的许可权限。,Page 23/31,服务器登录帐号和用户帐号管理,2. 用户帐号管理 利用SQL Server管理平台创建一个新数据库用户帐号的过程如下: 打开SQL Server管理平台,展开要登录的服务器和数据库文件夹,然后展开要创建用户的数据库及安全文件夹,右击用户图标,从快捷菜单中选择“新建用户”选项,则出现“数据库用户新
16、建”对话框,如图所示。 在用户名框内输入数据库用户名称,在登录名选择框内选择已经创建的登录帐号,然后在下面的数据库角色成员选择框中为该用户选择数据库角色,最后单击“确定”按钮即可完成数据库用户的创建。,图 新建数据库用户对话框,Page 24/31,服务器登录帐号和用户帐号管理,2. 用户帐号管理 同样,在SQL Server 管理平台中,也可以查看或者删除数据库用户,方法是:展开某一数据库,选中用户图标,则在右面的页框中显示当前的数据库的所有用户,如图所示。要删除数据库用户,则在右面的页框中右击所要删除的数据库用户,从弹出的快捷菜单中选择“删除”选项,则会从当前的数据库中删除该数据库用户。,
17、管理数据库用户对话框,Page 25/31,许可(权限)管理,对象许可表示对特定的数据库对象(即表、视图、字段和存储过程)的操作许可,它决定了能对表、视图等数据库对象执行哪些操作。如果用户想要对某一对象进行操作,其必须具有相应的操作的权限。表和视图许可用来控制用户在表和视图上执行SELECT,INSERT,UPDATE和DELETE语句的能力。字段许可用来控制用户在单个字段上执行SELECT,UPDATE和REFERENCES操作的能力。存储过程许可用来控制用户执行EXECUTE语句的能力。 数据库控制语言DCL命令:grantrevokedeny用于管理对象权限。Deny权限优先于grant
18、权限、而grant权限优先于revoke权限。 授予对象权限与服务器角色和数据库角色是相互影响的,优先级从高到低: 服务器角色sysadmin拒绝对象权限 db_denydatareader 和 db_denydatawirter数据库角色授予对象权限、对象所有权,Page 26/31,许可(权限)管理,许可的管理包括对许可的授权、否定和收回。在SQL Server中,可以使用SQL Server管理平台和Transaction_SQL 语句两种方式来管理许可。 1. 使用SQL Server 管理平台管理许可 SQL Server 可通过两种途径实现对用户许可的设定: (1)面向单一用户 (
19、2)面向数据库对象的许可设置。,Page 27/31,许可(权限)管理,1. 使用SQL Server 管理平台管理许可 (1)面向单一用户的许可设置。其具体过程如下: 在SQL Server管理平台中,展开服务器和数据库,单击用户图标,此时在右面的页框中将显示数据库的所有用户。在数据库用户清单中,右击要进行许可设置的用户,从弹出的快捷菜单中选择“属性”选项,则出现数据库用户属性对话框,选择“安全对象”页框,如图所示。,数据库用户属性对话框,Page 28/31,许可(权限)管理,1. 使用SQL Server 管理平台管理许可 (1)面向单一用户的许可设置。 在上页对话框中单击“添加”按钮,
20、则弹出“添加对象”对话框,如图所示。选择“特定对象”单选钮后,出现如图所示的对话框,添加对象对话框,选择对象对话框,Page 29/31,许可(权限)管理,1. 使用SQL Server 管理平台管理许可 (1)面向单一用户的许可设置。 点击“确定”后则出现图所示的对话框。在该对话框中可以进行对象许可的设置。点击对话框底部“列权限”按钮,出现如图所示对话框,在该对话框中可以选择用户对哪些列具有哪些权限。最后单击“确定”按钮即可完成许可的设置。,设置对象权限对话框,设置列权限对话框,Page 30/31,许可(权限)管理,1. 使用SQL Server 管理平台管理许可 (1)面向单一用户的许可
21、设置。 在如图所示的数据库用户常规选项页中,如果在“数据库角色成员身份”选项栏中选择一个数据库角色,实际上就完成了数据库用户语句许可的设置。因为对于这些数据库固定角色,SQL Server已经定义了其具有哪些语句许可。,图数据库用户属性常规页框,Page 31/31,许可(权限)管理,1. 使用SQL Server 管理平台管理许可 (2)面向数据库对象的许可设置。 在SQL Server 管理平台中,展开服务器和数据库,然后选择需要设置的用户对象,即表、视图、存储过程等,在右面的页框中选择要进行许可设置的对象,右击该对象,从弹出的快捷菜单中选择“属性”选项,出现对象属性对话框,在该对话框中选
22、择“权限”页框,单击“添加”按钮设置好相应的对象许可后,如图所示,单击“确定”按钮即可完成数据库对象的许可设置。,图表属性中的权限对话框,Page 32/31,许可(权限)管理,2.使用Transaction_SQL 语句 Transaction-SQL 语句使用grant、revoke和deny三种命令来管理权限,相关的语法和实例可参照第3章数据控制语言部分。 Grant permission,permission. On object To user/role,user/role With grant option 可以授予的权限有:all select delete references
23、 update或execute 角色或用户名可以是数据库用户名、任意用户定义角色或public角色,Page 33/31,例如:将person表的select权限授予joe Grant select on person to joe 例如:将marriage表的all权限授予public角色 Grant all on marriage to public 例如:列出多个用户多个角色 Grant select,update on persion to guest,tom With grant option 让用户能够将其对象权限转授给其他人 Grant select on person to j
24、oe with grant option,Page 34/31,使用代码收回和拒绝对象权限 例如从joe收回marriage的select权限 revoke all on marriage to publice 如果原来授权使用了with grant option 则必须使用cascade选项来收回或拒绝权限,以便废除用户通过with grant option选项转授给其它用户的权限 例如:拒绝joe对person表的select权限 deny select on person to joe cascade,Page 35/31,角色管理,角色定义了常规的 SQL Server 用户类别。每种
25、角色将该类别的用户与其使用 SQL Server时执行的任务集以及成功完成这些任务所需的知识相关联。利用角色,SQL Server管理者可以将某些用户设置为某一角色,这样只要对角色进行权限设置便可以实现对所有用户权限的设置,大大减少了管理员的工作量。 SQL Server提供了用户通常管理工作的预定义服务器角色和数据库角色。用户还可以创建自己的数据库角色,以便表示某一类进行同样操作的用户。当用户需要执行不同的操作时,只需将该用户加入不同的角色中即可,而不必对该用户反复授权许可和收回许可。,Page 36/31,角色管理,1. 服务器角色 服务器角色是指根据SQL Server的管理任务,以及这
26、些任务相对的重要性等级来把具有SQL Server管理职能的用户划分为不同的用户组,每一组所具有的管理SQL Server的权限都是SQL Server内置的。服务器角色存在于各个数据库之中,要想加入用户,该用户必须有登录帐号以便加入到角色中。 SQL Server2005提供了八种常用的固定服务器角色,其具体含义如下所示: 系统管理员(sysadmin):拥有SQL Server所有的权限许可; 服务器管理员(Serveradmin):管理SQL Server服务器端的设置; 磁盘管理员(diskadmin):管理磁盘文件; 进程管理员(processadmin):管理SQL Server系
27、统进程; 安全管理员(securityadmin):管理和审核SQL Server系统登录; 安装管理员(setupadmin):增加、删除连接服务器,建立数据库复制以及管理扩展存储过程; 数据库创建者(dbcreator):创建数据库,并对数据库进行修改。 批量数据输入管理员(bulkadmin):管理同时输入大量数据的操作。,Page 37/31,服务器角色,在management studio中可以在登录属性对话框中的服务器角色选项卡中设置服务器角色 T-SQL授予用户以服务器角色 sp_addsrvrolemember loginname=login,rolename=role Exe
28、c sp_addsrvrolemember tom,sysadmin 从固定服务器角色中删除用户 Exec sp_dropsrvrolemember tom,sysadmin,Page 38/31,角色管理,2. 数据库角色 数据库角色是为某一用户或某一组用户授予不同级别的管理或访问数据库以及数据库对象的权限,这些权限是数据库专有的,并且还可以使一个用户具有属于同一数据库的多个角色。 SQL Server提供了两种类型的数据库角色: (1)固定的数据库角色; (2)用户自定义的数据库角色。,Page 39/31,角色管理,2. 数据库角色 (1)固定的数据库角色 固定的数据库角色是指SQL S
29、erver已经定义了这些角色所具有的管理、访问数据库的权限,而且SQL Server管理者不能对其所具有的权限进行任何修改。SQL Server中的每一个数据库中都有一组固定的数据库角色,在数据库中使用固定的数据库角色可以将不同级别的数据库管理工作分给不同的角色,从而有效地实现工作权限的传递。,Page 40/31,角色管理,2. 数据库角色 (1)固定的数据库角色 SQL Server提供了十种常用的固定数据库角色来授予组合数据库级管理员权限: public:每个数据库用户都属于 public 数据库角色,当尚未对某个用户授予或拒绝对安全对象的特定权限时,则该用户将继承授予该安全对象的 pu
30、blic 角色的权限; db_owner:可以执行数据库的所有配置和维护活动; db_accessadmin:可以增加或者删除数据库用户、工作组和角色; db_ ddladmin:可以在数据库中运行任何数据定义语言 (DDL) 命令; db_securityadmin:可以修改角色成员身份和管理权限; db_backupoperator:可以备份和恢复数据库; db_datareader:能且仅能对数据库中的任何表执行select操作,从而读取所有表的信息; db_datawriter:能够增加、修改和删除表中的数据,但不能进行SELECT操作; db_denydatareader:不能读取数
31、据库中任何表中的数据; db_denydatawriter:不能对数据库中的任何表执行增加、修改和删除数据操作。,Page 41/31,角色管理,2. 数据库角色 (2)用户自定义角色 创建用户定义的数据库角色就是创建一组用户,这些用户具有相同的一组许可。如果一组用户需要执行在SQL Server中指定的一组操作并且不存在对应的Windows组,或者没有管理Windows用户帐号的许可,就可以在数据库中建立一个用户自定义的数据库角色。用户自定义的数据库角色有两种类型:即标准角色和应用程序角色。 标准角色通过对用户权限等级的认定而将用户划分为不用的用户组,使用户总是相对于一个或多个角色,从而实现
32、管理的安全性。所有的固定的数据库角色或SQL Server管理者自定义的某一角色都是标准角色。 应用程序角色是一种比较特殊的角色。当我们打算让某些用户只能通过特定的应用程序间接地存取数据库中的数据而不是直接地存取数据库数据时,就应该考虑使用应用程序角色。当某一用户使用了应用程序角色时,他便放弃了已被赋予的所有数据库专有权限,他所拥有的只是应用程序角色被设置的角色。通过应用程序角色,能够以可控制方式来限定用户的语句或者对象许可。,Page 42/31,角色管理,3. 使用SQL Server管理平台管理角色 (1)管理服务器角色。 打开SQL Server管理平台,展开指定的服务器,单击安全性文
33、件夹,然后单击服务器角色图标,在右边的页框中右击所要的角色,从弹出的快捷菜单中选择“属性”选项,则出现服务器角色属性对话框,如图所示。在该对话框中我们可以看到属于该角色的成员。单击“添加”按钮则弹出添加成员对话框,其中可以选择添加新的登录帐号作为该服务器角色成员,单击删除按钮则可以从服务器角色中“删除”选定的帐号。,服务器角色属性对话框,Page 43/31,角色管理,3. 使用SQL Server管理平台管理角色 (2)管理数据库角色。 在SQL Server管理平台中,展开指定的服务器以及指定的数据库,然后展开安全性文件夹,右击数据库角色图标,从弹出的快捷菜单中选择“新建数据库角色”选项,
34、则出现新建数据库角色对话框,如图所示。在名称文本框中输入该数据库角色的名称;点击架构前的复选框,可设定此角色拥有的架构;单击“添加”按钮,可将数据库用户增加到新建的数据库角色中;最后单击“确定”按钮即可完成新的数据库角色的创建。,图10-16 “数据库角色新建”对话框,Page 44/31,角色管理,4. 使用存储过程管理角色 管理数据库角色 在SQL Server中,支持数据库管理的存储过程主要有六种: create role:用来创建一个新的数据库角色,create role语法形式如下:create role role_name AUTHORIZATION owner_name 其中:r
35、ole_name 为待创建角色的名称;AUTHORIZATION owner_name为拥有新角色的数据库用户或角色。如果未指定用户,则执行 CREATE ROLE 的用户将拥有该角色。 droprole:用于从当前数据库角色中删除一个数据库角色,Droprole的语法形式如下:Drop role role_name sp_helprole:用来显示当前数据库中所有数据库角色的全部信息。其语法形式如下:sp_helprole role sp_addrolemember:用来向数据库某一角色中添加数据库用户,这些角色可以是用户自定义的标准角色,也可以是固定的数据库角色,但不能是应用程序角色。其语
36、法形式如下:sp_addrolemember role,security_account sp_droprolemember:用来删除某一角色的用户。其语法形式如下:sp_droprolemember role,security_account sp_helprolemember:用于显示某一数据库角色的所有成员。其语法形式如下sp_helprolemember role,Page 45/31,创建角色 Exec sp_addrole manager 删除角色 Exec sp_droprole manager 添加用户到角色 Exec sp_addrolemember manager,joe 从角色中删除用户 Exec sp_droprolemember manager,joe,