第二篇 SQL Server安全验证

本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文



验证是检验主体的过程。主体需要唯一标识,那样SQL Server可以确定主体有哪些权限。正确的验证是提供安全访问数据库对象的必要的第一步。
SQL Server支持两种验证:Windows身份验证和SQL Server身份验证。你使用的方式依赖于网络环境,将访问数据库的应用程序类型,以及这些应用程序的用户类型。
Windows身份验证:这种形式的身份验证依赖于Windows来做验证身份。访问SQL Server对象的权限被分配给Windows登录名。这种类型的验证仅适用于SQL Server运行在支持Windows NT或Kerberos身份验证的Windows版本(Windows 2000及之后)。
SQL Server身份验证:SQL Server可以完全依靠自己进行验证。在这种情况下,你可以创建独特的用户名称(SQL Server称做登录名)和密码。用户或应用程序连接到SQL Server和访问所提供的凭据。权限直接给登录名或通过角色分配。
SQL Server身份验证配置并不是一个简单地非此即彼的选择。你可以配置身份验证中的任何一种:
混合身份验证模式:服务器支持SQL Server和Windows身份验证。
Windows身份验证模式:服务器只支持Windows身份验证。
微软强烈建议使用Windows身份验证。Windows具有强大的身份验证选项,包括密码策略,但在实际应用中,Windows验证并不总是可行的。SQL Server身份验证可以引用一些Windows身份验证功能,但它是不安全的。
Windows身份验证
如果你配置你的SQL Server在Windows身份验证模式操作,SQL Server假设和Windows服务器的信任关系。当用户登录到Windows时,Windows将验证用户的身份。SQL Server检查用户帐户(任何Windows组,和任何SQL Server角色的用户)决定是否允许用户操作SQL Server对象。
Windows身份验证比SQL Server身份验证的几个优势,包括:
->由用户单一登录,所以它不用分开登录到SQL Server
->审计特点
->简化登录管理
->密码策略(在Windows Server 2003和之后版本)
Windows身份验证的另一大优势是你对Windows用户和组的任何更改都会自动反映在SQL Server,所以你不必分开管理。然而,如果你改变一个已经连接到SQL Server的Windows用户,这些更改不会生效,直到下一次用户连接到SQL Server。
配置SQL Server的安全设置
当你安装SQL Server,你可以选择服务器实例将允许身份验证模式。你也可以在SSMS的服务器属性对话框更改设置。这些设置适用于SQL Server实例中的所有数据库和其他对象。所以如果你需要对任何数据库使用SQL Server身份验证,你需要为服务器设置混合模式。
图2.1显示了服务器属性对话框安全性页面。要打开这个对话框,在对象资源管理器中右键单击服务器实例名称,然后从弹出的菜单中选择“属性”,然后转到安全性页面。你可以通过单击适当的按钮来更改身份验证模式,然后单击“确定”提交更改。
图2.1 配置SQL Server实例的验证模式
添加Windows登录
为了使用Windows身份验证,你首先需要一个有效的Windows登录帐户。然后你可以将权限授予一个Windows组连接到SQL Server,或者你可以对单个Windows用户授予权限,如果你不想给集体权限。
一个关于使用Management Studio管理安全的好处,你可以设置登录的同时提供数据库访问。为了使Windows登录访问SQL Server和AdventureWorks2012数据库,使用以下步骤,假设本地机器上已经定义ClearFile登录。
1、打开SSMS确保对象资源管理器窗口是可见的,并且你已经连接到一个SQL Server实例
2、展开服务器对象,然后展开安全性。你会看到几个子节点,如图2.2所示


图2.2 对象资源管理器下的安全性
3、右键单击登录名节点,从弹出菜单选择新建登录名,打开登录名-新建对话框
4、确保选择Windows身份验证
5、有两种方式选择Windows登录名。第一种方式是直接输入域或计算机名称,然后一个反斜杠和Windows登录名。第二种方法是单击“搜索”按钮打开“选择用户或组”对话框中。键入用户名,然后单击“检查名称”按钮以找到确切的名称。如果用户被发现,将出现在该框中,如图2.3所示。单击“确定”选择该用户。
图2.3 SQL Server查找Windows登录名
6、退回到登录名-新建对话框,设置AdventureWorks2012数据库为默认数据库。这是当用户连接到服务器时并且没有指定数据库的情况下使用的数据库。它不限制用户只访问这一个数据库。图2.4显示了我本地设置的Windows登录名。


