Presentation is loading. Please wait.

Presentation is loading. Please wait.

第11章 数据库安全性管理 本章导读: 合理有效的数据库安全机制,不仅可以保证被授权用户方便地访问数据库中的数据,还能够防止非法用户的入侵。SQL Server的安全性管理是建立在身份验证和权限验证的基础上,并通过SQL Server登录、数据库用户、角色、权限等机制实现。 知识要点: SQL Server登录.

Similar presentations


Presentation on theme: "第11章 数据库安全性管理 本章导读: 合理有效的数据库安全机制,不仅可以保证被授权用户方便地访问数据库中的数据,还能够防止非法用户的入侵。SQL Server的安全性管理是建立在身份验证和权限验证的基础上,并通过SQL Server登录、数据库用户、角色、权限等机制实现。 知识要点: SQL Server登录."— Presentation transcript:

1 第11章 数据库安全性管理 本章导读: 合理有效的数据库安全机制,不仅可以保证被授权用户方便地访问数据库中的数据,还能够防止非法用户的入侵。SQL Server的安全性管理是建立在身份验证和权限验证的基础上,并通过SQL Server登录、数据库用户、角色、权限等机制实现。 知识要点: SQL Server登录 数据库用户 角色 权限 11.1 数据安全性概述 11.2 SQL Server登录 11.3 数据库用户 11.4 角色 11.5 权限

2 11.1 数据安全性概述 安全性问题不是数据库系统所独有的,所有计算机系统都有这个问题。只是在数据库系统中大量数据集中存放,而且为许多最终用户直接共享,从而使安全性问题更为突出。系统安全保护措施是否有效是数据库系统的主要指标之一。 计算机安全性概述 安全标准

3 安全概述 .安全概述 数据库的安全性和计算机系统的安全性(包括计算机硬件、操作系统、网络系统在内的安全性)是紧密联系、相互支持的,理解计算机系统安全性问题是理解数据库系统安全性机制的前提。 1.安全概述 计算机系统安全性是指为计算机系统建立和采取的各种安全保护措施,以保护计算机系统硬件、软件及数据,防止其因偶然因素导致系统破坏,数据遭到更改或泄露。 影响计算机系统安全性的因素很多,不仅有硬件因素,还有环境和人的因素;不仅涉及技术方面,还涉及管理规范、政策法律方面等。计算机安全性包括计算机安全理论、策略、技术,计算机安全管理、评价、监督,计算机安全犯罪、侦察、法律等。概括起来,计算机系统的安全性分为三大类:技术安全类、管理安全类和政策法律类。这里只涉及技术安全类。

4 安全概述 安全标准 为了准确地测定和评估计算机系统的安全性能,规范和指导计算机系统的生产,各国逐步建立和发展了一套“可信计算机系统安全性的评测标准”。其中,1985年美国国防部颁布的《DoD可信计算机系统评估标准》(Trusted Computer System Evaluation Critical,TCSEC)和1991年美国国家计算机安全中心(NCSC)颁发的《可信计算机系统评估标准关于可信数据库系统的解释》(Trusted Database Interpretation,TDI)最为重要。TDI将TCSEC扩展到数据库管理系统,定义了数据库系统设计与实现中需要满足及其评估的安全性级别标准。 TCSEC/TDI将系统划分为DCBA四组,D,C1,C2,B1,B2,B3,A1从低到高7个等级。较高的安全等级提供的安全保护要包含较低等级的所有保护要求,同时提供更多完善的保护。7个安全等级的基本要求如下:

5 安全概述 安全标准 (1)D级:提供最小保护。如DOS是操作系统中安全标准为D的典型例子,它具有操作系统的基本功能,如文件系统的基本功能,如文件系统、进程调度等,但在安全性方面几乎没有专门的机制来保障。 (2)C1级:提供自主安全保护。实现用户与数据的分离,进行自主存取控制,保护和限制用户权限的传播。 (3)C2级:提供受控的存取保护。将C1级的DAC进一步细化,以个人身份注册负责,并实施审计和隔离,是安全产品的最低档次。 (4)B1级:标记安全保护。对系统的数据加以标记,并对标记的主体和客体实施强制存取控制。B1级较好地满足大型企业或一般政府部门对于数据的安全需求,这一级别的产品才认为是真正意义上的安全产品。满足B1级的产品出售允许冠以security或trusted字样。 (5)B2级:结构化保护。建立形式化的安全策略模型并对系统的所有主体和客体实施DAC和MAC。达到B2级的系统非常稀少,在数据库方面没有此级别的产品。 (6)B3级:安全域保护。要求可信任的运算基础必须满足访问监控器的要求,审计跟踪能力更强,并提供系统恢复过程。 (7)A1级:验证设计。提供B3级保护的同时给出系统形式化设计说明和验证以确保各安全保护的真正实现。

