好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SQLServer2012身份验证(Authentication)

在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切。但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念。这篇文章提供了基础,因此你可以对SQL Server里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间。

身份验证是验证主体(需要访问SQL Server数据库的用户或进程,是声称是的人或物)的过程。主体需要唯一的身份,这样的话SQL Server可以决定主体有哪个许可。在提供安全访问数据库对象中,正确的身份验证是必须的第一步。

SQL Server支持身份验证的两个途径:Windows集成身份验证和SQL Server身份验证。你使用的途径取决于网络环境,应用程序访问数据库的类型和这些应用程序的用户类型。

Windows身份验证:这个身份验证方式依赖于Windows来担当重任——当用户登录到Windows是验证身份。访问SQL Server对象的许可然后会分配给Windows登录。只有当SQL Server运行在支持Windows NT或Kerberos身份验证的Windows版本上才可以使用,这个自Windows 2000起已经几乎是标准。 SQL Server身份验证:SQL Server可以完全自主完成身份验证。在这个情况下,你可以创建唯一的用户名——在SQL Server调用登录——和密码。连接到SQL Server的用户或应用程序提供这些凭证来访问。许可然后直接分配到那个登录或通过角色里的资格。

在SQL Server里在这2个类型之间配置身份验证不是一个非此即彼的选择(可以混合使用)。你可以在任何两个方式里配置身份验证:

混合身份验证模式:服务器同时支持SQL Server和Windows身份验证。 Windows身份验证模式:服务器只支持Windows身份验证。

只要可能的话,微软强烈推荐使用Windows身份验证。Windows拥有可靠的验证选项,包括密码策略,但正真正的应用程序里,Windows身份验证并不总是可行的。SQL Server身份验证可以嵌入Windows验证的一些功能,但它不太安全。

Windows身份验证

如果你配置你的SQL Server在Windows身份验证里操作,SQL Server认为与Windows服务器有信任关系。当它们登录到Windows里时,SQL Server认为Windows已经验证用户。然后SQL Server检查用户账号,任何Windows组和任何SQL Server角色,看用户是否是其成员之一来决定用户是否允许与各个SQL Server对象打交道。

与SQL Server身份验证比,Windows身份验证有很多优势,包括:

用户一次登录即可,因此她不需要单独登录到SQL Server审计功能简单化登录管理密码策略(在Windows Server 2003及后续版本)

Winows身份验证的另一个大优势是你对Windows用户和组的任何修改会自动在SQL Server里生效,因此你不需要单独管理它们。然后,如果你对Windows用户做出的修改,它们此时刚好连接到SQL Server,这些修改不会生效,直到下次用户连接到SQL Server才会生效。

配置SQL Server安全设置

当你安装SQL Server时,你可以选择SQL实例允许的验证模式。安装完成后你可以在SSMS里的服务器属性对话框里修改这个设置。这些设置适用于SQL Server实例里的所有数据库和其它对象。因此如果你需要为任何数据库使用SQL Server身份验证,你需要为服务器设置为混合模式。

插图2.1显示了在SSMS里选择了【安全性】页的【服务器属性】对话框。为了打开这个对话框,在对象浏览器里右击服务器实例名,从弹出的菜单里选择【属性】,然后点击【安全性】页。通过点击对应的单选框和点击【确定】提交修改,就可以修改验证模式。

插图2.1:为SQL Server实例配置验证模式

添加一个Windows登录

使用Windows身份验证,你的用户在能访问SQL Server前需要验证Windows登录账号。然后你可以授予一个Windows组连接到SQL Server,或者你可以授予许可给单独的Windows用户,如果你不想授予集体许可。

使用SSMS管理安全的一个好处是你可以同时配置登录和数据库访问。启用Windows登录到访问SQL Server和 AdventureWorks2012 数据库。使用下列步骤,并假定本地机器已经定义了woodytu用户。

1.打开SSMS,确保对象浏览器窗体可见,并且你已经连接到SQL Server实例

2.展开服务器对象的树状视图,然后展开【安全性】节点。你会看到如插图2.2所示的多个子节点。


插图2.2:服务器对象浏览器的安全性部分,你定义的登录的地方

3.右击【登录名】节点,从弹出的菜单里选择【新建登录名】来打开【登录名】——新的对话框