图2.4 新建Windows身份验证登录
注意:永远不要把默认数据库设置为master。我以痛苦的经验告知:太容易连接到一个服务器,忘记改变数据库。如果你运行一个脚本,在master数据库中创建数百个数据库对象,手动删除这些对象以清理master数据库,将会是一项繁琐的工作。
7、下一步,让用户访问数据库。从对话框左侧的列表中选择用户映射。通过数据库旁边的映射授予用户访问AdventureWorks2012数据库。SQL Server会自动在数据库下创建一同名用户,并与之映射。你可以看到在表中的第三列,当然你也可以更改用户名。分配Sales作为用户的默认架构,通过键入或单击省略号(…)按钮从列表中选择。对话框应该看起来像图2.5。
图2.5 给Windows登录名AdventureWorks2012访问数据库
注意:为登录名设置默认数据库和授权访问数据库是有区别的。默认的数据库仅仅意味着当用户登录时没有指定数据库,SQL Server试图改变上下文到默认数据库。但这并没有授予任何在数据库中做任何事情的权限,甚至允许访问数据库。这意味着,它有可能分配一个默认的数据库,但用户不能访问。为用户在访问数据库时做任何有用的事,你需要显式地授予用户权限。
8、默认情况下,新的Windows登录名能访问服务器。但是,如果你想显式拒绝登录访问服务器,在登录名-新建对话框左侧选择状态,选择“拒绝”按钮。你还可以通过选择禁用按钮来暂时禁用该登录名。图2.6显示了这些选项。


图2.6 授予/拒绝连接到数据库引擎或禁用登录名
9、点击确定创建用户
你还可以以同样的方式添加一个Windows组。在这种情况下,该组中的任何成员都能访问数据库服务器,只要你授予了组访问数据库对象的权限。
SQL Server身份验证
当你使用SQL Server登录认证,客户端应用程序必须提供一个有效的用户名和密码以连接到数据库。这些SQL Server登录名保存在SQL Server。在登录时,如果没有帐户匹配用户名和密码,SQL Server将抛出错误,并且用户无法访问SQL Server。
尽管Windows身份验证更安全,在某些情况下你可以选择使用SQL Server登录。对于不需要特别安全需求的简单应用,SQL Server身份验证更容易管理,它可以让你避免纠缠于Windows安全。如果客户端是在旧版本的Windows上运行(比Windows 2000以前)或非Windows操作系统,你必须使用SQL Server登录。
为了创建一个SQL Server登录名,使用与Windows登录名相同的对话框,登录名-新建。输入一个独特的登录名(没有域名或机器名),并提供密码。例如,图2.7显示了如何创建一个新的SQL Server登录Casper,并将AdventureWorks2012设置为默认数据库。
图2.7 创建SQL Server登录名
SQL Server登录名的用户映射和状态选项和Windows登录名一样。
通过T-SQL语句创建SQL Server登录名
你还可以使用T-SQL代码来执行同样的操作,代码2.1使用CREATE LOGIN 创建了一个名为Topaz的SQL Server登录名

