Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9904025
  • 博文数量: 299
  • 博客积分: 9955
  • 博客等级: 中将
  • 技术积分: 4177
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-27 20:59
文章分类
文章存档

2015年(1)

2012年(2)

2011年(9)

2010年(47)

2009年(108)

2008年(132)

我的朋友

分类: Mysql/postgreSQL

2009-10-02 13:44:58

第8学时登录和安全
现在该是你认识到你的数据库存在着一些问题的时候了。这个问题就是数据库存有巨量
数据,如果这些数据落到坏人手里,对你的公司和你公司里的雇员来说,那将是极大的危害。
这些数据可能是个人信息、客户清单或机密的产品资料。你不希望你的竞争对手以及通常无
需看到这些内容的人进入你的数据库。SQL Server有足够强大的安全系统供你锁住服务器,
籍此你可以控制对服务器的访问以及对数据库直到一个表的特定列的访问。
本学时的要点包括:
• 安全性的需求
• SQL Server安全基础
• 安全模式
• 服务器登录和数据库用户
• 角色
8.1 安全性的需求
在我们深入学习设置SQL Server安全性之前,你需要正确理解安全性的需求。安全性的
威胁可能来自三个方面。它们是外来入侵者进入你的系统、你自己公司的人、意外闯入。
外来入侵者是你公司以外的试图访问你系统的人。这些人这样做有几种理由。例如,这
些人这么做可能仅仅是恶作剧,或者为了把情报卖给另一家公司,或者他们可能是另一家公
司的人。这种类型的入侵在某种程度上并不多,因为大多数公司采取相当简单的基本方法就
可以阻止这种类型的入侵。尽管如此,此类入侵还是发生过。我曾见过的此类入侵的例子是
一个人访问了一个公司的内部网站点和公司的客户清单。对多数公司来说,这对公司生意非
常危险。
你自己公司内部的人可能是入侵你系统的最普遍的情况。这种类型的人常常有一些不可
告人的动机驱使他去访问那些他们不该看的东西。其中一些人可能仅仅是好奇,而另一些人
则是有敌意的。要阻止这种类型的入侵进入你的系统,你确实要特别地看管好你的全部系统,
并尽可能地锁住系统。问题是在合伙项目中,允许多数用户在任何时候做他们想做的事。如
果你锁住系统,一些用户便会抱怨这里是“少年管教所”。重要的是你要保证所有这些用户所
关心的问题都得到解决,并告诉他们为什么要锁住系统。这类入侵的一个例子就发生在我曾
工作过的一个客户站点。他们有一个雇员,他对公司所做的一些决定不满,所以他便获取了
对H R数据库的访问,并得到了每个人薪水的清单。他用电子邮件把清单发给一些人,还把清
单打印出来放在打印机旁。这导致公司内部严重不和,还引发了一些道义上的问题。
意外入侵系统也是一种很普通的类型。这种类型的入侵可能是一个用户登录到一个系统,
本想得到某一个结果,而没有得到。相反,你发现该用户最后得到的比他原来要的还多。一
个这类的例子是,有个公司依靠一个非管理员身份的人建立和修改登录数据库的用户。这个
人在一个指定的数据库中偶然设置了一个用户为该数据库的拥有者。所发生的一切便是现在
这个人可以获得全部新权限。
这里列出了三个例子,因此你能意识到保护你的SQL Server的重要性。这不是说让你过
分地一直小心谨慎,尽管这在一定程度上有所帮助。你应当把它作为安全重要性的一个警告,
然后按适合的步骤保证你的服务器很好地锁住。
8.2 SQL Server安全基础
SQL Server有大量的术语和概念需要你熟悉。这些概念包括允许一个用户进入不同安全
模式下的数据库时, SQL Server采取的实际步骤,这些我们一会儿将讨论。首先,你需要学
习许多术语。如下所述:
• 登录ID(Login ID)—登录I D是用户为获准访问SQL Server而输入的内容的一部分。随
服务器所采用的安全模式不同,用户不一定非要提供它。
• 口令( P a s s w o r d )—这看起来很明白,口令是输入服务器的一个字符串,用它来认证用
那个使用特定登录I D登录的人正是他所自称的人。多数人可能知道一个好口令的准则,
但是我们还是要搞清楚。好的口令应包括字母和数字的组合,且不少于6个字符。你不
应使用诸如你配偶的名字、你孩子的名字、你的狗的名字、你的猫的名字或是你的用户
的名字来作口令。这是因为任何一个认识你的人都可能猜出你的口令是什么。一些好的
口令例如1 0 s n e 1、1 4 d e r o a d或f 8 f u l d a y。这些口令好处有两点。第一,它们包括字母和
数字且不包括任何字典中有的实际词汇。第二,这些口令记起来相当容易,因为你读到
它们就知道含义了。另一个选择是使用短语的第一个字母然后再放进去一些数字。例如,
SAMS Teach Yourself SQL Server 7.0 in 24 Hours转换为s t y s s 7 i 2 4 h。
• 用户ID(User ID)—这是你为获准访问某个数据库所必须做的另一步。我们前面所讲的
登录I D和口令只能让你进入服务器。如果只到这,你还不能访问服务器里的任一个数据
库。每个访问数据库的用户都在数据库中被分配了一个用户I D。多数情况下,用户I D和
登录I D相同。在SQL Server认证登录I D并决定让用户访问服务器后,这个用户需要选择
一个工作数据库。SQL Server接着在该数据库的所有用户I D中检查登录I D,以保证那个
用户确实可以访问该数据库。如果没有一个用户I D对应这个登录I D,SQL Server将不允
许这个用户做任何事情。
• 角色( R o l e )—角色是为了易于管理而按相似的工作属性对用户进行分组的一种方式。
在旧版本的SQL Server中角色被作为组。在功能上,它们以相同的方式运行。为了不用
给数据库中每个个人用户一一分配许可,你可以创建一个角色,给这个角色分配用户,
然后给这个角色分配许可。因此当你有了一个新用户时,你只要把他增加到角色中,他
便有所需的所有许可了,这样节省了管理员的时间。因为还有许多老的SQL Server管理
员,所以你会经常听到角色仍被叫作组。
• 应用程序角色—这是一种特殊类型的角色,只允许特定的应用程序访问数据库中的数
据。大多数SQL Server管理员想拥有这种功能已经很多年了。它所做的是强迫用户只能
通过应用程序访问数据库中的数据。这非常重要,因为大多数用户能够使用某个应用程
序如MicroSoft Acess,它能连接到数据库并让用户直接访问其中的表。这就迫使用户要
使用专门编写的应用程序访问数据并禁止所有其他的应用程序这么做。
• Windows NT组—SQL Server 的安全性很大程度上基于Windows NT 的安全性。
7 0 SQL Server 7 24学时教程
下载
Windows NT组能直接映射为SQL Server角色,这就允许任何在组中登记的用户获准访
问SQL Server。
认证过程
现在你已经对后面将会遇到的不同的术语有了一个概念,我们需要学习实际的认证过程。
对试图访问服务器的用户将会进行四层检查。每次,用户都要被检查是否具有适当的访问权。
如果他们有,将被放行。如果没有,用户将收到一个出错信息,其进程被终止。
安全性的第一层在网络层。大多数情况下,用户将被登录到Windows NT网络,但是他们
也能登录到任何与Windows NT共存的网络。用户必须提供一个有效的网络登录I D和口令,否
则其进程将被终止在这一层。看起来有很多方法可通过这一层,实际上并非如此。主要的一
个情况就是当用户使用一个I n t e r n e t应用程序(如网页)在数据库中查询数据的时候。尽管用户
可能必须也可能不必为访问网络提供登录认证,但是代理的帐号或应用程序在该服务器上运
行的帐号还是要登录到网络的。
安全性的第二层在服务器自身。当用户到这层时,他必须提供一个有效的登录I D和口令
才能继续向前。随着服务器的安全模式不同, SQL Server可能会检测你登录到Windows NT的
登录I D。
安全性的第三层比较有趣。当一个用户通过第二层后,通常假定他有访问服务器上数据
库的许可,但是并不是这样。相反,用户必须在他想要访问的数据库里有一个分配好的用户
I D。这层没有口令;取而代之的是登录I D被系统管理员映射为用户I D上。如果用户未被映射
到任何数据库,他就几乎什么也做不了,仅一种情况例外。有可能在数据库里有一个g u e s t用
户I D。在这种情况下,用户通过一个合法的登录I D获准访问服务器,但是他不能访问数据库,
而那个数据库里含有一个g u e s t用户I D。许可可以分配给g u e s t用户I D,正如你可以分配给其他
任何用户一样。默认情况下,新数据库不包含g u e s t用户I D。
SQL Server安全性的最后一层是处理许可。在这层SQL Server检测用户用来访问服务器的
用户I D是否获准访问服务器中的特定对象。可能只允许访问数据库中指定的对象,而不允许
访问其他对象,这是通常的运行方式。
正如你可能发现的,这些安全层使得未被授权的用户很难访问你的服务器。因为安全性
的多层结构, 微软增加了一些特点来让你不太困难地设置安全性。我们一会儿就要讲到。在
此之前,你必须先弄清SQL Server运行的几种不同的安全模式。
8.3 安全模式
SQL Server提供了两种不同的方法来认证用户进入服务器。根据你的网络是如何配置的,
可以决定使用其中一种。第一种方法—Windows NT认证依靠Windows NT执行所有的认证。
第二种方法—SQL Server混合认证允许Windows NT认证也允许SQL Server执行它自己的对
用户登录信用的认证。
8.3.1 Windows NT认证
对SQL Server来说,Windows NT认证是首选的方法。因为Windows NT能对自身的安全
系统实施更多的特征,如最小口令长度、口令终止期限、审核、安全确认和几次登录尝试失
第8学时登录和安全7 1
下载
败后的帐户锁停。Windows NT认证只能用在运行Windows NT的服务器上。有了Windows NT
认证,SQL Server不再要求用户为访问数据库服务器而提供登录I D和口令。SQL Server会查
询Wi n d o w s N T中的用户姓名,然后与它从允许的用户姓名清单中返回的姓名作比较。使用
Windows NT认证,口令检查就不再执行,因为SQL Server信任Windows NT,并且如果它说
用户已经登录过了, SQL Server也会相信。
下面将教你设置SQL Server以在Windows NT 认证下运行。
1) 打开SQL Enterprise Manager,连接到你要改变安全模式的服务器上。
2) 按鼠标右键点击你要改变的服务器名字,并选择“ P r o p e r t i e s”选项。这样就打开了
“SQL Server Properties”对话框。
3) 找到并点击“S e c u r i t y”分页。这样就显示了“ S e c u r i t y”分页,如图8 - 1所示。
4) 要改变服务器使它运行在Windows NT 认证下,选择“Windows NT only”选项。
5) 为让这些改变生效,你必须重新启动SQL Server。在你重新启动前, SQL Server将不
会运行在新的安全模式下。
8.3.2 SQL Server混合认证
尽管SQL Server混合认证不是认证用户的首选方法,但是常常是你的唯一选择。这是因
为,如同我们前面提到的, Windows NT认证要求用户连接的服务器必须登录到Windows NT
域。对于混合环境,这无法采用,因为一些客户机不能登录到Windows NT。混合认证结合了
前面所提到的Windows NT认证的优势。主要的区别是认证方法是通过SQL Server实现的。因
为它有许多层次,所以显得复杂得多。记住当你在Windows 95/98计算机上运行SQL Server时,
SQL Server认证是你唯一可用的方法。
在混合认证设置中,如果一个客户机连接到服务器但没有传来登录I D和口令, S Q L
S e r v e r就会自动认定用户想要使用Windows NT认证,并使用那种方法来认证用户。如果用户
确实传来了一个登录I D和口令,SQL Server就认为用户是经由SQL Server认证连接的。在S Q L
S e r v e r认证过程中,用户传给服务器的登录信息与系统表进行比较。如果两个口令匹配, S Q L
S e r v e r允许用户访问服务器。如果不匹配, SQL Server不允许访问,并且用户会从服务器上收
到一个出错信息。
7 2 SQL Server 7 24学时教程
下载
图8-1 “SQL Server Prop
e r t i e s ”对话框的
“S e c u r i t y”分页
下面将教你设置服务器以运行在SQL Server 混合认证模式下:
1) 打开SQL Enterprise Manager,连接到你要改变安全模式的服务器上。
2) 按鼠标右键点击你要改变的服务器名字,并选择“ P r o p e r t i e s”选项。这样就打开了
“SQL Server Properties”对话框。
3) 找到并点击“S e c u r i t y”分页。这样就显示了“ S e c u r i t y”分页,如图8 - 2所示。
4) 要改变服务器使它运行在SQL Server混合认证模式下,选择“ SQL Server and Wi n d o w s
N T”选项。
5) 为让这些改变生效,必须重新启动SQL Server。在重新启动前, SQL Server将不会运
行在新的安全模式下。
8.4 服务器登录和数据库用户
和在SQL Server上完成的任何其他任务一样,可有几种不同的方法在你的服务器上创建
登录I D和用户I D。第一种完成该任务的方法是通过SQL Enterprise Manager中的向导。这个向
导将会引导你一步一步地创建一个登录I D和用户I D。它们已经合为一体,因为它们实际上执
行起来彼此相关。第二种选择是使用系统存储过程创建I D。如果选择这种方法,在需要的情
况下可以在你所有的服务器上再重复创建同样的用户登录。最后一个选项是在SQL Enterprise
M a n a g e r中单独创建登录I D和用户I D。我们将不讲解最后一种方式,但是你可以从B o o k s
O n l i n e上找到更多的资料。
使用SQL Enterprise Manager创建登录ID和用户ID
使用SQL Enterprise Manager创建登录I D和用户I D最大的好处是容易。这是因为微软已经
提供向导来引导你设置每一件事。这非常有用,因为它不会让你忘记任何重要的步骤。下面
将教你在你的系统中创建登录I D和用户I D:
1) 打开SQL Enterprise Manager,连接到你要创建登录I D的服务器上。
2) 从“To o l s”菜单中,选择“Wi z a r d s”。这将打开“Selcet Wi z a r d”对话框,如图8 - 3所
示。
3) 展开“ D a t a b a s e”树,选择“ Create Loign Wi z a r d”,并点击“ O K”按钮。这将打开
Create Login Wi z a r d,如图8 - 4所示。
第8学时登录和安全7 3
下载
图8-2 “SQL Server Prop
e r t i e s”对话框的
“S e c u r i t y”分页
4) 下一屏,如图8 - 5所示,允许你选择将要创建登录的认证模式。如果你已经选择
Windows NT认证模式,SQL Server将只允许你选择这个选项。否则,两个选项你都可以使用。
5) 如果选择Windows NT 认证,你将看到屏幕上如图8 - 6所示。在屏幕上,要求提供两条
信息。第一条是为用户提供一个Windows NT用户名。你不能浏览查找用户,因此你必须知道
用户名和用户所在的域名。必须按“ D O M A I N \ U S E R”的格式输入用户名。另一个必须选择
的选项是禁止或允许这个用户访问服务器。
7 4 SQL Server 7 24学时教程
下载
图8-3 “Selcet W i z a r d”
对话框
图8-4 Create Login Wi z a r d
图8-5 “Select Authentication
Mode”屏幕
6) 如果选择使用SQL Server认证来登录,你将看到如图8 - 7所示的屏幕。在屏幕上,要求
你为用户I D提供一个登录I D和口令。
7) 在定义完登录I D后,下一屏是“Grant Access to Security Roles”屏,如图8 - 8所示。这
屏告诉SQL Server该用户是否能执行某些类型的管理功能。这些功能可以用来卸载某类任务。
8) 下一屏是“ Grant Access to Databases”屏,如图8 - 9所示,让你选择新用户可以访问的
数据库。
9) 最后一屏是任务总结屏,如图8 - 1 0所示,上面描述了在创建登录和用户I D的过程中
SQL Server所要进行的全部工作。在点击“ N e x t”按钮后, SQL Server会执行所有这些任务并
第8学时登录和安全7 5
下载
图8-6 “Windows NT Authe
n t i c a t i o n”屏幕
图8-7 “Authentication with
SQL Server”屏幕
图8-8 “Grant Access to
Security Roles”屏
创建该登录I D。
增加一个用户I D到服务器的另一种方法是使用系统存储过程并运行SQL Query Analyzer。
对于Windows NT认证,可以使用s p g r a n t l o g i n存储过程。当用SQL Server认证时,可以使用
s p a d d l o g i n存储的程序。s p g r a n t l o g i n的语法格式如下:
这里选项用的是Windows NT用户的名字,在其中加上用户所在的域。例如,将M o n o p o l y
域中的用户M r M o n e y加到SQL Server,你可执行如下语句:
这将准许这个用户访问该数据库,但是不允许他进一步访问。用s p a d d l o g i n程序将一个
用户添加到数据库中。该过程的语法如下:
以下是其中选项的意义:
选项描述
@loginame = 'login' 这是要增加到服务器上的登录I D
7 6 SQL Server 7 24学时教程
下载
图8-9 “Grant Access to
D a t a b a s e s”屏
图8-10 最后的任务总结屏
(续)
选项描述
@passwd = 'password' 这是要增加的登录I D的口令
@defdb = 'database' 这是新增用户的缺省数据库。缺省数据库是用户登录到服务器
上后,用户能自动使用的数据库,你还要分配给用户使用这个数
据库的许可
@deflanguage = 'language' 这是用户缺省使用的语言。可能有多种语言安装在服务器上,允
许用户用他自己的语言从SQL Server中接收错误和资料信息
@sid = 'sid' 这是一个可以分配给用户的安全I D号。这个选项通常不使用
@encryptopt = 'encryption_option' 该选项用来告诉SQL Server是否对你输入的口令加密。不对口
令加密不是好方案。该选项不常用
使用以下的这个存储过程,能增加一个用户到名为“ m d a v i s”的服务器上,同时他有一
个口令“i n i t i a l”和一个缺省的数据库“ p u b s”。
在把该登录添加到服务器上后,必须增加用户I D到他们有可能访问的数据库上。否则,
这些用户不能访问那些数据库。你可以使用存储过程s p g r a n t d b a c c e s s。其语法格式如下:
下面是选项的意义:
选项描述
@loginame = 'login' 这是你已增加到服务器上的登录I D。这个I D必须已经添加到服务器
@name_in_db = 'name_in_db' 这是用户将被添加到的数据库的名字
8.5 角色
角色基本上是你可用来组织具有相似访问需要的用户的组。你可使用以下一些不同类型
的角色:
• 预定义服务器角色
• 预定义用户角色
• 公共角色
• 定制数据库角色
这些不同种类的角色,每一个都允许你执行数据库中的不同功能。
8.5.1 预定义服务器角色
服务器角色可以用来让你分一些服务器管理权给其他人。你可做的其中一件事就是允许
某个用户建立和修改数据库。在服务器上有七种预定义服务器角色。它们是:
• s y s a d m i n—s y s a d m i n服务器角色成员允许在服务器上执行任何操作。这是所有服务器
角色中功能最强大的,与SQL Server以前版本中的sa 帐号相似。
• serveradmin—s e r v e r a d m i n角色成员允许执行一些服务器范围内的设置。
• s e t u p a d m i n—s e t u p a d m i n服务器角色成员允许增加和删除连接的服务器,并执行一些
系统存储过程,如s p s e r v e r o p t i o n。
• securityadmin—s e c u r i t y a d m i n组成员能管理SQL Server登录。
第8学时登录和安全7 7
下载
• p r o c e s s a d m i n—p r o c e s s a d m i n组成员能管理任何运行在SQL Server上的过程。该组成员
允许运行诸如K I L L的命令。
• dbcreator—d b c r e a t o r服务器组成员拥有在服务器上创建数据库的权利。
• diskadmin—d i s k a d m i n服务器组成员拥有创建和管理磁盘文件的权利。
8.5.2 预定义数据库角色
预定义数据库角色用来让用户在数据库中执行各种功能。同预定义服务器角色一样,预
定义数据库角色能用来分配管理功能给其他用户。有九种预定义数据库角色可供你使用,它
们是:
• d b o w n e r—该组成员被认为是数据库拥有者。这些用户可以在数据库内执行所有数据
库角色的活动,还有其他维护和设置活动。
• d b a c c e s s a d m i n—该组成员允许在数据库中增加和删除Windows NT 和SQL Server用
户。
• db_datareader—该组成员可以看数据库中所有用户表中的数据。
• db_datawriter—该组成员允许在数据库里所有用户表上增加、修改或删除数据。
• db_ddladmin—该组成员允许在数据库中增加、修改、删除对象。
• d b s e c u r i t y a d m i n—该组成员能管理角色和SQL Server数据库角色中的成员,还能管理
语句和数据库中的对象许可。
• db_backupoperator—该组成员有备份数据库的权利。
• db_denydatareader—该组成员不允许看数据库中的任何数据。
• db_denydatawriter—该组成员不允许对数据库中的数据做任何变动。
8.5.3 公共角色
公共角色是一个特殊的数据库角色,数据库中每个用户都是其中一员。当每个数据库第
一次建立时,这个角色就在其中创建好了。作为一名管理员,你不能对公共角色的属性做任
何修改,并且不能从这个角色中增加或删除用户。当你需要提供一种许可缺省设置给所有用
户时,公共角色的作用就可以显现了。例如,如果你希望数据库中的每个用户在一张特定的
表上都有S E L E C T许可,把这个许可分配给公共角色,这样所有用户都拥有了这个许可。
8.5.4 定制数据库角色
定制数据库角色是管理员为了特殊目的而创建的数据库角色。定制数据库角色提供了分
配给用户特定许可的能力,而这是内建角色所不能提供的。你在使用定制数据库角色时,需
要记住以下几点:
• 定制数据库角色建立在数据库内部,不能跨多个数据库。
• 用户不能同时属于多个定制数据库角色。
• 定制角色能包括Windows NT 登录I D、SQL Server登录I D和其他SQL Server角色。
8.6 课时小结
在本学时中,我们学习了关于SQL Server安全性和SQL Server安全模式的内容。你要记住
7 8 SQL Server 7 24学时教程
下载
的重要一点是,设置安全性时,你的有点固执才行。此后,我们介绍了登录I D、用户I D和角
色。这些对了解怎样进行管理是很重要的,因为它们教你如何控制对你的数据库的访问。
8.7 专家答疑
问题:我是一名小公司的数据库管理员,我认识和相信所有在公司工作的雇员。安全性
真的有那么重要吗?
解答:毫无疑问。即使你相信所有和你一起工作的雇员,在你的系统上维持相当高等级
的安全性仍是一个极好的主意。即使你相信你的用户,还是需要保证有足够的安全环境防备
外来用户。
问题:我不想在我的数据库里有一个公共组。我能删除它吗?
解答:没有办法在任何数据库删除一个公共组。它必须保留。
8.8 课外作业
这些思考题和练习题是供你加深理解用的。答案可以在附录“答案”中找到。
8.8.1 思考题
1) 为什么安全性很重要?
2) 什么是登录I D?
3) 什么是用户I D?
4) 角色用来做什么?
5) 应用程序角色用来做什么?
6) SQL Server认证和Windows NT认证有什么区别?
7) 公共角色用来做什么?
8.8.2 练习题
使用SQL Enterprise Manager在你的SQL Server创建一个登录I D,它使用SQL Server 认证,
能访问p u b s数据库。
阅读(627) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~