6 数据库安全性概述 在规划和设计数据库的安全性时,一般要从系统的角度,整体考虑网络系统、操作系统和数据管理系统三个层次的支持和配合,从外到内保证数据的安全。这里只讨论数据库管理系统的安全体系结构,主要包括登录、数据库用户和操作权限等,如图11-1所示。 图11-1 SQL Server安全体系结构

7 11.2 SQL Server登录 登录(身份验证)是指核对登录SQL Server实例的登录账户和密码是否正确,从而确认用户是否具有连接SQL Server服务器的权限。登录服务器属于SQL Server的第1个安全层次。 登录账户 身份验证模式 创建登录账户

8 登录账户 用户连接到SQL Server服务器的账号均称为登录账户。登录账户只有成功连接上SQL Server服务器实例,才有访问整个SQL Server服务器的资源的可能。 1.两类登录帐户 SQL Server 2000提供了两类登录账户:Windows登录账户和SQL Server登录账户。 Windows登录账户是由Windows系统(Windows身份验证模式)负责验证身份的登录帐号,授予Windows用户或组对SQL Server系统的访问权限。 SQL Server登录帐号是由SQL Server系统(SQL Server身份验证模式)自身负责验证身份的登录帐号。 2.默认登录帐户 (1)sa:即默认系统管理员(system administrator)账户,该账户在SQL Server系统和所有数据库中拥有所有的权限。默认情况下,它指派给服务器角色sysadmin,且不允许更改和删除。在安装SQL Server时,如果使用混合模式进行身份验证,则SQL Server安装程序将提示更改sa的登录密码,建议立即分配密码以防未授权用户访问。以sa账户登录后可以创建和管理其它登录账户。 (2)BULTIN\Administrators:表示Windows系统中的Administrators组的成员账户都允许作为SQL Server登录账户,与sa权限等价。 打开“企业管理器”,展开控制台目录,直至“安全性”目录,选择“登录”节点,显示两个默认的登录账户,如图11-1所示。

9 11.2.1 登录账户 打开“企业管理器”,展开控制台目录,直至“安全性”目录,选择“登录”节点,显示两个默认的登录账户,如图11-2所示。
登录账户 打开“企业管理器”,展开控制台目录,直至“安全性”目录,选择“登录”节点,显示两个默认的登录账户,如图11-2所示。 图11-2 默认的登录账户

10 身份验证模式 不管使用哪种登录账户,只有通过身份验证,才能连接到指定的SQL Server服务器实例,进而访问整个SQL Server服务器。SQL Server提供了两种身份验证模式:仅Windows模式和混合模式(SQL Server和Windows),两种模式具有同样的安全机制。 1.仅Windows模式 SQL Server通常运行在Windows服务器平台上,而Windows本身有一套用户管理系统,具有验证用户身份和管理用户登录的功能。在这种模式下,只要用户通过windows身份认证,就可以连接到SQL Server实例,而SQL Server通过回叫Windows 以获得信息,重新验证账户名和密码。Windows模式只允许使用Windows登录账户连接SQL Server服务器。 如果用户使用空白登录名连接到SQL Server实例,则SQL Server将使用Windows身份验证。如果试图使用特定的登录连接到配置为Windows身份验证的SQL Server实例,则将忽略该登录并使用Windows身份验证。 2.混合模式(SQL Server和Windows) 混合模式下,既可以使用Windows模式验证Windows登录账户,也可以使用SQL Server模式验证SQL Server登录账户。当使用SQL Server身份验证,还须提供登录账号名和密码。 如果SQL Server运行在Windows 9x系统上,则只能使用混合模式,因为Windows 9x系统上不支持Windows身份验证模式。 3.设置验证模式 要设置身份验证模式,用户必须使用系统管理员账户。 在企业管理器中,右击数据库服务器的实例名,弹出快捷菜单,选择“属性”命令,如图11-2所示,单击释放后,弹出如图11-3所示的“SQL Server属性(配置)”对话框,选择“安全性”选项,即可以设置身份验证模式。

11 图11-2 “企业管理器”对话框图 11-3 “SQL Server属性(配置)”对话框
身份验证模式 图11-2 “企业管理器”对话框图 “SQL Server属性(配置)”对话框

12 11.2.3 创建登录账户 1.新建登录帐户 (1)利用企业管理器创建新的登录帐户 【例11-1】 利用企业管理器创建登录帐户。
创建登录账户 1.新建登录帐户 (1)利用企业管理器创建新的登录帐户 【例11-1】 利用企业管理器创建登录帐户。 1)展开企业管理器控制台目录,直至“安全性”目录,右击“登录”选项,弹出快捷菜单,选择“新建登录”命令,打开“SQL Server登录属性”对话框的“常规”界面,如图11-4所示。 2)在“常规”界面,用户根据需要设置登录名、身份验证模式和默认设置(指定默认登录的数据库以及语言,如没指定数据库时,则登录帐户的权限局限在master数据库内)。