CREATE LOGIN Topaz WITH PASSWORD = ‘yBqyZIPT8}b]b[{5al0v‘;
GO

代码2.1 T-SQL语句创建SQL Server登录名
然后给Topaz访问AdventureWorks2012数据库的权限,使用CREATE USER语句并分配默认架构,如代码2.2所示

USE AdventureWorks2012;
GO
CREATE USER Topaz FOR LOGIN Topaz
    WITH DEFAULT_SCHEMA = HumanResources;
GO

代码2.2 为登录名创建数据库用户
类似Windows登录名,你可以将登录名映射给不同名的数据库用户。代码2.3中将Topaz登录名映射给AdventureWorks2012数据库的TopazD用户

DROP USER Topaz;
GO
CREATE USER TopazD FOR LOGIN Topaz WITH DEFAULT_SCHEMA = HumanResources;
GO

代码2.3 删除已存在的数据库用户,然后创建与登录不同名的数据库用户
当心sa登录名
如果你配置你的SQL Server支持SQL Server登录,你需要当心内置的SQL Server登录——sa登录,你可能已经注意到对象资源管理器登录节点。包含sa,或系统管理员登录主要是对SQL Server旧版本的向后兼容性。sa登录是映射到sysadmin固定服务器角色,任何以sa登录到SQL Server是一个全系统管理员,可以访问整个SQL Server实例和所有的数据库。
你不能修改或删除sa登录名。在你安装SQL Server实例的时候如果你选择混合模式身份验证,系统会提示你为sa用户设置密码。如果没有设置密码,任何人都可以用sa登录,玩“让我们管理服务器”。不用说,这是你最不想让你的用户做的最后一件事。如果其他系统管理员不可用或已经忘记了他们的windows密码,才会用sa作为后门登录。如果发生这种情况,你可能需要新的管理员!
永远不要在应用程序使用sa登录名访问数据库。这样做可能让黑客控制你的数据库服务器,如果黑客能够控制应用程序。在遥远的过去,这已经是攻击服务器的简单方法,是一个可怕的做法。相反,无论是设置了自定义Windows或SQL Server登录名,给登录名绝对最低权限运行应用程序(实现最小特权原则)。
注意:事实上,你应该考虑禁用sa登录名。这样攻击者就无法使用这个强大的登录名来控制你的服务器实例,无论你是否有一个强大的密码。
强制密码策略
在SQL Server 2005之前的版本,系统管理员没有简单的方法强制密码策略以帮助系统更安全。例如,SQL Server没有办法强迫用户创建一个强密码:最小长度和混合字母数字和其他字符。如果有人想创建一个登录用一个字母作为密码,你不能配置SQL Server来阻止它。同样地,没有办法使密码定期过期,如每三个月。有些人理所当然地认为这是不使用SQL Server登录的主要原因。
SQL Server的最近版本可以使用Windows Server 2003,Windows Vista(或之后版本)的密码策略。密码仍然存储在SQL Server,但SQL Server调用Windows API的NetValidatePasswordPolicy()方法,首次在Windows Server 2003推出。这个API功能适用于Windows密码策略给SQL Server登录名并返回一个值,指示密码是否有效。当用户创建、设置、或重置密码时,SQL Server调用这个函数。
你可以通过控制面板>管理工具>本地安全策略>密码策略,来定义你的Windows密码策略。图2.8中显示了密码策略部分默认设置。图2.9显示了帐户锁定策略,当用户多次登录不成功时,会被锁定。默认情况下,在一个新安装的Windows系统中锁定策略是被禁用的。
图2.8 密码策略


图2.9 帐户锁定策略
表2.1罗列了部分密码策略,默认值以及相应的说明

类别 策略 默认值 说明
密码策略 强制密码历史 0个记住的密码 此策略使管理员能够通过确保旧密码不被连续重新使用来增强安全性
密码长度最小值 0个字符 此安全设置确定用户帐户密码包含的最少字符数
密码必须符合复杂性要求 禁用 此安全设置确定密码是否必须符合复杂性要求
密码过期 密码最长使用期限 42天 此安全设置确定在系统要求用户更改某个密码之前可以使用该密码的期间
密码最短使用期限 0天 此安全设置确定在用户更改某个密码之前必须使用该密码一段时间
帐户锁定策略 帐户锁定时间 此安全设置确定锁定帐户在自动解锁之前保持锁定的分钟数
帐户锁定阈值 0次无效登录 此安全设置确定导致用户帐户被锁定的登录尝试失败的次数
重置帐户锁定计数器 此安全设置确定在某次登录尝试失败之后将登录尝试失败计数器重置为 0 次错误登录尝试之前需要的时间

表2.1 Windows密码策略设置
当你创建登录时,可以启用或禁用密码策略强制执行。当你创建一个SQL Server登录时,登录名-新建对话框,在登录名的下面有一个选项,如图2.10所示
图2.10 为新登录强制密码策略
当你使用T-SQL创建登录名时也会应用密码策略。例如,如果你在Windows 2003 Server(或之后版本)运行SQL Server,并且开启密码策略,代码2.4将失败

USE master;
GO
CREATE LOGIN SIMPLEPWD WITH PASSWORD = ‘SIMPLEPWD‘;
GO

代码2.4 尝试违背密码策略创建数据库登录名
原因就是密码不能和用户名相同
你可以在创建或修改登录名的时候控制策略。代码2.5将关闭该检查过期和强制策略选项。

ALTER LOGIN Topaz WITH PASSWORD = ‘yBqyZIPT8}b]b[{5al0v‘,
    CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF;

代码2.5 修改登录禁用密码策略
CHECK_EXPIRATION选项控制SQL Server检查密码是否过期;CHECK_POLICY选项适用于其他策略。MUST_CHANGE选项,强迫使用户在下次登录时更改密码。
如果用户有多次不成功的登录,超过了帐户锁定策略中的数目,管理员可以使用解锁选项重置帐户,如代码2.6所示。

ALTER LOGIN Topaz WITH PASSWORD = ‘yBqyZIPT8}b]b[{5al0v‘ UNLOCK

代码2.6 解锁登录
在Windows Server 2003前,你可以开启SQL Server使用强制密码策略。但SQL Server使用默认设置的最小长度为6个字符,检查密码不匹配的登录名的全部或任何部分,是一个混合大写字母、小写字母、数字、和其他字符。你不能更改这些默认值。但我希望你不是这样一个旧版本的Windows上运行SQL Server。
总结
这一篇,你已经学到了一些在SQL Server中的身份验证选项。Windows集成身份验证是最安全的但并不总是可行的,微软这几年已经让SQL Server身份验证做得更好的和更安全。但是,如果你使用混合模式验证,不要忘记给sa登录一个非常强大的密码,甚至更好,禁用它!你可以使用GUI界面或T-SQL代码创建和修改大部分安全对象。如果你在一个现代版的Windows运行SQL Server,你可以引用本地安全策略中的密码策略。

时间: 2024-10-12 21:28:23

第二篇 SQL Server安全验证的相关文章

第二篇 SQL Server代理作业步骤和子系统

本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作).每个作业步骤运行于一个单独的安全上下文,尽管每个作业有一个所有者来决定谁可以修改作业.本篇主要关注组成SQL Server代理的作业步骤和子系统.快速回顾作业理解SQL Server代理作业的最佳方式是把相关联的 需要完成给定任务 的组件放在一个容器中.作业最主要的组件有作业步骤.计划.警告和通知.

第五篇 SQL Server代理理解代理错误日志

本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到,SQL Server代理可以通过数据库邮件发送通知.如果有什么不正确的,你必须查看数据库邮件日志.在这一篇,你将学习如何理解和查看所有相关的SQL Server代理错误日志.你将回顾最常见的错误信息,掌握哪些信息需要你采取行动,哪些信息只是单纯的信息而已.一旦你理解错误日志,在处理SQL Serv

第六篇 SQL Server代理深入作业步骤工作流

本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术上是独立的,但是你可以创建工作流贯穿作业中的各个步骤.在这篇文章中,你将学习如何在作业步骤中使用工作流来改变要执行的操作,单一作业有多个条件可以处理.你也会接触作业步骤安全和作业子系统的更多细节.SQL Server代理步骤如第二篇所述,SQL Server代理作业包含一个或多个作业步骤.每一个作业

第三篇 SQL Server安全主体和安全对象

本篇文章是SQL Server安全系列的第三篇,详细内容请参考原文. 一般来说,你通过给主体分配对象的权限来实现SQL Server上的用户与对象的安全.在这一系列,你会学习在SQL Server实例中通过权限授权来执行操作及访问安全对象.在SQL Server中重要的主体是角色,你会学习角色可以让安全管理比使用单独用户更容易.你也会学习SQL Server的安全对象.授权Authentication is only part of accessing all of the goodies in

第七篇 SQL Server代理作业活动监视器

本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这系列的前几篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作业活动监视器.作业活动监视器是系统管理工具来运行工作,查看作业历史记录,并启用/禁用作业.本文同样会回顾一些作业活动监视器调用的存储过程,你可以直接调用过程做你自己的自定义任务监控.SQL Server代理作业活动监视器SQL Server代理作业活动监视器的主要机制是监视作业运行,以及查看代理已运行

sql server 2008 r2 修改sa密码 通过sql server 身份验证登陆

sql server 2008 r2 修改sa密码 通过sql server 身份验证登陆 解决方法如下 通过windows 身份验证登陆后, 首先选中服务器(右键)->属性 ->安全性->服务器身份验证修改为"SQL SERVER和WINDOWS身份验证模式"其次展开服务器上的"安全性"->登陆名->选中SA登陆帐号(右键)->状态->登陆修改为启用, 并在常规选项中修改密码 确认后重启 sel server sql se

第十篇 SQL Server代理使用代理帐户

本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这系列的前几篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole.SQLAgentReaderRole和SQLAgentOperatorRole.每个角色授予用户一定的权限来使用SQL Server代理,而不必是sysadmin服务器角色的成员.为完全管理控制SQL Server代理,你仍然需要sysadmin角色的成员.此外,你回顾了SQL Server代理服务

第九篇 SQL Server代理了解作业和安全

本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这系列的前几篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本,甚至自己的程序.你最好的选择是使用PowerShell的子系统运行PowerShell脚本.PowerShell脚本将允许你处理几乎所有方面的Windows和SQL Server问题.在这一篇,你会深入到SQL Server代理安全.安全是个令人困惑的话题,它值得一些明确的考虑.这系列有两个不同方面

SQL2012设置SQL Server身份验证过程

修改SQL 2008R2的登陆状态window身份验证变成window和sqlserver身份验证登陆 一.打开SQL2012 二.选择属性后 三.选择好了之后,点击确定就OK 了 修改sql server身份验证登陆名的方法 一,选择数据库单击右键 二,修改密码 三,选择下面的[状态],选择[授予],[启用].