帐户锁定、超最大连接数登录

--17:01 2014-06-09 EERORLOG中出现这种信息

2014-05-20 17:49:44.070    登录    Login failed for user 'UserA'.  Reason: The password of the account has expired.

查看账户有设强制密码过期。联系使用人员,说明情况,把强制密码过期选项去掉,没再看到此账户登录错误信息。
过了十来天,使用人员说UserA再次登录登录不上,让重置密码。重置后,自己用新密码是可以连接。第二天上班,查看ERRORLOG发现

2014-05-29 11:00:40.220    登录    Login failed for user 'UserA'. 原因: 密码与所提供的登录名不匹配。 [客户端: **.**.**.**]
2014-05-29 10:57:50.220    登录    Login failed for user 'UserA'. 原因: 密码与所提供的登录名不匹配。 [客户端: **.**.**.**]
2014-05-29 10:55:32.390    登录    Login failed for user 'UserA' because the account is currently locked out. The system administrator can unlock it.  [客户端: **.**.**.**]
2014-05-29 10:55:00.220    登录    Login failed for user 'UserA'. 原因: 密码与所提供的登录名不匹配。 [客户端: **.**.**.**]
2014-05-29 10:54:08.440    登录    Login failed for user 'UserA' because the account is currently locked out. The system administrator can unlock it.  [客户端: **.**.**.**]
2014-05-29 10:53:29.250    登录    Login failed for user 'UserA' because the account is currently locked out. The system administrator can unlock it.  [客户端: **.**.**.**]
2014-05-29 10:52:42.550    登录    Login failed for user 'UserA' because the account is currently locked out. The system administrator can unlock it.  [客户端: **.**.**.**]
2014-05-29 10:52:10.210    登录    Login failed for user 'UserA'. 原因: 密码与所提供的登录名不匹配。 [客户端: **.**.**.**]
2014-05-29 10:49:20.220    登录    Login failed for user 'UserA'. 原因: 密码与所提供的登录名不匹配。 [客户端: **.**.**.**]
2014-05-29 10:46:30.220    登录    Login failed for user 'UserA'. 原因: 密码与所提供的登录名不匹配。 [客户端: **.**.**.**]
View Code

此时,我这边还可以登录,让他那边手动连接,得到下面的错误

查看账户登录属性->状态->SQL Server身份验证,登录已锁定 已勾选。点击想取消已锁定,报错,大致意思是要改密码之类的,忘记截图。。。
返回常规,重置密码,就能正常登录了。22:28 2014-08-07最近整理用户登录测试,遇到类似现象,补充截图:

意思和之前处理一样,解锁时修改密码就好,可以用语句实现:

ALTER LOGIN Loginame WITH PASSWORD='Pwd' UNLOCK

最近在ERRORLOG下面又看到类似信息

2014-06-07 14:16:08.560    登录    Login failed for user 'sa'. 原因: 密码与所提供的登录名不匹配。 [客户端: **.**.**.**]
2014-06-07 14:16:08.460    登录    Login failed for user 'sa'. 原因: 密码与所提供的登录名不匹配。 [客户端: **.**.**.**]
2014-06-07 14:16:08.270    登录    Login failed for user 'sa'. 原因: 密码与所提供的登录名不匹配。 [客户端: **.**.**.**]
2014-06-07 14:14:12.390    登录    Login failed for user 'sa' because the account is currently locked out. The system administrator can unlock it.  [客户端: **.**.**.**]
2014-06-07 14:14:12.330    登录    Login failed for user 'sa' because the account is currently locked out. The system administrator can unlock it.  [客户端: **.**.**.**]
2014-06-07 14:14:12.190    登录    Login failed for user 'sa' because the account is currently locked out. The system administrator can unlock it.  [客户端: **.**.**.**]
View Code

网上找到相关资料,密码错误次数达到某个限制,账户将locked down
我再输入一个错误密码,ERRORLOG中得到如下信息

2014-06-09 11:36:30.500    登录    Login failed for user 'sa'. 原因: 密码与所提供的登录名不匹配。 [客户端: <local machine>]
2014-06-09 11:36:30.500    登录    错误: 18456,严重性: 14,状态: 8