13 创建登录账户  Windows身份验证 如果选择“Windows身份验证”,则需要选择已有的Windows帐户并映像为登录帐户。单击“名称”文本框“…”按钮,打开如图11-5所示的“SQL Server登录属性”对话框2,从中选择现有的Windows系统用户(shuju\win_rega)映射为登录账户。  SQL Server身份验证 如果选择“SQL Server身份验证”,则提示输入密码和确认密码(建议登录账户名称为sql_rega和密码为test)。 3)在“服务器”界面,可以为登录账户设置服务器角色,对于普通的登录账户来说,一般无需指定服务器角色。如图11-6所示。 4)在“数据库访问”界面,可以为登录账户设置它能访问的数据库,如图11-7所示。 注意:如果为新建登录账户许可访问某数据库,则SQL Server自动在该数据库中创建与新建登录账户同名的数据库用户账户,并且将数据库用户账户自动关联登录账户,同时允许设置数据库用户账户的数据库角色。

14 图11-4 “SQL Server登录属性”对话框1 图11-5 “SQL Server登录属性”对话框2
创建登录账户 图11-4 “SQL Server登录属性”对话框 图11-5 “SQL Server登录属性”对话框2

15 图11-6 “SQL Server登录属性”对话框3 图11-7 “SQL Server登录属性”对话框4
创建登录账户 图11-6 “SQL Server登录属性”对话框3 图11-7 “SQL Server登录属性”对话框4

16 11.2.3 创建登录账户  使用系统存储过程sp_grantlogin创建Windows身份验证模式的登录帐户
创建登录账户 (2)使用T-SQL语句创建新的登录帐户。  使用系统存储过程sp_grantlogin创建Windows身份验证模式的登录帐户 格式:sp_grantlogin '域名\登录名' 说明:只有sysadmin或securityadmin固定服务器的成员,才能将包含域名的Windows用户或者组的名称映射为SQL Server登录账户。 【例11-2】 使用存储过程sp_grantlogin将本地计算机上的用户'shuju\win_regb'映射为SQL Server登录账户。 sp_grantlogin 'shuju\win_regb'  使用系统存储过程sp_addlogin创建SQL Server身份验证模式的登录帐户 格式:sp_addlogin '登录名'[,'登录密码'][,'默认数据库'][,'默认语言'] 说明:登录名称可以包含1~128字符,字符包括任何字母、符号和数字,但不能出现反斜杠(\)和系统已经存在的登录名(如sa和public)。 【例11-3】 使用存储过程sp_addlogin创建SQL Server登录账户sql_regb,密码test,默认数据库为jxgl。 sp_addlogin 'sql_regb','test','jxgl'

17 图11-8 “SQL Server登录属性”对话框2
登录账户 2.查看登录账户 (1)使用企业管理器查看登录账户 参照查看“默认登录帐户”,打开企业管理器,如图11-8所示,查看所有登录账户。 图11-8 “SQL Server登录属性”对话框2

18 11.1.2 登录账户 (2)使用T-SQL语句查看登录账户
登录账户 (2)使用T-SQL语句查看登录账户 说明: 1)只有sysadmin和securityadmin固定服务器角色的成员才可以执行sp_helplogins命令,并检查服务器上的所有数据库,以确定与这些数据库中相关的登录账户。 2)如果指定登录名(必须已存在),则查看指定登录名的相关登录信息,否则查看所有登录名的相关信息。 【例11-4】 使用存储过程sp_helplogins查看SQL Server登录账户sql_rega。 sp_helplogins 'sql_rega'

19 11.1.2 登录账户 3.修改登录账户 (1)使用企业管理器修改登录账户
登录账户 3.修改登录账户 (1)使用企业管理器修改登录账户 参照查看“默认登录帐户”,打开“SQL Server登录属性”对话框,即可自行修改。 (2)使用T-SQL语句修改登录账户 使用系统存储过程sp_denylogin拒绝Windows用户或用户组的登录帐户 格式:sp_denylogin '用户或用户组' 说明:sp_denylogin只能拒绝Windows用户或用户组的登录帐户。 使用系统存储过程sp_revokelogin废除登录帐户,包括sp_addlogin或sp_grantlogin创建的登录账户。 格式:sp_revokelogin '用户或用户组' 说明:废除(删除)指定的登录账户。 使用系统存储过程sp_password修改SQL Server登录账户的密码 格式:sp_password '旧密码', '新密码', '登录账户' 说明:对指定的登录账户进行修改,用新密码替代旧密码。

