SQL Server 2008提供了Windows身份和混合身份两种验证模式,每一种身份验证都有一个不同类型的登录账户。无论哪种模式,SQL Server 2008都需要对用户的访问进行两个阶段的检验:验证阶段和许可确认阶段。
验证阶段 用户在SQL Server 2008获得对任何数据库的访问权限之前,必须登录到SQL Server上,并且被认为是合法的。SQL Server或者Windows要求对用户进行验证。如果验证通过,用户就可以连接到SQL Server 2008上;否则,服务器将拒绝用户登录
许可确认阶段 用户验证通过后会登录到SQL Server 2008上,此时系统将检查用户是否有访问服务器上数据的权限。
技巧:如果在服务器级别配置安全模式,它们会应用到服务器上的所有数据库。但是,由于每个数据服务器实例都有独立的安全体系结构,这就意味着不同的数据库服务器实例,可以使用不同的安全模式。
1.Windows身份验证
使用Windows身份验证模式是默认的身份验证模式,它比混合模式要安全得多。当数据库仅在内部访问时使用Windows身份验证模式可以获得最佳工作效率。在使用Windows身份验证模式时,可以使用Windows域中有效的用户和组账户来进行身份验证。这种模式下,域用户不需要独立的SQL Server用户账户和密码就可以访问数据库。这对于普通用户来说是非常有益的,因为这意味着域用户不需记住多个密码。如果用户更新了自己的域密码,也不必更改SQL Server 2008的密码。但是,在该模式下用户仍然要遵从Windows安全模式的所有规则,并可以用这种模式去锁定账户、审核登录和迫使用户周期性地更改登录密码。
当用户通过Windows用户帐户连接时,SQL Server使用操作系统中的Windows 主体标记验证帐户名和密码。也就是说,用户身份由Windows进行确认。SQL Server 不要求提供密码,也不执行身份验证。
图2所示,就是本地账户启用SQL Server Manage-ment Studio窗口是,使用操作系统中的Windows 主体标记进行的连接。2Windows身份验证模式
其中,服务器名称中MR代表当前计算机名称,Administrator是指登录该计算机时使用的Windows账户名称。这也是SQL Server默认的身份验证模式,并且比SQL Server身份验证更为安全。Windows身份验证使用Kerberos安全协议,提供有关强密码复杂性验证的密码策略强制,还提供帐户锁定支持,并且支持密码过期。通过Windows身份验证完成的连接有时也称为可信连接,这是因为 SQL Server 信任由 Windows 提供的凭据。
Windows省份验证模式有以下主要优点:
数据库管理员的工作可以集中在管理数据库上面,而不是管理用户账户。对用户账户的管理可以交给Windows去完成。
Windows有更强的用户账户管理工具。可以设置账户锁定、密码期限等。如果不通过定制来扩展SQL Server,SQL Server则不具备这些功能。
Windows的组策略支持多个用户同时被授权访问SQL Server。
2.混合模式
使用混合安全的身份验证模式,可以同时使用Windows身份验证和SQL Server登录。SQL Server登录主要用于外部的用户,例如那些可能从Internet访问数据库的用户。可以配置从Internet访问SQL Server 2008的应用程序以自动地使用指定的账户或提示用户输入有效的SQL Server用户账户和密码。
使用混合安全模式,SQL Server 2008首先确定用户的连接是否使用有效的SQL Server用户账户登录。如果用户有有效的登录和使用正确的密码,则接受用户的连接;如果用户有有效的登录,但是使用不正确的密码,则用户的连接被拒绝。仅当用户没有有效的登录时,SQL Server 2008才检查Windows账户的信息。在这种情况下,SQL Server 2008将会确定Windows账户是否有连接到服务器的权限。如果账户有权限,连接被接受;否则,连接被拒绝。
当使用混合模式身份验证时,在SQL Server中创建的登录名并不基于Windows用户帐户。用户名和密码均通过使用SQL Server创建并存储在SQL Server中。通过混合模式身份验证进行连接的用户每次连接时必须提供其凭据(登录名和密码)。当使用混合模式身份验证时,必须为所有SQL Server帐户设置强密码。图3所示,就是选择混合模式身份验证的登录界面。
3使用SQL Server身份验证
如果用户是具有 Windows 登录名和密码的 Windows 域用户,则还必须提供另一个用于连接的(SQL Server)登录名和密码。记住多个登录名和密码对于许多用户而言都较为困难。每次连接到数据库时都必须提供 SQL Server 凭据也十分繁琐。混合模式身份验证的缺点如下所示。
SQL Server身份验证无法使用 Kerberos 安全协议。
SQL Server登录名不能使用 Windows 提供的其他密码策略。
混合模式身份验证的优点如下。
允许SQL Server支持那些需要进行SQL Server身份验证的旧版应用程序和由第三方提供的应用程序。
允许SQL Server支持具有混合操作系统的环境,在这种环境中并不是所有用户均由Windows域进行验证。
允许用户从未知的或不可信的域进行连接。例如,既定客户使用指定的SQL Server登录名进行连接以接收其订单状态的应用程序。
允许SQL Server支持基于Web的应用程序,在这些应用程序中用户可创建自己的标识。
允许软件开发人员通过使用基于已知的预设SQL Server登录名的复杂权限层次结构来分发应用程序。
注意:使用SQL Server身份验证不会限制安装 SQL Server 的计算机上的本地管理员权限。
3.配置身份验证模式
通过前面的学习,大家已经对SQL Server 2008的两种身份验证模式有了一定的认识。下面我们将学习在安装SQL Server之后,设置和修改服务器身份验证模式的操作方法。
在第一次安装SQL Server 2008或者使用SQL Server 2008连接其他服务器的时候,需要指定验证模式。对于已指定验证模式的SQL Server 2008服务器还可以进行修改,具体操作步骤如下:
(1)打开SQL Server Management Studio窗口,选择一种身份验证模式建立与服务器的连接。
(2)在【对象资源管理器】窗口中右击当前服务器名称,选择【属性】命令,打开【服务器属性】对话框,如图9-4所示。
4打开【服务器属性】对话框
在默认打开的【常规】选项卡中,显示了SQL Server 2008服务器的常规信息,包括SQL Server 2008的版本、操作系统版本、运行平台、默认语言以及内存和CPU等等。
(3)在左侧的选项卡列表框中,选择【安全性】选项卡,展开安全性选项内容,如图5所示。在此选项卡中即可设置身份验证模式。
5【安全性】选项卡
(4)通过在【服务器身份验证】选项区域下,选择相应的单选按钮,可以确定SQL Server 2008的服务器身份验证模式。无论使用哪种模式,都可以通过审核来跟踪访问SQL Server 2008的用户,默认时仅审核失败的登录。
当启用审核后,用户的登录被记录于Windows应用程序日志、SQL Server 2008错误日志或两种之中,这取决于如何配置SQL Server 2008的日志。可用的审核选项如下:
无 禁止跟踪审核
仅限失败的登录 默认设置,选择后仅审核失败的登录尝试。
仅限成功的登录 仅审核成功的登录尝试。
失败和成功的登录 审核所有成功和失败的登录尝试。
与两种验证模式一样,服务器登录也有两种情况:可用使用域账号登录,域账号可用是域或本地用户账号、本地组账户或通用的和全局的域组账户;可用通过指定唯一的登录ID和密码来创建SQL Server 2008登录,默认登录包括本地管理员组、本地管理员、sa、Network Service和SYSTEM。
系统管理员组 SQL Server 2008中管理员组在数据库服务器上属于本地组。这个组的成员通常包括本地管理员用户账户和任何设置为管理员本地系统的其他用户。在SQL Server 2008中,此组默认授予sysadmin服务器角色。
管理员用户账户 管理员在SQL Server 2008服务器上的本地用户账户。该账户提供对本地系统的管理权限,主要在安装系统时使用它。如果计算机是Windows域的一部分,管理员账户通常也有域范围的权限。在SQL Server 2008中,这个账户默认授予sysadmin服务器角色。
Sa登录 是SQL Server系统管理员的账户。而在SQL Server 2008中采用了新的集成和扩展的安全模式,sa不再是必需的,提供此登录账户主要是为了针对以前SQL Server版本的向后兼容性。与其他管理员登录一样,sa默认授予sysadmin服务器角色。在默认安装SQL Server 2008的时候,sa账户没有被指派密码。
注意: 如果要组织非授权访问服务器,可以为sa账户设置一个密码,而且应该像Windows账户密码那样,周期性地进行修改。
Network Service和SYSTEM登录 它是SQL Server 2008服务器上内置的本地账户,而是否创建这些账户的服务器登录,依赖于服务器的配置。例如,如果已经将服务器配置为报表服务器,此时将有一个NETWORK SERVICE的登录账户,这个登录将是mester、msdb、ReportServer和ReportServerTempDB数据库的特殊数据库角色RSExceRole的成员。
在服务器实例设置期间,NETWORK SERVICE和SYSTEM账户可以是为SQL Server、SQL Server代理、分析服务和报表服务器所选择的服务账户。在这种情况下,SYSTEM账户通常具有sysadmin服务器和角色,允许其完全访问以管理服务器实例。
只有获得Windows账户的客户才能建立与SQL Server 2008的信任连接(即SQL Server 2008委托Windows验证用户的密码)。如果正在为其创建登录的用户(比如Novell客户)无法建立信任连接,则必须为他们创建SQL Server账户登录。下面来创建两个标准登录,以供后面使用。具体操作过程如下。
(1)打开Microsoft SQL Server Management Studio,展开【服务器】节点,然后展开【安全性】节点。
(2)右击【登录名】节点,从弹出的菜单中选择【新建登录名】命令,将打开【登录名-新建】窗口,然后输入登录名为shop_Manage,同时,选择【SQL Server身份验证】单选按钮,并设置密码,如图6所示。
6创建SQL Server 登录账户
(4)单击【确定】按钮,完成SQL Server 登录账户的创建。
为了测试创建的登录名是否成功,下面用新的登录名shop_Manage来进行测试,具体步骤如下所示:
(1)在SQL Server Management Studio中,单击【连接】|【数据库引擎】命令,将打开【连接到服务器】窗口。
(2)从【身份验证】下拉表中,选择【SQL Server身份验证】选项,【登录名】文本框中输入shop_Manage,【密码】文本框输入相应的密码,如图7所示。
7连接服务器
(3)单击【连接】按钮,登录服务器,如图9-8所示。
8使用shop_Manage登录成功
但是由于默认的数据库是master数据库,所有其他的数据库没有权限访问。这里访问“网店购物系统”数据库,就会提示错误信息,如图9所示。
9无法访问数据库
要访问特定的数据库,还必须具有用户名。用户名在特定的数据库内创建,并关联一个登录名(当一个用户创建时,必须关联一个登录名)。通过授权给用户来指定用户可以访问的数据库对象的权限。可以这样想象,假设SQL Server是一个包含许多房间的大楼,每一个房间代表一个数据库,房间里的资料可以表示数据库对象。则登录名就相当于进入大楼的钥匙,而每个房间的钥匙就是用户名。房间中的资料则可以根据用户名的不同而有不同的权限。
在上一节中,我们介绍了创建登录账户。而创建的登录账户将不为该登录账户映射相应的数据库用户,所以该登录账户无法访问数据库。一般情况下,用户登录SQL Server实例后,还不具备访问数据库的条件。在用户可以访问数据库之前,管理员必须为该用户在数据库中建立一个数据库账号作为访问该数据库的ID。这个过程就是将SQL Server登录账号映射到需要访问的每个数据库中,这样才能够访问数据库。如果数据库中没有用户账户,则即使用户能够连接到SQL Server实例也无法访问到该数据库。
下面通过使用SQL Server Management Studio来创建数据库用户账户,然后给用户授予访问数据库“网店购物系统”的权限。具体步骤如下所示:
(1)打开SQL Server Management Studio,并展开【服务器】节点。
(2)展开【数据库】节点,然后再展开“网店购物系统”节点。
(3)再展开【安全性】节点,右击【用户】节点,从弹出菜单中选择【新建用户】命令,打开【数据库用户-新建】窗口。
(4)单击【登录名】文本框旁边的【选项】按钮 ,打开【选择登录名】窗口,然后单击【浏览】按钮,打开【查找对象】窗口,选择刚刚创建的SQL Server登录账户shop_Manage,如图10所示。
10选择登录账户
(5)单击【确定】按钮返回,在【选择登录名】对话框就可以看到选择的登录名对象,如图11所示。
11 【选择登录名】对话框
(6)单击【确定】按钮返回。设置用户名为WD,选择架构为dbo,并设置用户的角色为db_owner,具体设置如图12所示。
12 新建数据库用户
(7)单击【确定】按钮,完成数据库用户的创建。
(8)为了验证是否创建成功,可以刷新【用户】节点,用户就可以看到刚才创建的WD用户账户,如图13所示。
13 查看【用户】节点
数据库用户创建成功后,就可以使用该用户关联的登录名shop_Manage进行登录,就可以访问“网店购物系统”的所有内容,如图14所示。
14 查看【场馆信息】表
添加数据库用户还可以用系统存储过程sp_grantdbaccess来实现,具体语法是:
CREATE USER user_name
[ { { FOR | FROM }
{
LOGIN login_name
| CERTIFICATE cert_name
| ASYMMETRIC KEY asym_key_name
}
| WITHOUT LOGIN
]
[ WITH DEFAULT_SCHEMA = schema_name ]
其中语法的参数介绍如下:
user_name 指定在此数据库中用于识别该用户的名称。user_name是sysname。他的长度最多是128个字符。
LOGIN login_name 指定要创建数据库用户的SQL Server登录名。login_name必须是服务器中有效的登录名。当此SQL Server登录名进入数据库时,他将获取正在创建的数据库用户的名称和ID。
CERTIFICATE cert_name 指定要创建数据库用户的证书。
ASYMMETRIC KEY asym_key_name 指定要创建数据库用户的非对称密钥。
WITH DEFAULT_SCHEMA = schema_name 指定服务器为此数据库用户解析对象名时将搜索的第一个架构。
WITHOUT LOGIN 指定不应将用户映射到现有登录名。
下面的例子建立了一个SQL Server的登录账户,然后将该账户添加为“网店购物系统”数据库的用户。
USE master
GO
CREATE LOGIN admin
WITH PASSWORD = 'admini_strator';
USE 网店购物系统
CREATE USER admin FOR LOGIN admin;
GO
执行上述语句,就为“网店购物系统”数据库创建了一个名字为admin的用户,如图15所示。
提示:使用系统存储过程创建SQL Server登录时候,密码要符合SQL Server 2008的密码策略,如果密码过于简单,将无法创建账户。