SQL Server 日志文件查看器显示的消息:
Login failed for user [User]
Error: 18456, Severity: 14, State 38
它实际上意味着什么:
Failed to open the explicitly specified database
我的问题:
对于严重性和状态的每种组合,是否有 18456 错误(登录失败)的所有变体的列表,以及有用的描述文本?
我有一个谷歌,但除了特定的组合之外找不到任何东西。
SQL Server 日志文件查看器显示的消息:
Login failed for user [User]
Error: 18456, Severity: 14, State 38
它实际上意味着什么:
Failed to open the explicitly specified database
我的问题:
对于严重性和状态的每种组合,是否有 18456 错误(登录失败)的所有变体的列表,以及有用的描述文本?
我有一个谷歌,但除了特定的组合之外找不到任何东西。
州代码及其含义。
Aaron Bertrand 的博客中提供了更多详细信息。
要查找状态代码,您需要在确保错误登录记录在错误日志中后检查 SQL Server 错误日志。
由于连接字符串中数据库名称的拼写错误,我遇到了与状态代码 38 相同的错误。
这是我在解决此错误时发现的:我使用 Windows 登录而不是用户名和密码创建了一些 SQL 连接。不太确定它发生了什么或如何发生,但确实发生了。我删除了它们,然后重建了我的实体模型。我使用了另一个我知道很好的连接字符串,一切都很快乐。关键是 Persist Security Info=True,这在网络或外部网站上不起作用
我也有状态 38 的 18456。原来连接字符串有“集成安全=真”,这不是我想要的。连接字符串包含要使用的用户 ID 和密码。当我将设置更改为 false 时,一切都很好。
我在尝试登录到具有多个实例的 SQL Server 时遇到此错误。连接字符串没有命名实例。一旦我命名了实例 (SERVERNAME\INSTANCENAME),我就设法连接到服务器。
@Pete Oakly与州代码列表走在正确的道路上。具体来说,这是我们都感兴趣的代码:
我的问题始于 C# 错误日志:
我的目光集中在“登录失败”部分。我的用户是这个数据库服务器的 sa,登录怎么可能失败?
我偶然发现了这篇文章,三位程序员给出了答案: https ://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 /
这不是登录失败本身,而是我试图访问的数据库。 它不存在!
答对了!由于其他原因,我更改了数据库名称,并没有更新配置文件。修复了数据库名称,事情再次像魅力一样工作。
在我们的 SQL Server 配置管理器中 | SQL Server 网络配置 | TCP/IP | 知识产权 | TCP 端口未设置。
如果没有,我们可以建立 ODBC 连接,甚至可以使用远程 SQL Management Studio 连接并以用户身份登录。但是,每次我们访问 Tomcat 应用程序的 url 时,它都会启动一个 jdbc 连接,然后我们在 SQL Server 日志中发现错误:用户“xxxx”登录失败:原因无法打开显式定义的数据库,错误 18456,严重性 14 , 状态 38
这里是jdbc连接字符串的摘要
这要说也是在SQL Server 网络配置| <实例名称> 的协议 | 必须启用命名管道并且必须
\\.\pipe\MSSQL$<instance name>\sql\query
正确设置管道名称。好吧,这是与数据库权限相关的错误。我在这个问题中添加了我的解决方案,因为了解 DBA 的角色非常重要。所以,有我的建议:
现在,使用该用户名登录,您可以授予该用户访问权限。为此:
转到Security,右键单击Logins并选择New Login
在登录窗口中,您可以输入用户名或搜索它。从列表中选择用户,然后再次单击“确定”和“确定” 。
在同一登录窗口中,单击Server Roles,并授予所选用户的访问权限,例如:sysadmin、serveradmin、decreator 等;单击确定。
如果您想授予对单个数据库的访问权限,请转到用户映射并根据您的要求提供访问权限。
检查数据库的状态: 权限:授予 登录:已启用
点击确定
此错误的另一个可能原因是:登录刚刚添加到具有正确权限的 Active Directory 组,但登录的 AD 令牌尚未更新。刷新令牌将解决问题;实现此目的的一种方法是要求用户退出他或她的工作站。