20 11.3 数据库用户 数据库用户和登录账户是两个不同概念,一个合法登录账户只表明其通过了Windows验证或SQL Server认证,能够连接到SQL Server服务器,但并不表明其可以对数据库及其对象进行访问操作。登录账户只有在关联数据库用户后,才能够对数据库及其对象(表、视图、存储过程)等进行权限许可下的操作。也就是说,一个登录账户连接到SQL Server实例后,DBA必须在数据库中为它映射一个数据库用户,然后才能通过数据库用户来访问该数据库。 默认数据库用户 新建数据库用户 查看数据库用户 删除数据库用户

21 默认数据库用户 数据库用户总是基于数据库的,一个登录账户可以关联多个数据库用户,但在一数据库中,只能有一个数据库用户与之相对应。数据库中存在两个特殊数据库用户:dbo或guest。 (1)dbo:数据库所有者,拥有对本数据库所有操作权限,始终存在于每个数据库中,不能被删除。创建数据库的用户是该数据库的dbo,固定服务器角色sysadmin的任何成员(如sa)都自动关联到每个数据库的dbo。 (2)guest:游客,新建数据库一般不含guest,但可以添加到其中。但是guest默认存在SQL Server 2005每个数据库中,且是禁用的。当满足下列条件时,登录账户可以通过数据库用户guest来访问数据库。 ①登录账户有访问SQL Server实例的权限,但没有权限或无法通过自己的数据库用户账户来访问数据库。 ②数据库中提供了数据库用户guest。 注意:在SQL Server系统数据库中,除model之外,都存在数据库用户guest,且不能删除master和tempdb数据库中的guest。

22 新建数据库用户 一般来说,数据库用户除了guest账户以外,都与某个登录账户关联。因此新建数据库用户账户之前,必须事先确认一个关联的登录账户。 1.利用企业管理器创建新的数据库用户账户 【例11-5】 使用企业管理器创建新的数据库用户账户。 (1)在企业管理器中,展开要在其中创建数据库用户账户的数据库(jxgl)目录,右击“用户”节点,弹出快捷菜单,选择“新建数据库用户”命令,如图11-9所示。 图11-9 “新建数据库用户”命令界面

23 新建数据库用户 (2)单击“新建数据库用户”命令后,弹出如图11-10所示的“数据库用户属性”对话框,在“登录名”下拉列表框中选择登录账户(SHUJU\win_rega),然后在“用户名”文本框中输入数据库用户名(win_rega_u),最后在“数据库角色成员”列表框中,为数据库用户指定数据库角色。 图 “数据库用户属性”对话框

24 11.3.2 新建数据库用户 2.使用T-SQL语句创建数据库用户
新建数据库用户 2.使用T-SQL语句创建数据库用户 格式:sp_grantdbaccess '登录名' [,'数据库用户名'] 说明: (1)将SQL Server登录名或Windows用户名或组名映射为当前数据库用户; (2)如果没有指定数据用户名,则数据库用户名默认与登录名同名。 【例11-6】 使用存储过程sp_grantdbaccess为登录账户SHUJU\win_regb在数据库jxgl中创建一个数据库用户名win_regb_u。 use jxgl go sp_grantdbaccess 'SHUJU\win_regb','win_regb_u' 【例11-7】 使用存储过程sp_grantdbaccess,为登录账户sql_rega在数据库jxgl中创建一个数据库用户名sql_rega_u。 sp_grantdbaccess 'sql_rega','sql_rega_u' 【例11-8】 使用存储过程sp_grantdbaccess,为登录账户sql_regb在数据库jxgl中创建一个数据库用户名sql_regb_u。 sp_grantdbaccess 'sql_regb','sql_regb_u'

25 图11-11 “新建数据库用户”命令界面 图11-12 “数据库用户属性”对话框
查看数据库用户 (1)使用企业管理器查看数据库用户账户 展开数据库(jxgl)目录,单击“用户”节点,在右侧窗格中显示当前数据库包含的所有数据库用户账户,右击所要查看的数据库用户账户名,弹出快捷菜单,选择“属性”命令,如图11-11所示,单击释放后弹出“用户属性”对话框,如图11-12所示,授予相关角色。 图 “新建数据库用户”命令界面 图 “数据库用户属性”对话框

26 11.3.3 查看数据库用户 (2)使用系统存储过程sp_helpuser查看数据库用户 格式:sp_helpuser ['数据库用户名']
查看数据库用户 (2)使用系统存储过程sp_helpuser查看数据库用户 格式:sp_helpuser ['数据库用户名'] 说明:查看当前数据库中指定数据库用户名的信息,如果没有指定数据库用户名,则报告当前数据库中所有数据库用户信息。 【例11-9】 使用存储过程sp_helpuser查看当前数据库(jxgl)中数据库用户信息。 use jxgl go sp_helpuser 运行结果如图11-13所示。 图 “新建数据库用户”命令界面

