diff --git a/linkis-commons/linkis-common/src/main/java/org/apache/linkis/common/utils/TicketCipher.java b/linkis-commons/linkis-common/src/main/java/org/apache/linkis/common/utils/TicketCipher.java index 7e704b00959..9ad2c9aa082 100644 --- a/linkis-commons/linkis-common/src/main/java/org/apache/linkis/common/utils/TicketCipher.java +++ b/linkis-commons/linkis-common/src/main/java/org/apache/linkis/common/utils/TicketCipher.java @@ -37,8 +37,8 @@ *
Solves CVE-2026-XXXX vulnerabilities E (weak DES 56-bit cipher) and F (no integrity / * anti-tamper protection) when V2 mode is enabled. * - *
V2 (AES-256-GCM): key derivation via PBKDF2WithHmacSHA256 — deterministic across JVM - * vendors. GCM AEAD provides both confidentiality and integrity in one pass. + *
V2 (AES-256-GCM): key derivation via PBKDF2WithHmacSHA256 — deterministic across JVM vendors. + * GCM AEAD provides both confidentiality and integrity in one pass. * *
V1 (DES): retained for backward compatibility. When the V2 switch is toggled off, new tickets
* are issued in the legacy DES format so that downstream systems that have not yet upgraded can
@@ -54,8 +54,7 @@ public class TicketCipher {
private static final int IV_LEN_BYTES = 12; // GCM standard 96-bit IV
private static final int TAG_LEN_BITS = 128; // GCM auth tag
private static final int PBKDF2_ITERATIONS = 10000;
- private static final byte[] PBKDF2_SALT =
- "linkis-ticket-v2".getBytes(StandardCharsets.UTF_8);
+ private static final byte[] PBKDF2_SALT = "linkis-ticket-v2".getBytes(StandardCharsets.UTF_8);
private static final byte VERSION_V2 = 0x02;
private final SecretKey encKey;
@@ -93,9 +92,9 @@ public String encrypt(String plaintext) throws Exception {
}
/**
- * Decrypt data. Auto-detects V2 (version byte 0x02) vs legacy DES.
- * V2 tampering is rejected with AEADBadTagException.
- * V2 tickets issued before a rollback are still decrypted correctly even when V2 is disabled.
+ * Decrypt data. Auto-detects V2 (version byte 0x02) vs legacy DES. V2 tampering is rejected with
+ * AEADBadTagException. V2 tickets issued before a rollback are still decrypted correctly even
+ * when V2 is disabled.
*/
public String decrypt(String data) throws Exception {
if (StringUtils.isBlank(data)) {
diff --git a/linkis-commons/linkis-module/src/main/java/org/apache/linkis/errorcode/LinkisModuleErrorCodeSummary.java b/linkis-commons/linkis-module/src/main/java/org/apache/linkis/errorcode/LinkisModuleErrorCodeSummary.java
index 2331ba01624..986950f7f6c 100644
--- a/linkis-commons/linkis-module/src/main/java/org/apache/linkis/errorcode/LinkisModuleErrorCodeSummary.java
+++ b/linkis-commons/linkis-module/src/main/java/org/apache/linkis/errorcode/LinkisModuleErrorCodeSummary.java
@@ -41,7 +41,10 @@ public enum LinkisModuleErrorCodeSummary implements LinkisErrorCode {
"The receive queue for WebSocket is full, please try again later(WebSocket的接收队列已满,请稍后重试)!"),
WEBSOCKET_STOPPED(
11035,
- "WebSocket consumer has stopped, please contact the administrator to handle(WebSocket的消费器已停止,请联系管理员处理)!");
+ "WebSocket consumer has stopped, please contact the administrator to handle(WebSocket的消费器已停止,请联系管理员处理)!"),
+ CRYPT_KEY_INSECURE(
+ 11036,
+ "The wds.linkis.crypt.key is missing or insecure, refusing to start(wds.linkis.crypt.key 缺失或不安全,拒绝启动)");
/** error code(错误码) */
private final int errorCode;
diff --git a/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/conf/ServerConfiguration.scala b/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/conf/ServerConfiguration.scala
index 39199018f62..14ea0cdc55f 100644
--- a/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/conf/ServerConfiguration.scala
+++ b/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/conf/ServerConfiguration.scala
@@ -52,7 +52,9 @@ object ServerConfiguration extends Logging {
private val CRYPT_KEY_MIN_LENGTH = 16
private val cryptKeyRaw: String = CommonVars("wds.linkis.crypt.key", "").getValue
- private val allowInsecureCryptKey: Boolean = CommonVars("linkis.crypt.key.allow.insecure", "false").getValue.toBoolean
+
+ private val allowInsecureCryptKey: Boolean =
+ CommonVars("linkis.crypt.key.allow.insecure", "false").getValue.toBoolean
private def validateCryptKey(key: String): Unit = {
val issues = scala.collection.mutable.ArrayBuffer.empty[String]
@@ -92,8 +94,8 @@ object ServerConfiguration extends Logging {
// have not yet been upgraded. Decryption auto-detects both formats.
private val useTicketCipherV2: Boolean =
CommonVars("linkis.ticket.cipher.v2.enabled", "true").getValue.toBoolean
- val ticketCipher = new TicketCipher(cryptKeyRaw, useTicketCipherV2)
+ val ticketCipher = new TicketCipher(cryptKeyRaw, useTicketCipherV2)
private val ticketHeader = CommonVars("wds.linkis.ticket.header", "bfs_").getValue
diff --git a/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/security/SSOUtils.scala b/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/security/SSOUtils.scala
index 8efba0a4176..9ed9c3bc0d5 100644
--- a/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/security/SSOUtils.scala
+++ b/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/security/SSOUtils.scala
@@ -211,7 +211,8 @@ object SSOUtils extends Logging {
case _: LoginExpireException =>
logger.warn(
"Ignore-timeout path rejected ticket: valid decryption " +
- "but ticket not present in server-side session map")
+ "but ticket not present in server-side session map"
+ )
None
}
}
diff --git a/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/security/SecurityFilter.scala b/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/security/SecurityFilter.scala
index b4f0ae6cb32..6e02d324871 100644
--- a/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/security/SecurityFilter.scala
+++ b/linkis-commons/linkis-module/src/main/scala/org/apache/linkis/server/security/SecurityFilter.scala
@@ -17,7 +17,7 @@
package org.apache.linkis.server.security
-import org.apache.linkis.common.conf.Configuration
+import org.apache.linkis.common.conf.{CommonVars, Configuration}
import org.apache.linkis.common.utils.{Logging, RSAUtils, Utils}
import org.apache.linkis.errorcode.LinkisModuleErrorCodeSummary.ILLEGAL_USER_TOKEN
import org.apache.linkis.server.{Message, _}
@@ -196,14 +196,16 @@ object SecurityFilter {
// peer). External clients cannot set this cookie to trigger the bypass.
def isRequestIgnoreTimeout(req: HttpServletRequest): Boolean = {
val hasCookie = Option(req.getCookies).exists(
- _.exists(c => c.getName == ALLOW_ACCESS_WITHOUT_TIMEOUT && c.getValue == "true"))
+ _.exists(c => c.getName == ALLOW_ACCESS_WITHOUT_TIMEOUT && c.getValue == "true")
+ )
if (!hasCookie) return false
if (!requireInternalIp) return true // escape hatch for legacy deployments
val ip = getClientIp(req)
if (!isTrustedInternal(ip)) {
logger.warn(
s"Ignore-timeout cookie present but client IP $ip is not in " +
- "linkis.security.trusted.internal.sources; rejecting as potential auth bypass")
+ "linkis.security.trusted.internal.sources; rejecting as potential auth bypass"
+ )
return false
}
true
diff --git a/linkis-commons/linkis-module/src/test/scala/org/apache/linkis/server/security/SecurityFilterTest.scala b/linkis-commons/linkis-module/src/test/scala/org/apache/linkis/server/security/SecurityFilterTest.scala
index a68273b21b9..9d27be6c640 100644
--- a/linkis-commons/linkis-module/src/test/scala/org/apache/linkis/server/security/SecurityFilterTest.scala
+++ b/linkis-commons/linkis-module/src/test/scala/org/apache/linkis/server/security/SecurityFilterTest.scala
@@ -17,17 +17,20 @@
package org.apache.linkis.server.security
+import javax.servlet.http.{Cookie, HttpServletRequest}
+
import org.junit.jupiter.api.{Assertions, DisplayName, Test}
import org.mockito.Mockito.{mock, when}
-import javax.servlet.http.{Cookie, HttpServletRequest}
-
class SecurityFilterTest {
private val IGNORE_COOKIE_NAME = SecurityFilter.ALLOW_ACCESS_WITHOUT_TIMEOUT
- private def mockRequest(remoteAddr: String, cookies: Array[Cookie] = null,
- xForwardedFor: String = null): HttpServletRequest = {
+ private def mockRequest(
+ remoteAddr: String,
+ cookies: Array[Cookie] = null,
+ xForwardedFor: String = null
+ ): HttpServletRequest = {
val req = mock(classOf[HttpServletRequest])
when(req.getRemoteAddr).thenReturn(remoteAddr)
when(req.getCookies).thenReturn(cookies)
@@ -49,8 +52,7 @@ class SecurityFilterTest {
@Test
@DisplayName("isRequestIgnoreTimeout_returnsTrueWhenCookieFromLoopback")
def isRequestIgnoreTimeoutFromLoopbackTest(): Unit = {
- val req = mockRequest("127.0.0.1",
- cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "true")))
+ val req = mockRequest("127.0.0.1", cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "true")))
Assertions.assertTrue(SecurityFilter.isRequestIgnoreTimeout(req))
}
@@ -58,50 +60,50 @@ class SecurityFilterTest {
@DisplayName("isRequestIgnoreTimeout_returnsFalseWhenCookieFromExternalIP")
def isRequestIgnoreTimeoutFromExternalIPTest(): Unit = {
// 203.0.113.0/24 is TEST-NET-3, not in default RFC1918 trusted sources
- val req = mockRequest("203.0.113.1",
- cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "true")))
+ val req = mockRequest("203.0.113.1", cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "true")))
Assertions.assertFalse(SecurityFilter.isRequestIgnoreTimeout(req))
}
@Test
@DisplayName("isRequestIgnoreTimeout_returnsTrueFromPrivate10x")
def isRequestIgnoreTimeoutFromPrivate10xTest(): Unit = {
- val req = mockRequest("10.255.255.1",
- cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "true")))
+ val req = mockRequest("10.255.255.1", cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "true")))
Assertions.assertTrue(SecurityFilter.isRequestIgnoreTimeout(req))
}
@Test
@DisplayName("isRequestIgnoreTimeout_returnsTrueFromPrivate172x")
def isRequestIgnoreTimeoutFromPrivate172xTest(): Unit = {
- val req = mockRequest("172.31.0.1",
- cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "true")))
+ val req = mockRequest("172.31.0.1", cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "true")))
Assertions.assertTrue(SecurityFilter.isRequestIgnoreTimeout(req))
}
@Test
@DisplayName("isRequestIgnoreTimeout_returnsFalseWhenCookieValueIsFalse")
def isRequestIgnoreTimeoutCookieFalseTest(): Unit = {
- val req = mockRequest("127.0.0.1",
- cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "false")))
+ val req = mockRequest("127.0.0.1", cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "false")))
Assertions.assertFalse(SecurityFilter.isRequestIgnoreTimeout(req))
}
@Test
@DisplayName("isRequestIgnoreTimeout_honorsXForwardedForFromTrustedUpstream")
def isRequestIgnoreTimeoutWithXForwardedForTest(): Unit = {
- val req = mockRequest("127.0.0.1",
+ val req = mockRequest(
+ "127.0.0.1",
cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "true")),
- xForwardedFor = "10.0.0.5, 203.0.113.1")
+ xForwardedFor = "10.0.0.5, 203.0.113.1"
+ )
Assertions.assertTrue(SecurityFilter.isRequestIgnoreTimeout(req))
}
@Test
@DisplayName("isRequestIgnoreTimeout_ignoresXForwardedForFromUntrustedUpstream")
def isRequestIgnoreTimeoutXForwardedForUntrustedTest(): Unit = {
- val req = mockRequest("203.0.113.1",
+ val req = mockRequest(
+ "203.0.113.1",
cookies = Array(new Cookie(IGNORE_COOKIE_NAME, "true")),
- xForwardedFor = "10.0.0.5")
+ xForwardedFor = "10.0.0.5"
+ )
Assertions.assertFalse(SecurityFilter.isRequestIgnoreTimeout(req))
}
@@ -122,4 +124,5 @@ class SecurityFilterTest {
Assertions.assertEquals(-1, cookie.getMaxAge)
Assertions.assertEquals("/", cookie.getPath)
}
+
}
diff --git a/linkis-dist/package/db/linkis_dml.sql b/linkis-dist/package/db/linkis_dml.sql
index eb4cb680374..cffdead6027 100644
--- a/linkis-dist/package/db/linkis_dml.sql
+++ b/linkis-dist/package/db/linkis_dml.sql
@@ -679,7 +679,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'sid', 'SID', 'SID', NULL, 'TEXT', NULL, 0, 'SID', 'SID', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'serviceName', 'service_name', 'service_name', NULL, 'TEXT', NULL, 0, 'service_name', 'service_name', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'server', 'server', 'server', NULL, 'TEXT', NULL, 0, 'server', 'server', NULL, NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 0, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 0, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'dm';
INSERT INTO `linkis_ps_dm_datasource_type_key`
@@ -691,7 +691,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 1, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'kingbase';
INSERT INTO `linkis_ps_dm_datasource_type_key`
@@ -703,7 +703,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 1, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
-- https://jdbc.postgresql.org/documentation/use/
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'postgresql';
@@ -716,7 +716,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 1, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
-- https://learn.microsoft.com/zh-cn/sql/connect/jdbc/building-the-connection-url?redirectedfrom=MSDN&view=sql-server-ver16
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'sqlserver';
@@ -729,7 +729,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 1, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
-- https://www.ibm.com/docs/en/db2/11.5?topic=cdsudidsdjs-url-format-data-server-driver-jdbc-sqlj-type-4-connectivity
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'db2';
@@ -742,7 +742,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 1, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
-- https://greenplum.docs.pivotal.io/6-1/datadirect/datadirect_jdbc.html#topic_ylk_pbx_2bb
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'greenplum';
@@ -755,7 +755,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 1, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'doris';
INSERT INTO `linkis_ps_dm_datasource_type_key`
@@ -767,7 +767,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 1, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
-- https://github.com/ClickHouse/clickhouse-jdbc/tree/master/clickhouse-jdbc
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'clickhouse';
@@ -780,7 +780,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 1, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'hive';
@@ -800,7 +800,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 0, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'starrocks';
INSERT INTO `linkis_ps_dm_datasource_type_key`
@@ -812,7 +812,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 0, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'gaussdb';
INSERT INTO `linkis_ps_dm_datasource_type_key`
@@ -824,7 +824,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 1, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'oceanbase';
INSERT INTO `linkis_ps_dm_datasource_type_key`
@@ -836,7 +836,7 @@ VALUES (@data_source_type_id, 'address', '地址', 'Address', NULL, 'TEXT', NULL
(@data_source_type_id, 'params', '连接参数(Connection params)', 'Connection params', NULL, 'TEXT', NULL, 0, '输入JSON格式(Input JSON format): {"param":"value"}', 'Input JSON format: {"param":"value"}', NULL, NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'username', '用户名(Username)', 'Username', NULL, 'TEXT', NULL, 1, '用户名(Username)', 'Username', '^[0-9A-Za-z_-]+$', NULL, NULL, NULL, now(), now()),
(@data_source_type_id, 'password', '密码(Password)', 'Password', NULL, 'PASSWORD', NULL, 1, '密码(Password)', 'Password', '', NULL, NULL, NULL, now(), now()),
- (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, NULL, now(), now());
+ (@data_source_type_id, 'instance', '实例名(instance)', 'Instance', NULL, 'TEXT', NULL, 1, '实例名(instance)', 'Instance', '^[A-Za-z0-9_.-]+$', NULL, NULL, NULL, now(), now());
select @data_source_type_id := id from `linkis_ps_dm_datasource_type` where `name` = 'doris';
UPDATE linkis_ps_dm_datasource_type_key SET `require` = 0 WHERE `key` ="password" and `data_source_type_id` = @data_source_type_id;
diff --git a/linkis-dist/pom.xml b/linkis-dist/pom.xml
index 5ffb17e07af..8949e9f4b41 100644
--- a/linkis-dist/pom.xml
+++ b/linkis-dist/pom.xml
@@ -165,8 +165,7 @@