MS Sql 用户登录失败

MS Sql Login failed for user

我有 java 应用程序,带有 Hikari 连接池到 MSSql 数据库。 当我使用我的数据库时它工作得很好,但是当我想连接到远程数据库时我得到错误:用户登录失败。我在这里看到了一些关于此的问题,但没有找到解决方案。我尝试更改 MSSQL 等端口,但没有成功。

错误信息:

    Caused by: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: Login failed for user 'user'. ClientConnectionId:a45173d9-e047-49a1-b8d0-e8507ad2a7b9
    at com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:544)
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:536)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:112)
    at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:72)
    at com.mypackage.DAOConnPool.<clinit>(DAOConnPool.java:33)
    ... 2 more
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'user'. ClientConnectionId:a45173d9-e047-49a1-b8d0-e8507ad2a7b9
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:258)
    at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:256)
    at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:108)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:4290)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3157)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.access0(SQLServerConnection.java:82)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3121)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7151)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2478)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2026)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1687)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1528)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:866)
    at com.microsoft.sqlserver.jdbc.SQLServerDataSource.getConnectionInternal(SQLServerDataSource.java:968)
    at com.microsoft.sqlserver.jdbc.SQLServerDataSource.getConnection(SQLServerDataSource.java:78)
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:356)
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:199)
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:444)
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:515)
    ... 5 more

这是我的配置:

mssql.connectionstring= jdbc:sqlserver://IP:1433;databaseName=object_registry;integratedSecurity=true;
mssql.jdbcdriver =com.microsoft.sqlserver.jdbc.SQLServerDataSource 
mssql.user = user
mssql.pass = password
mssql.minConnectionPerPartition = 5
mssql.maxConnectionPerPartition = 10
mssql.partitionCount=1

这是我的连接:

 try (Connection conn = DAOConnPool.getConnection(); Statement statement = conn.createStatement();) {
      statement.executeUpdate(db_statement);

这里是 DAOConnPool class:

  public class DAOConnPool {

  private static HikariConfig config = new HikariConfig();
  private static HikariDataSource dataSource;

 static {      

  config.setDataSourceClassName(ConfigurationFile.getProperty("mssql.jdbcdriver"));
  config.setJdbcUrl(ConfigurationFile.getProperty("mssql.connectionstring"));     
  config.setUsername(ConfigurationFile.getProperty("mssql.user"));
  config.setPassword(ConfigurationFile.getProperty("mssql.pass"));
  //config.addDataSourceProperty("cachePrepStmts", "true");
  //config.addDataSourceProperty("prepStmtCacheSize", "250");
  //config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
  dataSource = new HikariDataSource(config);
}

}

public DAOConnPool() {
}

public static Connection getConnection() throws SQLException {
  return dataSource.getConnection();
}

}

我认为您正在尝试使用 windows 身份验证远程连接到数据库。在连接字符串中 this

integratedSecurity=true

定义您正在通过 windows 身份验证进行连接。如果你想通过网络连接,你应该给予适当的权限。如果您要连接服务器身份验证,则需要从连接字符串中删除该属性。

尝试删除:

 config.setDataSourceClassName(ConfigurationFile.getProperty("mssql.jdbcdriver"));