【问题标题】:SQL Server 2005 getting Error: 18456, Severity: 14, State: 16. in logSQL Server 2005 出现错误:18456,严重性:14,状态:16。在日志中
【发布时间】:2013-12-19 16:05:06
【问题描述】:

SQL Server 2005 SP4 标准版 32 位。

在工作日的一到几次,似乎是随机的,我收到一条日志条目“用户 'OurDomain\mfreeman' 登录失败。[CLIENT: 192.168.0.48]” .这与“错误:18456,严重性:14,状态:16”的日志条目配对。同时。

这是我自己的登录名(在实例中具有 sysadmin 角色),它来自我的工作站。

我使用 Profiler 捕获了一个示例,发现它用于主数据库(它是在线的并且没有任何问题——我可以在 SSMS 中对其运行查询就好了)并且来自“ .Net SqlClient”(可以是任何东西)。 我在使用的任何应用程序(例如带有 SSDT 和 Report Builder 的 VS2012)或 SSMS 插件(ApexSQL Complete、SSMS 工具、Dell Spotlight Essentials)中都没有看到任何明显的错误。

有什么方法可以更具体地找出可能尝试访问的原因或可能失败的原因?

【问题讨论】:

    标签: sql-server sql-server-2005 login


    【解决方案1】:

    状态 16 表示默认数据库不可访问。这可能是因为数据库已被删除、重命名或脱机(可能设置为自动关闭)。此状态未在错误日志中指明原因。

    通过修复丢失的数据库或使用ALTER LOGIN 更改登录的默认数据库来解决,例如

    ALTER LOGIN [your_login] WITH DEFAULT_DATABASE = [valid_database];
    

    如果用户的默认数据库在线,但由于上述原因他们在连接字符串中明确请求的数据库不可用,也可能会报告此状态。

    基本上,您的登录要么是明确要求一个无效的数据库,要么是因为其默认数据库不存在而隐式这样做。

    【讨论】:

    • 亚伦,感谢您的回复。我不知道是什么在建立连接,并且正在建立与主数据库的连接。正如我在帖子中所说,我知道这个数据库实例中的主数据库没有问题。
    • @Mark 错误记录在主数据库中,但这并不意味着用户尝试连接到主数据库。如果他们实际上能够连接到它,它只会显示他们尝试连接的数据库。您是否检查了登录 YOURDomain\mfreeman 的默认数据库?您是否尝试按照我的回答中的建议将其默认数据库显式设置为 tempdb?您是否查看了在 Profiler 中收集的任何其他列(例如 HostName、ApplicationName)?
    • 我无法检查或更改客户端连接字符串中的默认数据库,因为我无法识别客户端。 HostName 是我的机器,ApplicationName 是“.Net SqlClient”。我将按照您的建议将我的域登录所属域组的默认数据库更改为 tempdb,我会看看会发生什么。
    【解决方案2】:

    在我的情况下,我发现“SQL Server 代理”下有一个“作业”正在引用已删除的数据库。

    【讨论】:

    • 我在 6 个月前换了工作,所以我无法验证这是否适合我。但是,当时没有报告工作失败。我将所有工作都设置为失败时通过电子邮件发送。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多