27 11.3.4 删除数据库用户 1.使用企业管理器删除数据库用户
删除数据库用户 1.使用企业管理器删除数据库用户 右击要删除的用户,从弹出的菜单中选择“删除”命令,在出现的提示框中,单击“是”按钮,即可确认删除。 2.使用系统存储过程sp_revokedbaccess删除数据库用户 格式:sp_revokedbaccess '数据库用户名' 说明:从当前数据库中删除指定的数据库用户。

28 11.4 角色 角色是一组相关权限的集合,也可以理解为由相同权限用户构成的逻辑分组。角色是权限的载体,不同的角色被赋予了不同的权限,角色是为了管理权限而引入的技术。将一个或多个角色分配给用户,从而授予用户对系统相应的操作权限。换言之,可将用户集中到某一角色中统一设定操作权限,对角色授予、拒绝和废除的权限同样适用于角色的成员(用户)。每个用户可以附属于多个不同的角色成员,从而拥有与某角色相同的权限。 角色类型 管理服务器角色中的登录账户 新建数据库角色 删除数据库角色 管理数据库角色中的数据库用户

29 11.4.1 角色类型 角色分为两种类型:服务器角色和数据库角色,而数据库角色又分为固定数据库角色和用户自定义数据库角色。 1.服务器角色
角色类型 角色分为两种类型:服务器角色和数据库角色,而数据库角色又分为固定数据库角色和用户自定义数据库角色。 1.服务器角色 服务器角色是指被授予管理SQL Server服务器的权限的角色,其中的成员是登录账号。服务器角色是内置的,即不能行添加、修改和删除服务器角色,只能修改角色的成员; SQL Server 2000中定义了8种(固定)服务器角色,如图11-14所示。 图 固定服务器角色

30 角色类型 服务器角色适用于服务器的范围内,与具体数据库无关;对服务器操作的权限不能直接授予登录账户,只有使登录账户成为服务器角色的成员,才使之具有这些服务器角色的权限。 注意:属于Windows组的登录账户自动被设置为sysadmin服务器角色的成员。 2.数据库角色 数据库角色分为固定数据库角色和用户自定义数据库角色。 (1)固定数据库角色 固定数据库角色是指SQL Server自动创建的、固定的、不能被数据库管理员或用户修改或删除的数据库角色。每个数据库都会拥有一系列固定数据库角色,尽管在不同数据库内存在同名的数据库角色,但各自的范围都仅限于各自所属的数据库内。 SQL Serve 2000中定义了10种固定数据库角色,如表11-1所示

31 11.4.1 角色类型 固定数据库角色 权限描述 public 最基本的数据库角色,每个数据库用户都属于数据库角色,不能删除
角色类型 固定数据库角色 权限描述 public 最基本的数据库角色,每个数据库用户都属于数据库角色,不能删除 db_owner 在数据库中拥有全部权限 db_accessadmin 可以添加或删除用户 db_datareader 可以查看来自数据库中所有用户的表的全部数据 db_datawriter 可以更改来自数据库中所有用户的表的全部数据 db_ddladmin 可以添加、修改、或删除数据库中的对象 db_securityadmin 可以管理数据库角色和成员,并管理数据库中的语句和对象权限 db_backupoperator 可以对数据库进行备份 db_denydatareader 可以拒绝选择数据库中的数据 db_denydatawriter 可以拒绝更改数据库中的数据 注意:public角色是一个特殊的数据库角色,自动捕获数据库用户的所有默认权限,每个数据库用户都会自动成为public角色的成员,且不能被删除。

32 角色类型 (2)用户自定义数据库角色 用户自定义数据库角色是指由用户自己创建并定义权限的数据库角色。创建用户自定义数据库角色即可以使用企业管理器,也可以使用T-SQL语句。

33 管理服务器角色中的登录账户 通常,一个登录账户可以不属于任何服务器角色,也可以属于多个服务器角色。将一个登录账户加入一个角色方法有多种,常见的方法有两种: (1)参照新建登录账户时,为登录账户授予服务器角色。 (2)选择服务器角色,为服务器角色添加登录账户。

34 11.4.3 新建数据库角色 1.使用企业管理器创建用户自定义数据库角色
新建数据库角色 1.使用企业管理器创建用户自定义数据库角色 (1)在企业管理器中,展开要创建数据库角色的“数据库”目录(jxgl),右击“角色”节点,弹出快捷菜单,选择“新建数据库角色”命令,如图11-15所示。 (2)单击释放后,弹出如图11-16所示的“数据库角色属性”对话框。在“名称”文本框中输入用户自定义角色的名称(user_role);

35 新建数据库角色 图 “新建数据库角色”对话框 图 “数据库角色属性”对话框

36 新建数据库角色 (3)单击“标准角色”,继续单击“添加”按钮,弹出“添加角色成员”对话框,列表框中显示了当前数据库中所有数据库用户账户,但不包括dbo,如图11-17所示。选择一个或多个数据库用户(如sql_rega_u),单击“确定”按钮添加到角色中。 图 “添加角色成员”对话框

