(improvement)(headless) Encrypt database password (#1553)

* (improvement)(headless) Encrypt database password


---------

Co-authored-by: lxwcodemonkey
This commit is contained in:
LXW
2024-08-12 00:37:32 +08:00
committed by GitHub
parent 8b01dac8d4
commit 1ff4a71a41
8 changed files with 65 additions and 102 deletions

View File

@@ -3,6 +3,7 @@ package com.tencent.supersonic.headless.core.pojo;
import com.google.common.collect.Lists;
import com.tencent.supersonic.common.pojo.RecordInfo;
import com.tencent.supersonic.common.util.AESEncryptionUtil;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@@ -40,10 +41,12 @@ public class Database extends RecordInfo {
*/
private String type;
private ConnectInfo connectInfo;
private List<String> admins = Lists.newArrayList();
private List<String> viewers = Lists.newArrayList();
public String passwordDecrypt() {
return AESEncryptionUtil.aesDecryptCBC(password);
}
}

View File

@@ -1,20 +1,11 @@
package com.tencent.supersonic.headless.core.pojo;
import static com.tencent.supersonic.common.pojo.Constants.STATISTIC;
import com.alibaba.druid.filter.Filter;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.wall.WallConfig;
import com.alibaba.druid.wall.WallFilter;
import com.tencent.supersonic.headless.api.pojo.enums.DataType;
import com.tencent.supersonic.headless.core.utils.JdbcDataSourceUtils;
import java.util.Arrays;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,6 +13,14 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import static com.tencent.supersonic.common.pojo.Constants.STATISTIC;
@Slf4j
@Component
@@ -181,7 +180,7 @@ public class JdbcDataSource {
String type = database.getType();
String jdbcUrl = database.getUrl();
String username = database.getUsername();
String password = database.getPassword();
String password = database.passwordDecrypt();
String key = getDataSourceKey(database);
@@ -309,6 +308,6 @@ public class JdbcDataSource {
return JdbcDataSourceUtils.getKey(database.getName(),
database.getUrl(),
database.getUsername(),
database.getPassword(), "", false);
database.passwordDecrypt(), "", false);
}
}

View File

@@ -1,5 +1,20 @@
package com.tencent.supersonic.headless.core.utils;
import com.alibaba.druid.util.StringUtils;
import com.tencent.supersonic.common.util.MD5Util;
import com.tencent.supersonic.headless.api.pojo.enums.DataType;
import com.tencent.supersonic.headless.core.pojo.Database;
import com.tencent.supersonic.headless.core.pojo.JdbcDataSource;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import static com.tencent.supersonic.common.pojo.Constants.AT_SYMBOL;
import static com.tencent.supersonic.common.pojo.Constants.COLON;
import static com.tencent.supersonic.common.pojo.Constants.DOUBLE_SLASH;
@@ -9,22 +24,6 @@ import static com.tencent.supersonic.common.pojo.Constants.NEW_LINE_CHAR;
import static com.tencent.supersonic.common.pojo.Constants.PATTERN_JDBC_TYPE;
import static com.tencent.supersonic.common.pojo.Constants.SPACE;
import com.alibaba.druid.util.StringUtils;
import com.tencent.supersonic.common.util.MD5Util;
import com.tencent.supersonic.headless.api.pojo.enums.DataType;
import com.tencent.supersonic.headless.core.pojo.Database;
import com.tencent.supersonic.headless.core.pojo.JdbcDataSource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import javax.sql.DataSource;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
/**
* tools functions about jdbc
*/
@@ -42,13 +41,13 @@ public class JdbcDataSourceUtils {
public static boolean testDatabase(Database database) {
try {
Class.forName(getDriverClassName(database.getConnectInfo().getUrl()));
Class.forName(getDriverClassName(database.getUrl()));
} catch (ClassNotFoundException e) {
log.error(e.toString(), e);
return false;
}
try (Connection con = DriverManager.getConnection(database.getConnectInfo().getUrl(),
database.getConnectInfo().getUserName(), database.getConnectInfo().getPassword());) {
try (Connection con = DriverManager.getConnection(database.getUrl(),
database.getUsername(), database.passwordDecrypt())) {
return con != null;
} catch (SQLException e) {
log.error(e.toString(), e);

View File

@@ -72,7 +72,7 @@ public class SqlUtils {
.withType(database.getType())
.withJdbcUrl(database.getUrl())
.withUsername(database.getUsername())
.withPassword(database.getPassword())
.withPassword(database.passwordDecrypt())
.withJdbcDataSource(this.jdbcDataSource)
.withResultLimit(this.resultLimit)
.withIsQueryLogEnable(this.isQueryLogEnable)