【问题标题】:Error when trying to connect to SQL Server尝试连接到 SQL Server 时出错
【发布时间】:2021-11-11 15:54:42
【问题描述】:

我正在从 ServiceNow 连接到 SQL 服务器。我收到一个错误,我不确定这意味着什么。任何帮助表示赞赏。

连接网址:jdbc:sqlserver://TESTSCCMSQL01;selectMethod=cursor;databaseName=TEST_ASH;integratedSecurity=true

Error: java.sql.SQLException: com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'CAMBRIDGE\svc-p-SCCM-SN-CMDB'. ClientConnectionId:e9216fed-c737-4f09-b27b-a63f6b66b925
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:283)
com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:129)
com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:37)
com.microsoft.sqlserver.jdbc.SQLServerConnection$1LogonProcessor.complete(SQLServerConnection.java:4786)
com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:5068)
com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3731)
com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:94)
com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3675)
com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7194)
com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2979)
com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2488)
com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2142)
com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1993)
com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1164)
com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:760)
java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
java.sql/java.sql.DriverManager.getConnection(DriverManager.java:189)
com.service_now.mid.connections.jdbc.JDBCConnection.establishConnection(JDBCConnection.java:110)
com.service_now.mid.connections.jdbc.JDBCConnection.connect(JDBCConnection.java:82)
com.service_now.mid.connections.jdbc.JDBCConnectionFactory.create(JDBCConnectionFactory.java:65)
com.service_now.mid.connections.ConnectionCachePool.getAvailableConnection(ConnectionCachePool.java:82)
com.service_now.mid.connections.ConnectionCache.get(ConnectionCache.java:94)
com.service_now.mid.probe.JDBCProbe.getJDBCConnection(JDBCProbe.java:784)
com.service_now.mid.probe.JDBCProbe.probe(JDBCProbe.java:119)
com.service_now.mid.probe.AProbe.process(AProbe.java:102)
com.service_now.mid.queue_worker.AWorker.runWorker(AWorker.java:122)
com.service_now.mid.queue_worker.AWorkerThread.run(AWorkerThread.java:20)
com.service_now.mid.threadpool.ResourceUserQueue$RunnableProxy.run(ResourceUserQueue.java:649)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:834)

    at com.service_now.mid.probe.JDBCProbe.getJDBCConnection(JDBCProbe.java:788)
    at com.service_now.mid.probe.JDBCProbe.probe(JDBCProbe.java:119)
    at com.service_now.mid.probe.AProbe.process(AProbe.java:102)
    at com.service_now.mid.queue_worker.AWorker.runWorker(AWorker.java:122)
    at com.service_now.mid.queue_worker.AWorkerThread.run(AWorkerThread.java:20)
    at com.service_now.mid.threadpool.ResourceUserQueue$RunnableProxy.run(ResourceUserQueue.java:649)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

【问题讨论】:

  • 您能在 SQL Server 日志中看到连接尝试吗?如果是这样,那里的错误是什么?
  • 错误很明显:用户“CAMBRIDGE\svc-p-SCCM-SN-CMDB”登录失败。也许您需要咨询serverfault.com - 我会投票结束这个问题,因为这是一个与服务器相关的问题
  • 出于安全考虑,不向客户端返回登录失败的具体原因。正如@Larnu 建议的那样,SQL Server 错误日志将包含有关原因的更多详细信息。常见原因有1)用户没有登录(服务器访问),2)用户不是数据库中的用户(数据库访问),3)连接字符串中指定的数据库不存在或不可用。
  • 其实不是,@LeandroBardelli,传回应用层的身份验证错误是故意模糊的。如果返回真正的错误,对安全性不利。例如,如果“提供的密码与LOGIN 不匹配”。当这是错误时被返回,那么恶意的人就知道他们试图入侵的帐户是真实帐户。
  • 哦,不知道。谢谢!我撤回我的投票结束

标签: sql sql-server servicenow sccm


【解决方案1】:

您的 SQL Server 是否处于“混合模式身份验证”中?这是使用 SQL 服务器帐户而不是 Windows 登录名登录所必需的。

您可以通过检查服务器的属性和安全性来验证这一点,它应该处于“SQL Server 和 Windows 身份验证模式”

如果用户尝试使用无法验证的凭据登录,则会出现此问题。在以下情况下可能会出现此问题:

场景 1:登录可能是 SQL Server 登录,但服务器只接受 Windows 身份验证。

场景 2:您尝试使用 SQL Server 身份验证进行连接,但使用的登录名在 SQL Server 上不存在。

场景 3:登录可能使用 Windows 身份验证,但登录是无法识别的 Windows 主体。无法识别的 Windows 主体意味着 Windows 无法验证登录。这可能是因为 Windows 登录来自不受信任的域。

也有可能是用户输入了错误的信息。

http://support.microsoft.com/kb/555332

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    相关资源
    最近更新 更多