37 11.4.3 新建数据库角色 2.使用系统存储过程sp_addrole创建用户自定义数据库角色
新建数据库角色 2.使用系统存储过程sp_addrole创建用户自定义数据库角色 格式:sp_addrole '用户自定义数据库角色' 说明:创建一个新的用户自定义数据库角色。

38 11.4.4 删除数据库角色 1.使用企业管理器删除用户自定义数据库角色
删除数据库角色 1.使用企业管理器删除用户自定义数据库角色 右击需要删除的用户自定义数据库角色,弹出快捷菜单,从中选择“删除”命令,可以删除用户自定义数据库角色。 2.使用系统存储过程sp_droprole删除用户自定义数据库角色 格式:sp_droprole '用户自定义数据库角色' 说明:删除指定的用户自定义数据库角色。

39 管理数据库角色中的数据库用户 角色只有包含了数据库用户才有意义,数据库用户被添加到角色中去,数据库用户就拥有了角色的所拥有的权限;将数据库用户从角色中删除后,数据库用户就失去了角色的权限。 1.使用企业管理中添加角色成员 参照图11-12所示的“企业管理器”对话框的右窗格中,依次打开图11-13所示的“数据库角色属性”对话框和图1-14所示的“添加角色成员”对话框,用户自行添加数据库用户。 2.在企业管理中删除角色成员 在图11-13所示的“数据库角色属性”对话框中,选择数据库用户,单击“删除”按钮,即可删除数据库用户。 3.使用系统存储过程sp_addrolemember添加角色成员 格式:sp_addrolemember '数据库角色','数据库用户名' 说明:将当前数据库的数据库用户添加到当前数据库的数据库角色中。 【例11-10】 使用sp_addrolemember将数据库用户win_regb_u添加到当前数据库(jxgl)的数据库角色db_accessadmin中。 use jxgl go sp_addrolemember 'db_accessadmin','win_regb_u' 4.使用系统存储过程sp_droprolemember删除角色成员 格式:sp_droprolemember '数据库角色','数据库用户名' 说明:将数据库用户名从数据库角色中删除。

40 11.5 操作权限 操作权限是指数据库用户对数据库及其对象拥有访问和操作的权力,数据库用户对数据库的访问和操作能力的大小是由其拥有权限决定的。而操作权限的获取来源于两方面因素:一是授予数据库用户的许可权限,二是继承所属数据库角色的权限。 权限类型 权限管理

41 11.5.1 权限类型 SQL Server的权限包括三种类型:对象权限、语句权限和隐含权限。 1.对象权限
权限类型 SQL Server的权限包括三种类型:对象权限、语句权限和隐含权限。 1.对象权限 对象权限是指用户对表、视图、存储过程等对象的操作权限。不同对象支持不同的操作权限,对象及其拥有的权限如表11-2所示。 表11-2 对象及其拥有的权限 对象 权限描述 select、insert、delete、update、reference 视图 select、insert、delete、update select、update 存储过程 execute

42 11.5.1 权限类型 2.语句权限 语句权限是指用户是否具有执行某一语句的权限。语句权限及其含义如表11-3所示。 表11-3 语句权限表
权限类型 2.语句权限 语句权限是指用户是否具有执行某一语句的权限。语句权限及其含义如表11-3所示。 表11-3 语句权限表 语句 语句含义 create database 创建数据库 create default 创建默认值对象 create table 创建表 create procedure 创建存储过程 create view 创建视图 backup database 备份数据库 create rule 创建规则对象 backup log 备份事务日志 create function 创建函数

43 权限类型 3.隐含权限 隐含权限是指由SQL Server预定义的服务器角色、数据库所有者(dbo)和数据库对象所有者所拥有的权限,隐含的权限相当于内置权限,不能明确地授予和撤销这些权限。 如服务器角色sysadmin的成员可以在整个服务器范围内执行任何操作,而数据库对象所有者(dbo)可以对本地数据库执行任何操作。

44 权限管理 权限管理是指对数据库用户或数据库角色的语句权限和对象权限的赋予、拒绝和撤销。数据库用户和数据库角色的许可权限以记录形式存储在对应数据库的系统表sysprotects中。 对数据库用户或数据库角色的权限管理既可以通过企业管理器实现,也可以通过T-SQL语句(grant、revoke和deny)实现。 授予权限:授予数据库用户或角色的语句权限和对象权限,使得数据库用户在当前数据库中具有执行活动和处理数据的权限。 拒绝权限:删除以前授予数据库用户或角色的语句权限和对象权限,停用从其它数据库角色继承的权限,确保数据库用户或角色将来不继承更高级别的数据库角色的权限。 废除权限:废除以前授予或拒绝的权限。但不妨碍数据库用户或角色从更高级别继承已授予的权限。 1.使用企业管理器管理对象权限 (1)在企业管理器中,展开“数据库”目录(jxgl),在右侧窗格中右击一个表、视图或存储过程(如表“学生”),弹出快捷菜单,选择“所有任务”→“管理权限”,如图11-18所示。 (2)单击释放后,弹出如图11-19所示的“对象属性”对话框,对话框列表中显示了当前数据库的数据库用户和角色。每个数据库用户和角色都可以设置select、insert、update、delete、exec和dri等权限。

