380 likes | 612 Views
第 12 章 SQL Server 的安全管理. 学习导读 本章主要介绍 SQL Server 2000 的安全特性和权限管理方法。 通过本章的学习,应掌握以下内容: 了解 SQL Server 2000 登录验证模式 掌握管理两类 SQL Server 2000 登录账户的方法 掌握管理 SQL Server 2000 数据库用户的方法 了解基于角色的权限管理 掌握管理服务器角色的方法 掌握管理数据库角色的方法. 12.1 SQL Server 安全体系结构. 数据的安全性 -- 是指保护数据以防止因不合法的使用而造成数据的泄密和破坏。
E N D
第12章 SQL Server的安全管理 学习导读 本章主要介绍SQL Server 2000的安全特性和权限管理方法。通过本章的学习,应掌握以下内容: • 了解SQL Server 2000登录验证模式 • 掌握管理两类SQL Server 2000登录账户的方法 • 掌握管理SQL Server 2000数据库用户的方法 • 了解基于角色的权限管理 • 掌握管理服务器角色的方法 • 掌握管理数据库角色的方法
12.1 SQL Server安全体系结构 • 数据的安全性--是指保护数据以防止因不合法的使用而造成数据的泄密和破坏。 • SQL Server的安全体系结构: • 客户机操作系统的安全性。可以通过在网络系统边界安装防火墙系统得以实施。 • SQL Server的登录安全性。允许哪些用户登录。 • 数据库的使用安全性。规定用户登录以后可以使用哪些数据库。 • 数据库对象的使用安全性。规定用户登录某一数据库后,可以操作哪些数据库对象以及怎样操作。
SQL Server安全体系结构 12.1.1 操作系统的安全性 在使用客户计算机通过网络实现对SQL Server服务器的访问时,用户首先要获得客户计算机操作系统的使用权。在能够实现网络互联的前提下,用户不必直接登录运行SQL Server服务器的主机,除非SQL Server服务器就运行在本地计算机上。SQL Server可以直接访问网络端口,所以可以实现对Windows NT安全体系以外的服务器及其数据库的访问。 操作系统安全性是操作系统管理员或者网络管理员的任务。由于SQL Server采用了集成Windows NT网络安全性的机制,所以使得操作系统安全性的地位得到提高,但同时也加大了管理数据库系统安全性和灵活性的难度。
SQL Server安全体系结构 12.1.2 SQL Server的安全性 SQL Server的服务器级安全性建立在控制服务器登录账号和密码的基础上。SQL Server采用了标准SQL Server登录和集成Windows NT登录两种方式。无论使用哪种登录方式,用户在登录时提供的登录账号和密码,决定了用户能否获得SQL Server的访问权,以及在获得访问权以后,用户在访问SQL Server进程时就可以拥有的权利。管理和设计合理的登录方式是数据库管理员(DBA)的重要任务,是SQL Server安全体系中DBA可以发挥主动性的第一道防线。 SQL Server事先设计了许多固定服务器的角色,用来为具有服务器管理员资格的用户分配使用权利。拥有固定服务器角色的用户可以拥有服务器级的管理权限。
SQL Server安全体系结构 12.1.3 数据库的安全性 当用户通过SQL Server服务器的安全性检验以后,将直接面对不同的数据库入口。这是用户将接受的第三次安全性检验。 在建立用户的登录账号信息时,SQL Server会提示用户选择默认的数据库。以后用户每次连接上服务器后,都会自动转到默认的数据库上。对任何用户来说,master数据库的门总是打开的,如果在设置登录账号时没有指定默认的数据库,则用户的权限将局限在master数据库以内。但是由于master数据库存储了大量的系统信息,对系统的安全和稳定起着至关重要的作用,所以建议用户在建立新的登录账号时,最好不要将默认的数据库设置为master数据库,而是应该根据用户实际将要进行的工作,将默认的数据库设置在具有实际操作意义的数据库上。 默认的情况下,数据库的拥有者(Owner)可以访问该数据库的对象,分配访问权给别的用户,以便让别的用户也拥有针对该数据库的访问权利。在SQL Server中默认的情况表示所有的权利都可以自由转让和分配。
SQL Server安全体系结构 12.1.4 SQL Server数据库对象的安全性 数据库对象的安全性是核查用户权限的最后一个安全等级。在创建数据库对象时,SQL Server自动把该数据库对象的拥有权赋予该对象的创建者。对象的拥有者可以实现对该对象的完全控制。默认情况下,只有数据库的拥有者可以在该数据库下进行操作。当一个非数据库拥有者想访问数据库里的对象时,必须事先由数据库拥有者赋予用户对指定对象执行特定操作的权限。例如,一个用户想访问school数据库里的student表中的信息,则必须在成为数据库用户的前提下,获得由school数据库拥有者分配的student表的访问权限。
12.2 SQL Server的验证模式 • SQL Server对用户的访问检验分为: • 验证阶段。用户在SQL Server上获得对任何数据库的访问权限之前,必须登录到SQL Server上,并且被认为是合法的。 • 许可确认阶段。用户验证通过后,登录到SQL Server上,系统检查用户是否有访问服务器上数据的权限。 • SQL Server 2000 提供的两种确认用户的验证模式: • NT 验证模式。 • 混合验证模式。
NT 验证模式 12.2.1 NT 验证模式 在NT验证模式下,SQL Server检测当前使用Windows NT/2000的用户账户,并在系统注册表中查找该用户,以确定该用户账户是否有权限登录。在这种方式下,用户不必提交登录名和密码让SQL Server验证。 NT验证模式有以下主要优点: • 数据库管理员的工作可以集中在管理数据库之上,而不是管理用户账户。对用户账户的管理可以交给Windows NT/2000去完成。 • Windows NT/2000有着更强的用户账户管理工具。可以设置账户锁定、密码期限等。 • Windows NT/2000的组策略支持多个用户同时被授权访问SQL Server。
混合验证模式 12.2.2 混合验证模式 混合验证模式允许以SQL Server验证模式或者NT验证模式来进行验证。使用哪个模式取决于在最初的通信时使用的网络库。如果一个用户使用的是TCP/IP Sockets进行登录验证,则将使用SQL Server验证模式;如果用户使用命名管道,则登录时将使用NT验证模式。这种模式能更好地适应用户的各种环境。但是对于Windows 9x系列的操作系统,只能使用SQL Server验证模式。 SQL Server验证模式处理登录的过程为:用户在输入登录名和密码后,SQL Server在系统注册表中检测输入的登录名和密码。如果输入的登录名存在,而且密码也正确,就可以登录到SQL Server上。
混合验证模式 混合验证模式具有如下优点: • 创建了Windows NT/2000之外的另外一个安全层次。 • 支持更大范围的用户,例如非Windows NT客户、Novell网络等。 • 一个应用程序可以使用单个的SQL Server登录或口令。
NT 验证模式 对SQL Server的影响 12.2.3 NT验证模式对SQL Server的影响 SQL Server的配置信息都被保存在master数据库的sysconfigures表内,但是在使用该数据库前,就应该决定采用哪种验证模式。在Windows NT/2000的注册表内,保存了SQL Server验证模式的相关信息及启动SQL Server的必须信息。因此,注册表对SQL Server而言,有着举足轻重的地位。 在注册表中(运行regedit程序,打开注册表编辑器),我的电脑\HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\ MSSQLServer中的LoginMode的值决定了采用哪种验证模式。如果该键值为0,则采用混合验证模式,如果该值不为0,则采用NT验证模式。每次启动SQL Server时,都将检查该键的值,以决定使用哪种验证模式。
NT 验证模式 对SQL Server的影响 注册表设置
设置验证模式 12.2.4 设置验证模式 操作步骤如下: (1) 打开企业管理器,选择服务器组中的服务器,右击鼠标,在弹出的快捷菜单上选择“编辑SQL Server注册属性”命令,打开“已注册的SQL Server属性”对话框。如果选中“使用SQL Server身份验证”模式,则须输入登录名和密码。 (2) 在对话框中设置验证模式后,单击“确定”按钮即可。
设置验证模式 (3) 还可以通过设置服务器的属性来设置验证模式。在服务器上右击鼠标,在弹出的菜单中选择“属性”命令,打开“属性”对话框。 (4) 单击“安全性”选项卡,在此选项卡中也可以设置验证模式。如果选中“SQL Server和Windows”表示选择混合验证模式,如果选中“仅Windows”表示选择NT验证模式。
12.3 账号和角色 • SQL Server的账号: • 登录服务器的登录账号。 • 使用数据库的用户账号。 注意:登录账号只是让用户登录到SQL Server中,登录名本身并不能让用户访问服务器中的数据库。要访问特定的数据库,还必须具有用户名。
服务器的登录账号 12.3.1 服务器的登录账号 • 安装SQL Server后,系统默认创建两个登录账号: • sa (标准账号) • BUILTIN\Administrators (Windows组账号) 1. 查看系统创建的默认登录账号 打开企业管理器,展开服务器组和服务器。展开“安全性”文件夹,选择“登录”选项,即可看到系统创建的默认登录帐号。其中,默认登录账号sa是超级管理员账号,允许SQL Server的系统管理员登录。
服务器的登录账号 2. 添加SQL Server登录账号 (1)打开企业管理器,展开服务器组和服务器。展开“安全性”文件夹,在“登录”选项上面右击鼠标,选择“新建登录”命令,打开登录属性对话框。 (2) 在“名称”文本框中输入“licb”,在“身份验证”选项组中,选择“SQL Server身份验证”单选按钮,并输入密码。然后在“默认设置”选项组中,选择“数据库”列表框中的“school”数据库,表示该登录帐号默认登录到school数据库中。
服务器的登录账号 (3) 单击“服务器角色”标签,打开“服务器角色”选项卡。在此选项卡中,可以设置登录账号所属的服务器角色,这里选择“securityadmin”服务器角色。
服务器的登录账号 角色是一种SQL Server安全账户,它是一组系统权限的集合。利用角色,SQL Server管理者可以将某一组用户设置为某一角色,这样只要对角色进行权限设置便可以实现对所有用户权限的设置,大大减少了管理员的工作量。角色分为服务器角色和数据库角色。 服务器角色是负责管理和维护SQL Server的组,这些固定的服务器角色是SQL Server内置的,不能对其进行添加、修改和删除,只能向其中加入用户。
服务器的登录账号 SQL Server提供的固定服务器角色及其权限如下: • sysadmin(系统管理员): 拥有SQL Server所有的权限许可。 • serveradmin(服务器管理员): 管理SQL Server服务器端的设置。 • diskadmin(磁盘管理员): 管理磁盘文件。 • processadmin(进程管理员): 管理SQL Server系统进程. • securityadmin(安全管理员): 管理和审核SQL Server系统登录。 • setupadmin(安装管理员): 增加、删除连接服务器,建立数据库复制以及管理扩展存储过程。 • dbcreator(数据库创建者): 创建数据库、并对数据库进行修改。 • bulkadmin(大容量插入操作管理者): 可执行大容量插入操作。
服务器的登录账号 (4) 单击“数据库访问”标签,打开“数据库访问”选项卡,在此选项卡中可选择登录账号可以访问的数据库。设置完成后,单击“确定”按钮。
服务器的登录账号 (5) 在出现的“确认密码”对话框中,再次输入密码,即可创建一个名称为licb的登录帐号。
服务器的登录账号 3. 修改登录账号属性 在企业管理器中,可在登录账号上面右击鼠标,然后在弹出的快捷菜单中选择“属性”命令(也可以双击要修改属性的登录账号),即可打开登录账号的属性对话框,在该对话框中进行修改即可。 4. 删除登录账号 如果要删除一个登录账号,在右击登录账号弹出的快捷菜单中选择“删除”命令,此时会打开一个提示对话框,单击“是”按钮确定删除。
数据库的用户 12.3.2 数据库的用户 在数据库中,一个用户取得合法的登录账号,只表明该账号可以通过Windows认证或SQL Server认证,并不表明可以对数据库数据和数据库对象进行某种或者某些操作,管理员必须在数据库中为用户建立一个用户账号,才能使该用户访问该数据库。 • 安装SQL Server后,每个数据库中有两个默认用户账号: • dbo。代表数据库所有者。 • guest。在安装SQL Server时,guest用户被加入到master、pubs、tempdb和northwind数据库中,该用户主要让那些没有属于自己的用户账号的SQL Server登录者作为默认的用户,从而使该登录者能够访问具有guest用户的数据库。
数据库的用户 1. 添加数据库用户 下面以在test数据库中创建一个用户账号,并将其关联到licb登录账号中为例,介绍其操作步骤。 (1) 在企业管理器中,展开SQL Server组及其服务器,在“数据库”文件夹中,展开test文件夹,然后在“用户”选项上右击鼠标,在弹出的快捷菜单中选择“新建数据库用户”命令。
数据库的用户 (2)在打开的新建用户对话框中,单击“登录名”文本框右端的下拉箭头,选择licb登录账号,此时“用户名”文本框中自动显示为licb。可以更改“用户名”文本框中的名称,也可以在“数据库角色成员”列表框中选择新建用户应该属于的数据库角色。 (3) 设置完成后,单击“确定”按钮,即可在test数据库中创建一个新的用户账号。 • 注意:创建用户账号时不能设置其权限,可在创建后通过其属性对话框来设置。
数据库的用户 2. 设置用户权限 操作步骤如下: (1) 在要设置权限的用户上面右击鼠标,然后选择“属性”命令,打开“数据库用户属性”对话框,在该对话框中单击“权限”按钮。
数据库的用户 (2) 在打开的权限设置对话框中,可以设置用户对数据库对象所具有的权限。 • 各权限的含义如下: • SELECT:对表或者视图的查询。 • INSERT:在表或者视图中插入记录。 • UPDATE:对表或者视图中的数据修改。 • DELETE:删除表或者视图中的数据。 • EXEC:执行存储过程。 • DRI(Declarative Referential Integrity):可对表的外键加上限制,以达成表的参考完整性。
数据库的用户 (3) 如果要设置对表或者视图的某一字段进行操作的权限,可在列表中选择表或者视图,然后单击“列”按钮,可打开“列权限”对话框。使用该对话框即可进行相应权限的设置。
数据库角色 12.3.3 数据库角色 • 数据库角色是对某个数据库具有相同访问权限的用户账号和组的集合。 • SQL Server提供的数据库角色类型: • 标准角色。SQL Server已经预定了这些角色所具有的管理、访问数据库的权限,而且SQL Server管理者不能对其所具有的权限进行任何修改。 • 应用程序角色。当打算让某些用户只能通过特定的应用程序间接地存取数据库中的数据时采用。
数据库角色 1. 标准角色 在数据库创建时,系统默认创建10个固定的标准角色。这些固定的数据库角色的含义如下: • public:维护全部默认权限。 • db_owner:在数据库中有全部权限。 • db_accessadmin:可以添加或删除数据库用户、工作组和角色。 • db_securityadmin:管理角色、角色成员、管理对象和语句权限。 • db_ddladmin:可以增加、删除和修改数据库中任何对象。 • db_backupoperator:可以备份和恢复数据库。 • db_datareader:可以选择数据库内任何用户表中的所有数据。 • db_datawriter:可以更改数据库内任何用户表中的所有数据 • db_denydatareader:不能选择数据库内任何用户表中的任何数据。 • db_denydatawriter:不能更改数据库内任何用户表中的任何数据。
数据库角色 • 将用户添加到角色中的方法: 下面以db_owner数据库角色为例,来查看它的属性,并将用户licb加入到该角色中。操作步骤如下: (1) 在数据库school文件夹下,选择“角色”选项。 (2) 在db_owner角色上右击鼠标,然后选择“属性”命令,打开“数据库角色属性-db_owner”对话框,dbo是默认存在的用户,是指数据库的创建者。单击“添加”按钮。
数据库角色 (3) 在打开的“添加角色成员”对话框,选择要加入的用户。这里选择licb用户。 (4) 依次单击“确定”按钮,即可将用户licb加入到db_owner数据库角色中。
数据库角色 • 创建用户自定义角色的方法: 操作步骤如下: (1) 在要创建角色的数据库文件夹下,在“角色”上右击鼠标,然后选择“新建数据库角色”命令,打开“数据库角色属性”对话框,在名称栏中输入自定义角色名称(这里输入”licbRole”),选中“标准角色”单选按钮。 (2) 设置完成后,单击“确定”按钮即可创建新角色。
数据库角色 (3) 在第一次创建数据库角色时,不能为其指定权限。但是可在创建完成后,通过其属性对话框来指定权限。在新创建的角色上右击鼠标,打开“数据库角色属性”对话框,单击“权限”按钮,在打开的权限设置对话框中进行设置。设置完成后,单击“确定”按钮。
数据库角色 2. 应用程序角色 在处理复杂数据库和含有大表的数据库中,为了让某些用户只能通过特定的应用程序间接地存取数据库中的数据,而不是直接地存取数据库数据,以达到对个别应用程序实施特定的安全性控制时,就应该考虑使用应用程序角色。当某一用户使用了应用程序角色时,他便放弃了已被赋予的所有数据库专有权限,他所拥有的只是应用程序角色被设置的角色。通过应用程序角色,能够以可控的方式限定用户的语句或者对象权限。
思考题 现有一应用,有如下要求:用户Sue在销售应用程序中,对数据库Sales中的表Products和Orders上有SELECT、UPDATE和INSERT权限,但他在使用SQL查询分析器或任何其他工具访问Products或Orders表时不应有SELECT、INSERT或UPDATE权限。 问:如何进行上述的安全性控制? 答:可以创建一个拒绝Products和Orders表上的SELECT、INSERT或UPDATE权限的用户-数据库角色,然后将Sue添加为该数据库角色的成员。接着在Sales数据库中创建带有Products和Orders表上的SELECT、INSERT和UPDATE权限的应用程序角色。当应用程序运行时,它通过使用sp_setapprole提供密码激活应用程序,并获得访问Products和Orders表的权限。
练习题 1.SQL Server提供了哪两种身份验证模式。 2.简述何为guest用户。 3.简述何为权限验证? 4.简述何为public角色。 5.简述何为固定数据库角色? 6.简述何为数据库所有者(dbo)? 7. 在SQL Server企业管理器中完成如下操作: (1) 创建一个登录账号”ABC”,密码为“123456”。 (2) 为factory数据库中创建一个用户账号,并将其关联到ABC登录账号中。