用户登录失败-错误18456-严重级别14,状态38


23

SQL Server日志文件查看器显示的消息:

Login failed for user [User]
Error: 18456, Severity: 14, State 38

实际上是什么意思:

Failed to open the explicitly specified database

我的问题:

在严重性和状态的每种组合中,是否都列出了18456错误(登录失败)的所有变化形式,以及有用的描述文字?

我有一个Google,但是除了特定的组合之外找不到其他东西。

Answers:


25

状态代码及其含义。

1      'Account is locked out'
2      'User id is not valid'
3-4    'Undocumented'
5      'User id is not valid'
6      'Undocumented'
7      'The login being used is disabled'
8      'Incorrect password'
9      'Invalid password'
10     'Related to a SQL login being bound to Windows domain password policy enforcement.
        See KB925744.'
11-12  'Login valid but server access failed'
16     'Login valid, but not permissioned to use the target database'
18     'Password expired'
27     'Initial database could not be found'
38     'Login valid but database unavailable (or login not permissioned)'

有关更多详细信息,请访问Aaron Bertrand的博客


@PeteOakly你在这里的状态38.正确的线索请参见下面的帖子关于丢失数据库的原因状态38.一个
约翰·戴尔

4

由于连接字符串中数据库名称的错字,导致状态代码38出现相同的错误。


2

这是我解决此错误时发现的内容:我使用Windows登录名而非用户名和密码创建了一些SQL连接。不太确定发生什么或如何发生,但确实发生了。我删除了它们,然后重建了我的实体模型。我使用了另一个我知道很好的连接字符串,这一切都是喜悦。关键是Persist Security Info = True,它将在网络或外部网站上不起作用


2

我也有状态为38的18456。原来,连接字符串具有“ integrated security = true”,这不是我想要的。连接字符串包含要使用的用户标识和密码。当我将设置更改为false时,一切都很好。


2

尝试登录具有多个实例的SQL Server时出现此错误。连接字符串未命名实例。将实例命名为(SERVERNAME \ INSTANCENAME)后,便设法连接到服务器。


2

@Pete Oakly在状态代码列表的右边。具体来说,这是我们都感兴趣的代码:

38'登录有效,但数据库不可用(或不允许登录)'

我的问题始于C#错误日志:

异常| PublishedException | 000161 | 10/29/2018 | 11:06:40.210 | 16284 | InnerException |无法打开登录请求的数据库“ InterestingDataBaseName”。登录失败。用户“ CORP \ anyuser”的登录失败。

我的视线集中在“登录失败”部分。我的用户是该数据库服务器的sa,怎么可能登录失败?

我偶然发现了三个有答案的程序员:https//justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 /

并不是登录失败本身,而是我要访问的数据库。 它不存在!

答对了!我出于其他原因更改了数据库名称,但未更新配置文件。修复了数据库名称,并且一切再次正常运行。


1

在我们的例子中,在SQL Server配置管理器中| SQL Server网络配置| TCP / IP | IP | TCP端口是不是设置。

否则,我们将无法建立ODBC连接,甚至使用远程SQL Management Studio连接并与用户登录。但是,每次我们访问Tomcat应用程序的URL时,它都会启动jdbc连接,然后在SQL Server中发现错误:错误:用户'xxxx'的登录失败:原因无法打开显式定义的数据库,错误18456,严重性14 ,州38

这里是jdbc连接字符串的摘要

"jdbc:sqlserver://10.10.10.10:1433;databaseName=zzzzzzz" username="yyyyyy" password="xxxxxx" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" defaultAutoCommit="true"/>
<Resource name="jdbc/application" 

此说于SQL Server网络配置| <实例名称>的协议| 必须启用命名管道,并且\\.\pipe\MSSQL$<instance name>\sql\query 必须正确设置管道名称 。


1

好吧,这是与数据库权限有关的错误。我将在这个问题中添加解决方案,因为了解DBA的角色非常重要。因此,我有一些建议:

  • 转到服务器管理器
  • 选择工具,然后选择计算机管理
  • 检查本地用户和组
  • 检查管理员名称,其描述为“用于管理计算机/域的内置帐户”

现在,使用该用户名登录,您可以授予该用户访问权限。为此:

转到“ 安全性”,右键单击“ 登录名”,然后选择“ 新登录名”

在登录窗口中,您可以输入或搜索用户名。从列表中选择用户,然后单击确定确定一次。

在同一登录窗口上,单击“ 服务器角色”,然后向所选用户授予访问权限,例如:sysadmin,serveradmin,decreator等;单击确定

如果要授予对单个数据库的访问权限,请转到“ 用户映射”并根据需要提供访问权限。

检查数据库状态: 权限:授予 登录名:启用

点击确定


2
如果您可以将重点放在可能缺少SQL Server登录名数据库用户关系或SQL Server登录名默认数据库不再可用的可能性上,则这可能是一个很好的答案。目前,您的答案只是有关如何创建帐户的一般性建议。我不确定答案的第一部分将如何帮助解决OP的问题。你能解释一下那部分吗?
约翰aka hot2use
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.