时间:2021-07-01 10:21:17 帮助过:47人阅读
图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,你可以引用本地安全策略中的密码策略。
第二篇 SQL Server安全验证
标签: