转载请注明出处,谢谢!
最近在学习sqlserver时,鹏叔对以下名词不是特别理解,于是在网上查找资料,无奈无良装懂的网友太多,将以下几个名词乱用并错误理解,于是越查越糊涂。只好查看官网的帮助文档,并亲自设置。最终理解,并将区别及容易产生错误理解的地方加以解释。名词如下:
sqlserver服务、sql server服务实例、服务器、数据库、登录身份(账户)、身份验证(用户名、密码);
1.sql server服务:
实质是安装sql server后运行的进程与一部分文件。sql server可以提供很多服务,如:数据库引擎(sql server)、报表服务(reporting services)、分析服务(analysis services)等,每种服务都有自己的一套独有的系统资源。你可以选择性的安装需要的服务,不同版本的sql server提供的服务会不同。商业版会全部提供,其他版只提供部分。
如果你想要编写的程序能访问你的数据库文件,就要启动某个服务,即启动一个进程,这个进程一直等待你编写的程序向他发送请求和数据。我们编写程序中,会用到微软提供的ADO接口,这些接口中就很好的封装了与sql server服务进行交互的接口。运行的进程通过参数,去操作数据库,然后返回结果。
2.sqlserver服务实例:
服务实例是相对于sql server的版本来说的。比如,你的计算机上是可以同时安装sql server的2000版和2005版。每个版本都提供自己的数据库引擎服务、报表服务等各种服务,不同版本中的相同服务可能会使用共同的一部分硬件及文件资源。那么,每个服务,连同其使用的硬件、文件资源,称为一个服务实例。
服务实例可以在windows服务的列表中查看,两种方式找到:
·右键“我的电脑”——管理——服务和应用程序——服务,找到以sql 开头的服务,其名称后的括号内,为服务名;
·开始——运行,输入“services.msc”,打开了服务窗口;
3.sqlserver服务实例名:
不同版本的sql server中的相同实例,我们该怎么区分呢?这时就用到了实例名。
系统上安装第一个sql server时,安装提示中一般会使用默认的方式来指定实例名,此时的实例名即“默认实例名”,默认实例名为 MSSQLSERVER,它不需要客户端指定实例名称即可建立连接。所有类型服务的默认实例名,都是“MSSQLSERVER”。
再安装一个版本的sql server时,安装程序在检查了你的系统环境后,会提示你指定服务实例名,以跟默认实例名进行区分,即“命名实例名”。命名规则可参看网上资料。
一台计算机上最多只有一个默认实例,也可以没有默认实例,所以,第一个安装的sql server不是必须要指定为默认实例名的,也可以为其指定命名实例名。安装下一个版本时,再指定为默认,或者仍为为命名实例。
编程的连接语句中,如果是默认实例名,则在指定远程服务器的地址字段值上,只需指定其IP地址即可,不需要指定默认实例名;如果是命名实例,在指定此字段值为“IP地址命名实例名”。
4.服务器:
服务器其实指的是硬件和系统,即你的计算机的硬件和操作系统是否能够提供服务器的基础,如果能够,相应的软件如sql server才能安装并运行各种服务。
5.数据库:
数据库指的只是硬盘上的数据文件。
6.登录身份(账户):
此项会在安装时,提示你进行设置,一般设置为local system。
登录身份,是指你的sql server某一个服务启动时使用的windows操作系统的身份。从上面我们知道,sql server服务会调用我们的硬件、系统及其他一些资源,有一些部分是系统比较保密的部分,我们不希望所有访问服务器的人来操作,从而需要设置服务的登录身份。Windows xp系统中内嵌了三个身份,其中有local system,每个身份对操作系统都有不同的权限,对sql服务设置登录身份,就可以限制服务的权限了。如果需要设置为“本账户”,则需要在“资源管理器”中先添加一个windows账户,再在sql server的配置管理器中,对某个服务的属性中的登录身份进行修改,还要指定正确的账户名、密码;
此项设置,只有服务器端的维护人员需要考虑,对于编写客户端的人员来说,是不需考虑的。
7.sqlserver身份验证:
在打开sql server management studio(SSMS)时,会弹出对话框让你指定登录sql server的身份验证方式和用户名、密码。
这里的身份验证,是为了让你进入sql server服务,然后访问或修改数据库、或使用其他服务进行相应作业的。与使用SSMS登录类似,在编程中,是通过指定服务器IP服务实例名(默认实例名不用指定)、身份验证方式、登录名、密码、数据库文件等信息,来进入sql server的服务,SSMS只是给数据库管理员或程序员提供了一个图形化的操作界面,方便操作。
在安装sql server时,会有提示让你至少添加一个sql server的管理员。管理员的作用就是进入数据库服务,然后对数据库进行操作、对其他账号的权限进行设置、管理各种服务、协议等。若按默认操作(windows身份验证模式),则sql server会将当前的windows账户及其密码作为windows验证模式的内嵌登录名(BUILTINAdministrators)和密码,从而在使用windows验证模式时,不需要指定登录名和密码。当然,在此也可以指定其他的windows账户作为windows验证模式的内嵌登录名,按照提示修改即可。Windows验证模式只允许以windows验证模式进行连接,即便SSMS中可以选择sql server模式,但会导致连接失败。
如果安装时选择“混合模式”,则必须指定sa登录名的密码,从而添加了一个sql server身份验证的登录名。
那么对于SSMS的“连接到服务器”窗口和编程时指定的连接字符串,无论sql server指定为什么模式,windows验证模式是公有的。此时,如果我们指定为“windows验证”,则sql server将当前windows账户与sql server中已认证的windows账户对比,若当前账户没有认证,则连接失败。
怎样在sql server中添加一个windows验证的windows账户呢?首先,你必须在xp系统的用户账户中,添加一个账户。然后,在administrater账户下,用SSMS在windows验证模式下,连接到数据库服务,然后在“对象资源管理器”下的“安全性”——登录名,点右键,然后在其中添加登录名。登录名要找到刚才添加的windows账户,验证模式采用windows验证模式。此时你用刚添加的windows账户登录系统,然后运行sql server,就可以在windows验证模式下正常连接了。
而用sql server验证模式时,只要当前登录名在sql server中验证了,不会有windows账户的限制。
有两种身份验证的原因这里不深入分析,大体上是考虑到安全性和操作的方便程度及sql server的版本向后兼容。这里只说这两种验证方式是用上的不同:
在ADO编程中,当使用windows身份验证方式时,只需要指定服务器的IP地址。这是因为,指定IP地址,就可以连接到服务器计算机。如果使用sql server身份验证模式,则必须要指定登录名和密码了。
常见的理解误区:很多人会觉得,windows验证模式和sql server验证模式的登录名,区别在于权限,这是错误的。这两种验证方式的区别,并不是在于权限。并没有谁的权限高、谁的权限低之说。不管是windows验证方式的默认登录名、sql server方式的sa或其他自己添加的登录名,只要在sql server中为该登录名设置了相应数据库及表的权限,他就具有对于操作权限。
补充资料(非本人观点):
1.对两种身份验证模式的区别的一种说法:
那么区别在于,一个使用SQL单独用户,一个使用Windows用户,使用Windows用户可以极大的方便管理员的管理,统一用户身份验证(一般使用活动目录用户,在实践环境中,一般企业都会有自己的活动目录,如果使用SQL用户的话,管理员则需要记忆和维护两套用户名及密码,在这种情况下就会使用Windows用户,SQL可以直接调用Windows用户并授予数据库及表相关权限。那么在有权限的情况下,管理员可以直接使用自己的域用户来登陆连接SQL数据库)
2.两个验证方式是有明显不同的:主要集中在信任连接和非信任连接。
windows 身份验证相对于混合模式更加安全,使用本连接模式时候,sql server仅根据用户的windows权限来进行身份验证,我们称为“信任连接”,但是在远程连接的时候会因NTML验证的缘故,无法登陆。
混合模式验证就比较复杂,当本地用户访问sql时候采用windows身份验证建立信任连接,当远程用户访问时由于未通过windows认证,而进行sql server认证(使用sa的用户也可以登录sql),建立“非信任连接”,从而使得远程用户也可以登录。
准确来说,混合身份验证模式,也就是基于Windows身份验证和SQL Server身份混合验证。在这个模式中,系统会判断账号在Windows操作系统下是否可信,对于可信连接,系统直接采用Windows身份验证机制,而非可信连接,这个连接不仅包括远程用户还包括本地用户,SQL Server 会自动通过账户的存在性和密码的匹配来进行验证。
3.MS网站上的资料:
SQL Server 中的身份验证 (ADO.NET)
SQL Server 支持两种身份验证模式,Windows 身份验证模式和混合模式。
·Windows 身份验证是默认模式(通常称为集成安全),因为此 SQL Server 安全模型与 Windows 高度集成。信任特定Windows 用户和组帐户登录 SQL Server。已经过身份验证的Windows 用户不必提供附加的凭据。
·混合模式支持通过 Windows 和 SQL Server 进行的身份验证。用户名和密码对保留在SQL Server 中。
安全说明 |
我们建议尽可能使用 Windows 身份验证。Windows 身份验证使用一系列加密消息验证 SQL Server 中的用户。使用SQL Server 登录时,会通过网络传递 SQL Server 登录名和密码,这样会降低它们的安全性。 |
使用 Windows 身份验证,已经登录到 Windows 的用户不必再单独登录到 SQL Server。下面的SqlConnection.ConnectionString可指定Windows 身份验证,而无需用户名或密码。
"Server=MSSQL1;Database=AdventureWorks;IntegratedSecurity=true;
注意 |
登录名与数据库用户名不同。您必须通过单独的操作将登录或Windows 组映射到数据库用户或角色。然后向用户或角色授予访问数据库对象的权限。 |
身份验证方案
在下列情形中,Windows 身份验证通常为最佳选择:
·存在域控制器。
·应用程序和数据库位于同一台计算机上。
·您正在使用 SQL Server Express 的实例。
SQL Server 登录常常在以下情况中使用:
·您有工作组。
·用户从其他不受信任的域进行连接。
·Internet 应用程序(例如 ASP.NET)。
注意 |
指定 Windows 身份验证不会禁用 SQL Server 登录。使用ALTER LOGIN DISABLE Transact-SQL语句会禁用具有高特权的 SQL Server 登录。 |
登录类型
SQL Server 2000 支持三种登录类型:
·本地 Windows 用户帐户或受信任的域帐户。SQL Server 依赖 Windows 来对 Windows 用户帐户进行身份验证。
·Windows 组。向Windows 组授予访问权限会向作为该组的成员的所有 Windows 用户登录授予访问权限。
·SQL Server 登录。SQL Server 将用户名和密码的哈希形式都存储在 master 数据库中,使用内部身份验证方法验证尝试的登录。
注意 |
SQL Server 2005 添加从证书或非对称密钥创建的登录名,仅用于代码签名。但无法使用这些登录名连接到SQL Server。 |
混合模式身份验证
如果您必须使用混合模式身份验证,则必须创建 SQL Server 登录名,将其存储在 SQL Server 中。然后必须在运行时提供SQL Server 用户名和密码。
安全说明 |
SQL Server 使用名为sa(“系统管理员”的缩写)的SQL Server 登录进行安装。为sa登录分配一个强密码,并且不要在应用程序中使用sa登录。sa登录名会映射到sysadmin固定服务器角色,它对整个服务器有不能撤销的管理凭据。如果攻击者以系统管理员的身份获取了访问权限,则可能造成的危害是无法预计的。默认情况下,WindowsBUILTINAdministrators组(本地管理员组)的所有成员均为sysadmin角色的成员,但可以从该角色中移除这些成员。 |
SQL Server 2005 为在 Windows Server 2003 或更高版本上运行的 SQL Server 登录引入了 Windows 密码策略机制。密码复杂性策略通过增加可能密码的数量来阻止强力攻击。SQL Server 2005可将 Windows Server 2003 中使用的相同的复杂性和到期策略应用到 SQL Server 中使用的密码。
安全说明 |
连接来自用户输入的连接字符串会使您遭受连接字符串注入攻击。可使用SqlConnectionStringBuilder在运行时创建语法构成有效的连接字符串。有关更多信息,请参见连接字符串生成器 (ADO.NET)。 |
4.相关网站
http://technet.microsoft.com/zh-cn/magazine/default.aspx
http://technet.microsoft.com/zh-cn/sqlserver/