45 图11-18 “管理权限快捷菜单”对话框 图11-19 “对象属性”对话框
权限管理 图 “管理权限快捷菜单”对话框 图 “对象属性”对话框 注意:√表示授予权限,×表示拒绝权限,□表示取消权限。

46 图11-20 “管理权限快捷菜单”对话框 图11-21 “jxgl 属性”对话框的“权限”界面
权限管理 2.使用企业管理器管理语句权限 (1)在企业管理器中,右击数据库,弹出快捷菜单,选择“属性”命令,如图11-20所示。 (2)单击释放后,弹出“jxgl 属性”对话框“常规”界面,单击“权限”选项卡,如图11-18所示,根据需要许可(勾选)相关权限。 图 “管理权限快捷菜单”对话框 图 “jxgl 属性”对话框的“权限”界面

47 11.5.2 权限管理 3.使用企业管理器管理数据库用户的权限
权限管理 3.使用企业管理器管理数据库用户的权限 在企业管理器中,右击数据库用户名(sql_rega_u),弹出快捷菜单,选择“所有任务”→“管理器权限”命令,弹出如图11-19所示的“数据库用户属性”对话框,,根据需要许可(勾选)相关权限。 4.使用企业管理器管理数据库角色的权限 在企业管理器中,右击数据库角色(user_role),弹出快捷菜单,选择“属性”,单击释放后,弹出如图11-22所示的“数据库角色属性”对话框1,单击名称框后的“权限”按钮,弹出如图11-23所示的“数据库角色属性”对话框2,根据需要许可(勾选)相关权限。

48 图11-22 “数据库用户属性”对话框 图11-23 “数据库用户属性”对话框
权限管理 图 “数据库用户属性”对话框 图 “数据库用户属性”对话框

49 11.5.2 权限管理 5.使用grant语句授予数据库用户(角色)的语句权限和对象权限 (1)授予语句权限
权限管理 5.使用grant语句授予数据库用户(角色)的语句权限和对象权限 (1)授予语句权限 格式:grant {all |语句权限[,...n]} to 账户[,...n] 说明: 1)all表示所有可用的语句权限; 2)账户表示当前数据库中的数据库用户(角色); 3)若权限被授予数据库角色或数据库用户(Windows 组名),则可影响到当前数据库中该角色或该组中成员。 【例11-11】 使用grant语句对数据库用户sql_rega_u授予创建表和创建视图的语句权限。 use jxgl grant create table, create view to sql_rega_u

50 权限管理 (2)授予对象权限 格式: grant {all|对象权限[,...n ]}{[(列名[,...n ])] on {表|视图} |on {表|视图}[(列名[,...n])]| on存储过程| on用户自定义函数} to账户[,...n] [ with grant option] [as{组|角色} ] 说明: 1)all表示授予所有可用的对象权限。 2)对象权限包括select、insert、delete或update权限。 3)账户指的是数据库用户或角色。 4)with grant option表示允许被授予权限的用户或角色再次授权权限给其它用户。 5)as {组|角色}表示角色或组的成员拥有使用角色或组的权限。 【例11-12】 使用grant语句对数据库角色(user_role)和数据库用户(win_regb_u,sql_regb_u)授予对数据库jxgl的表“学生”的insert、update和delete的权限。 use jxgl grant insert,update,delete on 学生 to user_role,win_regb_u,sql_regb_u

51 权限管理 【例11-13】 使用grant语句授予数据库用户win_regc_u对jxgl数据库的“学生”表的“学号”和“姓名”列具有update权限。 use jxgl exec sp_grantdbaccess 'shuju\win_regc','win_regc_u' grant update(学号,姓名) on 学生 to win_regc_u 或: grant update on 学生(学号,姓名) to win_regc_u