4.确保【Windows身份验证】单选框已经选择

5.你可以用任何2种方式选择Windows登录。第一种方式是直接输入域名或机器名,然后一个\和所使用的Windows登录名。第二个方式,通常更简单的方式点击【搜索】按钮来打开【选择用户或组】对话框。输入用户名,点击【检查名称】来查找具体的名称。如果找到用户,完整的名字在对话框里出现,如插图2.3里所示。点击【确定】选择那个用户。


插图2.3:找到一个Window登录来添加到SQL Server

6.回到【登录名-新建】对话框,设置 AdventureWorks2012 数据库作为登录的默认数据库。当用户连接到服务器且不指定数据库时,这是用户使用的数据库。这不限制用户只访问那个数据库。插图2.4展示对于在WIN10的机器上Windows的登录用户woodytu,设置默认数据库为示例数据库 AdventureWorks2012 的登录配置。


插图2.4:【登录名—新建】对话框启用Windows登录到访问SQL Server实例。

提示:
绝不保持默认数据库为master数据库。这个是惨痛的教训:连接到服务器,太容易忘记修改数据库了。到时候如果你运行脚本在master数据库上创建上百个数据库对象,你会花大量的精力来人为删除这些对象,清理master数据库。

7.接下来,给用户访问一个数据库。从对话框的左边清单里选择【用户映射】页。通过选择数据库名旁的选择框授予用户访问 AdventureWorks2012 数据库。SQL Server自动映射用户用同样的用户名到数据库里的用户,如你在表里的第3列所见,如果你想要的话,可以修改用户名。分配Sales作为用户在数据库里默认的架构,可以在【默认架构】列里输入,或者点击【...】按钮从列表里选择。对话框应该如插图2.5所示。


插图2.5:授予Windows登录访问 AdventureWorks2012 数据库

提示:
为登录设置默认数据库和授予访问到数据库之间是有区别的。当用户登录没有指定数据库时,默认数据库指的是SQL Server尝试修改上下文到那个数据库。但这不授予在数据库里做任何事的任何许可,或者甚至允许访问到数据库。这就是说分配用户完全不能访问的数据库是可能的。一旦数据库被访问了,为了让用户可以进行一些操作,你需要授权用户许可。

8.默认情况下,新的Windows登录可以访问到服务器。但是如果你想禁止登录访问服务器,从【登录名—新建】的左边列表选择【状态】,勾选【拒绝】单选框。你也可以通过选择【禁止】按钮临时禁用登录。插图2.6显示了这些选项。


插图2.6:授予和拒绝连接到数据库和临时禁用登录账号选项点击【确定】创建用户。

你也可以在同样的方式里添加Windows组到SQL Server,组的任何成员也可以访问数据库服务器,包括你给组的数据库里的任何对象 。

SQL Server身份验证

当你使用SQL Server登录作为验证时,客户端应用程序需要提供有效的用户名和密码来连接到数据库。这些SQL Server登录在SQL Server里保存,与Windows无关。当在登录时,如果没有匹配的用户名和密码,SQL Server抛出错误,用户不能访问数据库。

尽管Windows身份验证更加安全,在一些情况或许你只能选择SQL Server登录来代替。对于简单没有广泛安全需求的应用程序,SQL Server身份验证更容易管理,它允许你避免Windows安全的复杂。而且如果客户端运行在更老版本的Windows(比Windows 2000还老)或非Windows的操作系统,你必须使用SQL Server登录。

创建SQL Server登录,使用和Windows登录同样的【登录名-新建】对话框。但不是选择Windows登录,输入没有域名或机器名的用户名,并提供密码。例如,插图2.7显示了如何创建一个新的SQL Server登录user,把 AdventureWorks2012 作为他的默认数据库。

插图2.7:创建SQL Server登录

对于用户映射和状态的所有其它选项的SQL Server登录和Windows登录是一样的。

通过T-SQL的SQL Server登录

你也可以用T-SQL代码来进行同样的操作。在代码2.1里的Create Login代码创建一个有强劲密码的SQL Server登录Tudou。

CREATE LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v';
GO 

查看更多关于SQLServer2012身份验证(Authentication)的详细内容...

  阅读:92次