连接到SQL Server实例的时候,必须提供有效的认证信息。数据库引擎会执行两步有效性验证过程。第一步,数据库引擎会检查是否提供了有效的、具备连接到SQL Server实例权限的登录名。第二步,数据库引擎会检查登录名是否具备连接数据库的访问许可。
SQL Server 2005定义了人员、组或进程作为对请求访问数据库资源的实体。实体可以在操作系统、服务器和数据库级进行指定并且实体可以是单个实体或集合实体。例如,一个SQL登录名是在SQL Server实例级的实体,一个Windows组是Windows级的集合实体。
2.2.1 选择身份验证模式
针对SQL Server实例访问,SQL Server 2005支持两种身份验证模式:Windows身份验证模式和混合身份验证模式。可以通过以下方法在SQL Server Management Studio中配置身份验证模式。
Ø 配置身份验证模式
1. 从“开始”菜单中选择“所有程序”|“Microsoft SQL Server 2005”|“SQL Server Management Studio”。
2. 在“连接到服务器”对话框中,单击“连接”按钮。
3. 在“对象资源管理器”中,右键单击SQL Server实例名并在弹出菜单中选择“属性”
4. 在“选择页”面板中,选择“安全性”图标。
5. 在“服务器身份验证”区域,选择自己想要的身份验证模式。如图2.2所示。
重要提示 在更改身份验证模式后,需要重新启动SQL Server实例以使其生效。
以下方针有助您选择应用哪一种身份验证模式:
l Windows身份验证模式 在这种模式下,SQL Server依靠操作系统来认证请求SQL Server实例的用户。由于已经通过了Windows的认证,因此用户不需要在连接字符串中提供任何用户的认证信息。
l 混合身份验证模式 在这种身份验证模式下,用户既可以使用Windows身份验证模式又可以使用SQL Server身份验证模式来连接SQL Server。在后一种情况下,SQL Server依据现有的SQL Server登录名来验证用户的凭据。使用SQL Server身份验证需要用户在连接字符串中提供连接SQL Server 的用户名和密码。
注意 在SQL Server 2005中不能指定SQL Server的身份验证模式。然而,如果需要,可以在SQL Server实例中设置安全特性来限制大多数Windows用户对SQL Server实例的访问。
一般情况下,Windows身份验证模式是推荐的身份验证模式。在Windows身份验证模式中,连接链路中没有密码信息,并且可以在集中的企业存储方案(例如Active Directory)中管理用户帐户信息,利用操作系统已有的所有安全特性。
图2.2 在SQL Server Management Studio中设置身份验证模式
然而,Windows身份验证模式在某些情况下并不是最好的选择。例如,在需要为不属于自己操作系统环境的用户(例如外部供应商),或者所用操作系统与Windows安全体系不兼容的用户提供访问授权的时候,需要采用混合身份验证模式并使用SQL Server登录名以使这些用户连接到SQL Server。
2.2.2 连接到SQL Server实例
当一个用户需要访问SQL Server实例的时候,系统管理员必须为其提供有效的身份验证信息。这个身份验证信息依赖于已配置的身份验证模式。这一节将具体介绍如何为操作系统用户创建登录帐户以支持Windows身份验证,如何创建SQL登录名以支持SQL身份验证。
1. 授权Windows用户及组的访问
您可以为Windows用户或者Windows组创建登录名来允许这些用户连接到SQL Server。在默认情况下,只有本地Windows系统管理员组的成员和启动SQL服务的帐户才能访问SQL Server。
注意 可以删除本地系统管理员组对SQL Server的访问权限。
可以通过指令或者通过SQL Server Management Studio来创建登录名以授权用户对SQL Server 实例的访问。以下代码将授权Windows域用户ADWORKS\jlucas对SQL Server 实例的访问:
CREATE LOGIN [ADVWORKS\jlucas] FROM WINDOWS;
注意 使用SQL Server Management Studio创建登录名的时候,SQL Server Management Studio会执行类似的T-SQL 语句。
默认的Windows登录名
在安装SQL Server 2005实例的时候,安装程序会创建如表2.1所列的Windows登录名。
表2.1 默认的Windows登录名
Windows登录名 | 描 述 |
BUILTIN\Administrators | 为已安装SQL Server 实例的计算机的本地系统管理员组建立的登录名 这个登录名对于运行SQL Server不是必须的 |
<Servername>\SQLServer2005MSFTEUser$<Servername>$MSSQLSERVER | 为Windows组SQLServer2005MSFTEUser$ <Servername>$MSSQLSERVER建立的登录名。这个组的成员具有作为SQL Server实例全文搜索服务的登录帐户应有的必要特权 这个帐户对于运行SQL Server2005全文搜索服务是必须的 |
<Servername>\ SQLServer2005MSSQLUser$ <Servername>$MSSQLSERVER
| 为Windows组SQLServer2005MSSQLUser$<Servername> $MSSQLSERVER建立的登录名。这个组的成员具有作为SQL Server实例登录帐户应有的必要特权 这个帐户对于运行SQL Server 2005是必须的,因为在实例建立后,以使用本地服务帐户作为其服务帐户时,它就是SQL Server的服务帐户 |
<Servername>\ SQLServer2005SQLAgentUser$ <Servername>$MSSQLSERVER | 为Windows组SQLServer2005SQLAgentUser$<Servername> $MSSQLSERVER建立的登录名。这个组的成员具有作为SQL Server实例的SQL Server Agent的登录帐户应有的必要特权 这个帐户对于运行SQL Server 2005 Agent服务是必须的 |
使用Windows登录名连接到SQL Server 2005的时候,SQL Server依赖操作系统的身份验证,并且只检查是否Windows用户在这个SQL Server实例上映射了登录名,或者是否这个Windows登录名属于一个在此SQL Server实例上映射了登录名的Windows组。使用Windows登录名的连接被称为信任连接(Trusted Connection)。
警告 可以在不通知SQL Server的情况下,从操作系统中删除一个映射到Windows登录名的Windows用户或组。SQL Server 2005不检查这种情况。所以您需要定期检查SQL Server实例以便检查出这种孤立的登录名。可以通过使用系统存储过程sp_validatelogins来执行检查。
以下Microsoft Visual Basic代码(在示例文件ConnectUsingWindowsAuth.vb.txt中)演示了如何使用Windows身份验证来连接SQL Server。
' Create an instance of a SQLConnection object
Dim oConn as New SQLClient.SQLConnection
' Define the connection string
oConn.ConnectionString="server=localhost; database=AdventureWorks;" + _
"Integrated Security=SSPI"
' Open the connection
oConn.Open()
' Do some work
...
' Close the connection
oConn.Close()
2. 授权SQL Server登录名的访问
在混合身份验证模式下,同样可以创建并管理SQL Server登录名。创建SQL Server登录名的时候,要为登录名设置一个密码。用户在连接到SQL Server实例的时候必须提供这个密码。创建SQL Server登录名的时候,可以为其指定一个默认的数据库和一个默认语言。当应用程序连接到SQL Server且没有指定连接到哪个数据库和使用何种语言的时候,SQL Server将为这个连接使用登录名的默认属性。
注意 SQL Server 2005使用自签名的认证方式加密登录时的网络通信包以避免对登录信息的非授权访问(然而,一旦登录过程结束,并且登录被确认,SQL Server将以明文的形式发送后续所有的信息)。您可以通过Secure Sockets Layer (SSL) 和Internet Pro这两种途径来实现安全而机密的网络通信。
可以通过指令或者通过SQL Server Management Studio来创建SQL Server登录名以授权用户对SQL Server 实例的访问。以下代码将创建一个名为“Mary” 的SQL Server登录名,并指定这个登录名的默认数据库为AdventureWorks。
CREATE LOGIN Mary
WITH PASSWORD = '34TY$$543',
DEFAULT_DATABASE =AdventureWorks;
SQL Server 2005安装进程在SQL Server 2005安装过程中创建了一个SQL Server 登录名sa。sa登录名始终都会创建,即使安装时选择的是Windows身份验证模式。
最佳实践 虽然不能删除sa登录名,但可以通过改名或者禁用的方式避免用户通过这个帐户对SQL Server进行非授权访问。请参见本章随后的“拒绝用户访问”一节学习如何禁用一个帐户。
可以运行以下代码通过sql_logins目录视图来获取有关SQL Server登录名的信息:
SELECT *
FROM sys.sql_logins;