【问题标题】:Failed to authenticate the user (Active Directory Password) on remote (docker run on Azure DevOps)无法在远程验证用户(Active Directory 密码)(在 Azure DevOps 上运行 docker)
【发布时间】:2022-11-05 01:38:24
【问题描述】:

我无法在远程连接到 azure sql db(在 Azure DevOps 上运行 docker)对用户进行身份验证。它在我的计算机上的 Katalon 本地运行或通过同一用户的 MSSMS 运行时没有问题。

这是我使用的关键字:

@Keyword
def connect() {

    SQLServerDataSource ds = new SQLServerDataSource();
    ds.setServerName('****-mssql.database.windows.net');
    ds.setPortNumber(1433)
    ds.setDatabaseName('*****');
    ds.setUser('TEC*****');
    ds.setPassword('******');
    ds.setEncrypt(true);
    ds.setTrustServerCertificate(false);
    ds.setHostNameInCertificate('*.database.windows.net');
    ds.setLoginTimeout(30)
    ds.setAuthentication('ActiveDirectoryPassword');

    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
    } catch (ClassNotFoundException e) {
        e.printStackTrace()
        return
    }
    try {
        connection = ds.getConnection()
    } catch (Exception e) {
        e.printStackTrace()
        return
    }
    if (connection != null) {
    } else {
        println("Failed to make connection!")
    }
    return connection
}

Docker 运行是 Azure DevOps 管道上 yml 中的标准 katalon docker 映像调用。 在我能够使用 sql server 身份验证方法对此 sql db 进行身份验证和执行测试之前。不幸的是,我们不得不摆脱这一点,只能进行 AAD 身份验证。

这是我收到的错误:

2022-10-19T14:06:19.7727391Z com.microsoft.sqlserver.jdbc.SQLServerException: Failed to authenticate the user TEC******  in Active Directory (Authentication=ActiveDirectoryPassword).
2022-10-19T14:06:19.7729164Z    at com.microsoft.sqlserver.jdbc.SQLServerADAL4JUtils.getSqlFedAuthToken(SQLServerADAL4JUtils.java:49)
2022-10-19T14:06:19.7731772Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection.getFedAuthToken(SQLServerConnection.java:3609)
2022-10-19T14:06:19.7733140Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection.onFedAuthInfo(SQLServerConnection.java:3580)
2022-10-19T14:06:19.7734324Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection.processFedAuthInfo(SQLServerConnection.java:3548)
2022-10-19T14:06:19.7735580Z    at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onFedAuthInfo(tdsparser.java:261)
2022-10-19T14:06:19.7736640Z    at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:103)
2022-10-19T14:06:19.7737691Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4290)
2022-10-19T14:06:19.7738824Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3157)
2022-10-19T14:06:19.7739940Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$100(SQLServerConnection.java:82)
2022-10-19T14:06:19.7741103Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3121)
2022-10-19T14:06:19.7742344Z    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7151)
2022-10-19T14:06:19.7744999Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2478)
2022-10-19T14:06:19.7747724Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2026)
2022-10-19T14:06:19.7750596Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1687)
2022-10-19T14:06:19.7752937Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1528)
2022-10-19T14:06:19.7754834Z    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:866)
2022-10-19T14:06:19.7755846Z    at com.microsoft.sqlserver.jdbc.SQLServerDataSource.getConnectionInternal(SQLServerDataSource.java:968)
2022-10-19T14:06:19.7756726Z    at com.microsoft.sqlserver.jdbc.SQLServerDataSource.getConnection(SQLServerDataSource.java:69)
2022-10-19T14:06:19.7757305Z    at javax.sql.DataSource$getConnection.call(Unknown Source)
2022-10-19T14:06:19.7757863Z    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
2022-10-19T14:06:19.7758486Z    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
2022-10-19T14:06:19.7759217Z    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)

【问题讨论】:

    标签: sql-server jdbc azure-active-directory katalon-studio adal4j


    【解决方案1】:

    如果用户正常进行身份验证,这可能是由于旧版本的 SQL Server ODBC 驱动程序存在已知问题。如果是这种情况,updating the driver to the latest version 应该可以解决问题。

    另一种可能性是连接属性不正确并且未使用 JDBC URL。如果是这种情况,你需要update the connection properties

    User: myuser
    Password: AD password
    Host: jdbc:sqlserver://<HOST_NAME>:1433;databaseName=xxx;IntegratedSecurity=false;authentication=ActiveDirectoryPassword;
    Port:1443
    Database: xxx
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多