52 权限管理 【例11-14】 为数据库jxgl添加两数据库用户账户(sqlrega_u,sqlregb_u),对应登录账户(sqlrega,sql_regb),然后添加一数据库角色jxgl_role,且sqlrega_u是其成员,通过指定with grant option授权jxgl_role允许查询表“学生”的列“学号”和“姓名”。 操作步骤如下: (1)以sa或者等价sa的登录账户登录服务器,输入并执行以下代码: use jxgl --为登录账户sqlrega建立数据库用户账户sqlrega_u exec sp_grantdbaccess 'sqlrega','sqlrega_u' --为数据库jxgl增加数据库角色'jxgl_role' exec sp_addrole 'jxgl_role' --将数据库用户'sqlrega_u'加入到数据库角色'jxgl_role'中 exec sp_addrolemember 'jxgl_role','sqlrega_u' --为登录账户sqlregb建立数据库用户账户sqlregb_u exec sp_grantdbaccess 'sqlregb','sqlregb_u' --指定with grant option并授予数据库角色权限 grant select on 学生(学号,姓名) to jxgl_role with grant option

53 11.5.2 权限管理 (2)以登录账户sqlrega登录服务器,输入并执行以下代码: use jxgl
权限管理 (2)以登录账户sqlrega登录服务器,输入并执行以下代码: use jxgl select 学号,姓名from 学生 --指定数据库用户账户'sqlregb_u'获取数据库角色jxgl_role的权限 grant select on 学生(学号,姓名) to sqlregb_u as jxgl_role (3)以登录账户sqlregb登录服务器,输入并执行以下代码: 注意:对“学生”表的with grant option权限是授予jxgl_role数据库角色,而不是显式地授予sqlregb_u(不是jxgl_role成员),sqlregb_u须用as子句来获得jxgl_role角色的权限。

54 11.5.2 权限管理 6.使用deny语句可以拒绝数据库用户(角色)的语句权限和对象权限 (1)拒绝语句权限
权限管理 6.使用deny语句可以拒绝数据库用户(角色)的语句权限和对象权限 (1)拒绝语句权限 格式:deny {all|语句权限[,...n]} to数据库用户(角色) [,...n] 【例11-15】使用deny语句对数据库用户sql_rega_u拒绝创建表和创建视图的权限。 use jxgl deny create table, create view to sql_rega_u

55 权限管理 (2)拒绝对象权限 格式: deny {all|对象权限[,...n]}{[(列名[,...n])] on {表|视图} | on {表|视图}[(列名[,...n ] )] | on {存储过程|用户自定义函数}} to 账户[,...n] [cascade] 说明:cascade表示拒绝账户的权限时,也将拒绝由账户授权的任何其它账户的权限。 【例11-16】 使用deny语句拒绝数据库角色user_role对“学生”表的insert、update和delete的权限。 use jxgl deny insert,update, delete on 学生 to user_role 【例11-17】 拒绝数据库用户sqlrega_u的权限,并拒绝sq_rega_u对sqlrega_u的授权。 deny select(学号,姓名) on 学生 to sqlrega_u cascade

56 11.5.2 权限管理 7.使用revoke语句废除数据库用户(角色)的语句权限和对象权限 (1)废除语句权限
权限管理 7.使用revoke语句废除数据库用户(角色)的语句权限和对象权限 (1)废除语句权限 格式:revoke {all|语句权限[,...n]} from账户 [,...n] 【例11-18】 使用revoke语句废除数据库用户sql_rega_u创建表和创建视图的权限。 use pubs revoke create table,create view from sql_rega_u (2)废除对象权限 格式: revoke [grant option for]{all|对象权限[,...n]}{[(列名[,...n])] on {表|视图} |on{表|视图}[(列名[,...n])]|on {存储过程|用户自定义函数}} {to|from}账户[,...n][cascade][as {组|角色}] 说明: 1)grant option for:收回with grant option权限,即数据库用户不能将该权限授予其它数据库用户。 2)cascade:收回数据库用户权限的同时,也收回由其授权给其它数据库用户的权限。 3)收回with grant option设置的权限,需指定cascade和grant option for子句,否则出错。 4)as {组|角色}:说明数据库用户继承权限的来源角色或组。

57 权限管理 【例11-19】 使用revoke语句废除数据库角色user_role对“学生”表的insert、update和delete的权限。 revoke insert,update,delete on 学生 to user_role 【例10-20】 废除数据库用户sql_rega_u对学生表的学号列的修改权限。 revoke update(学号) on 学生 from sql_rega_u

58 本章小结 本章主要探讨了SQL Server 2000的安全性问题,包括身份认证模式、登录账户、数据库用户账户、角色、权限等内容。重点掌握登录账户和数据库用户的区别,尤其注意的是:登录账户成功地连接到SQL Server 2000后,并不是就拥有对所有数据库的访问权限,只有通过建立其相应的数据库用户账户才能访问该数据库,而使用角色可以简化对权限管理的操作。


Download ppt "第11章 数据库安全性管理 本章导读: 合理有效的数据库安全机制,不仅可以保证被授权用户方便地访问数据库中的数据,还能够防止非法用户的入侵。SQL Server的安全性管理是建立在身份验证和权限验证的基础上,并通过SQL Server登录、数据库用户、角色、权限等机制实现。 知识要点: SQL Server登录."

Similar presentations


Ads by Google