Answers:
状态代码及其含义。
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的博客。
@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 /
并不是登录失败本身,而是我要访问的数据库。 它不存在!
答对了!我出于其他原因更改了数据库名称,但未更新配置文件。修复了数据库名称,并且一切再次正常运行。
在我们的例子中,在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
必须正确设置管道名称 。
好吧,这是与数据库权限有关的错误。我将在这个问题中添加解决方案,因为了解DBA的角色非常重要。因此,我有一些建议:
现在,使用该用户名登录,您可以授予该用户访问权限。为此:
转到“ 安全性”,右键单击“ 登录名”,然后选择“ 新登录名”
在登录窗口中,您可以输入或搜索用户名。从列表中选择用户,然后单击确定和确定一次。
在同一登录窗口上,单击“ 服务器角色”,然后向所选用户授予访问权限,例如:sysadmin,serveradmin,decreator等;单击确定。
如果要授予对单个数据库的访问权限,请转到“ 用户映射”并根据需要提供访问权限。
检查数据库状态: 权限:授予 登录名:启用
点击确定