疑问1:account is currently locked out.按字面理解,账户被锁定,应该就登录不了(不管密码正确与否)。如果没Alter login ** with password='' unlock,这个账户是不是一直被锁定?
      -->A是的
      -->Q那我再次登录的时候,用一个错误密码,它提示Login failed for user **. 原因: 密码与所提供的登录名不匹配。不应该提示 账户锁定么?
      -->A至于是先匹配密码 再check Login是否有Lock,不是很清楚
      -->Q我感觉是既然已经锁定了,输入错误的密码,就不应该再去判断密码了。但我在ERRORLOG下看到的是,这两条信息交替产生。
--17:01 2014-07-29 补充
      帐户被锁定后,用错误的密码登录,提示密码不匹配;用正确的密码登录,提示帐户被锁定。因此,是先匹配密码,再检查帐户是否被锁定。用户帐户被锁定的登录尝试失败的次数由 本地计算机策略->帐户锁定策略->帐户锁定阀值 确定;帐户被锁定,如果不人为解锁,那么它一直保持锁定,直到达到帐户锁定时间(确定锁定帐户在自动解锁之前保持锁定的分钟数)。
疑问2:如何知道哪个用户是锁定的状态?

1 SELECT LOGINPROPERTY('Tear','IsLocked'),LOGINPROPERTY('Tear','IsExpired'),LOGINPROPERTY('Tear','BadPasswordCount')
2       ,LOGINPROPERTY('Tear','BadPasswordTime'),LOGINPROPERTY('Tear','LockoutTime'),LOGINPROPERTY('Tear','PasswordLastSetTime')

感觉有些属性返回结果和预期的不一致,可能是自己理解错了。比如UserA有多次密码错误,但BadPasswordCount却为零,BadPasswordTime是以前的某个时间;而另一用户,使用错误密码登录,BadPasswordCount为1,BadPasswordTime为当时时间。找个时间再去查查LOGINPROPERTY的解释。
--22:26 2014-7-30 重置连接数
对实例->属性->连接->最大并发连接数不是特别理解,昨天下午心血来潮,把连接数改成1,不断开启新的查询窗口,并没有按预想的出错(当时没有重启数据库服务)。今天早上打开电脑,打开对象资源管理器,连接到服务器时报错。

查看ERRORLOG,错误信息很明显,超过最大并发连接数。

2014-07-30 09:35:37.12 登录          错误: 17809,严重性: 20,状态: 32014-07-30 09:35:37.12 登录          Could not connect because the maximum number of '1' user connections has already been reached. The system administrator can use sp_configure to increase the maximum value. The connection has been closed. [客户端: 127.0.0.1]

第一反应,使用DAC连接,将user connections改大点。参照之前默认实例下先用单用户模式启动数据库,但是启动的时候就出错。

大致知道是因为命名实例导致单用户模式启动失败,但不知道如何修改代码。网上找了下资料,然后查看数据库实例对应服务的属性,在常规选项->可执行文件的路径:"D:SQL2012MSSQL11.SQL12MSSQLBinnsqlservr.exe" -sSQL12
-s后面接的是实例名,因此参考这行代码将单用户模式启动cmd命令修改为:

d:
cd D:SQL2012MSSQL11.SQL12MSSQLBinn
sqlservr.exe -m -sSQL12

当然也可以直接在服务属性的启动参数中添加-m
从日志信息中找到对应的专用端口,DAC连接,查看当前最大并发数,确实为1,通过user connections重置最大并发数

问题1,日志信息并没说要DAC连接去设置,只是说system administrator可以操作,但是在为1的情况下,显然无法通过GUI去操作,但应该可以直接通过sqlcmd或新建查询中修改。
问题2,GUI下设置的最大并发数,实际体现在sysconfigures.config=103对应的value,需重启数据库服务才生效,这个最大限制了sysprocesses.spid>50的记录数
--补充 10:26 2014-7-31 已经测试,问题1,当最大并发连接数为1时,可以通过sqlcmd或新建查询用语句修改。
当最大连接数设为1时,sqlcmd/新建查询下使用sp_readerrorlog,报无法打开环回连接,错误信息和5月份代理服务异常一样。


打开Windows事件日志,查看应用程序信息发现每次运行sp_readerrorlog,都会有两行错误信息。

至此意识到是由于连接数的问题导致,无法读取errorlog信息。将最大连接数设置成较大值,再运行就正常了。

原文地址:https://www.cnblogs.com/Uest/p/3753941.html