[FEAT MERGE]SQL SSL support specify the minimum TLS version number
This commit is contained in:
committed by
ob-robot
parent
5eb8d4f090
commit
5cfc4e7073
1
deps/easy/src/io/easy_connection.c
vendored
1
deps/easy/src/io/easy_connection.c
vendored
@ -2543,6 +2543,7 @@ static easy_connection_t *easy_connection_new()
|
|||||||
c->write = easy_socket_write;
|
c->write = easy_socket_write;
|
||||||
c->fd = -1;
|
c->fd = -1;
|
||||||
c->armed_ack_timeout = -1;
|
c->armed_ack_timeout = -1;
|
||||||
|
c->tls_version_option = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3;
|
||||||
|
|
||||||
easy_list_init(&c->message_list);
|
easy_list_init(&c->message_list);
|
||||||
easy_list_init(&c->server_session_list);
|
easy_list_init(&c->server_session_list);
|
||||||
|
|||||||
1
deps/easy/src/io/easy_io_struct.h
vendored
1
deps/easy/src/io/easy_io_struct.h
vendored
@ -417,6 +417,7 @@ struct easy_connection_t {
|
|||||||
int64_t keepalive_enabled;
|
int64_t keepalive_enabled;
|
||||||
int64_t tx_keepalive_cnt;
|
int64_t tx_keepalive_cnt;
|
||||||
int64_t rx_keepalive_cnt;
|
int64_t rx_keepalive_cnt;
|
||||||
|
uint64_t tls_version_option;
|
||||||
ev_tstamp last_tx_tstamp;
|
ev_tstamp last_tx_tstamp;
|
||||||
ev_tstamp last_rx_tstamp;
|
ev_tstamp last_rx_tstamp;
|
||||||
uint8_t local_magic_ver;
|
uint8_t local_magic_ver;
|
||||||
|
|||||||
6
deps/easy/src/io/easy_ssl.c
vendored
6
deps/easy/src/io/easy_ssl.c
vendored
@ -233,7 +233,7 @@ int easy_ssl_connection_create(easy_ssl_ctx_t *ssl, easy_connection_t *c)
|
|||||||
easy_error_log("SSL_set_ex_data() failed");
|
easy_error_log("SSL_set_ex_data() failed");
|
||||||
return EASY_ERROR;
|
return EASY_ERROR;
|
||||||
}
|
}
|
||||||
|
SSL_set_options(sc->connection, c->tls_version_option);
|
||||||
sc->session_reuse = ssl->conf.session_reuse;
|
sc->session_reuse = ssl->conf.session_reuse;
|
||||||
c->sc = sc;
|
c->sc = sc;
|
||||||
|
|
||||||
@ -1614,9 +1614,7 @@ static int easy_ssl_ctx_create_for_mysql(easy_ssl_ctx_t *ssl, int is_babassl)
|
|||||||
/* server side options */
|
/* server side options */
|
||||||
SSL_CTX_set_options(ssl->ctx, SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG);
|
SSL_CTX_set_options(ssl->ctx, SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG);
|
||||||
SSL_CTX_set_options(ssl->ctx, SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER);
|
SSL_CTX_set_options(ssl->ctx, SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER);
|
||||||
#if OPENSSL_VERSION_NUMBER >= 0x10101000L
|
|
||||||
SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_TLSv1_3);
|
|
||||||
#endif
|
|
||||||
/* this option allow a potential SSL 2.0 rollback (CAN-2005-2969) */
|
/* this option allow a potential SSL 2.0 rollback (CAN-2005-2969) */
|
||||||
SSL_CTX_set_options(ssl->ctx, SSL_OP_MSIE_SSLV2_RSA_PADDING);
|
SSL_CTX_set_options(ssl->ctx, SSL_OP_MSIE_SSLV2_RSA_PADDING);
|
||||||
|
|
||||||
|
|||||||
7
deps/oblib/src/lib/ssl/ob_ssl_config.cpp
vendored
7
deps/oblib/src/lib/ssl/ob_ssl_config.cpp
vendored
@ -399,9 +399,7 @@ static SSL_CTX* ob_ssl_create_ssl_ctx(const ObSSLConfig& ssl_config)
|
|||||||
/* server side options */
|
/* server side options */
|
||||||
SSL_CTX_set_options(ctx, SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG);
|
SSL_CTX_set_options(ctx, SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG);
|
||||||
SSL_CTX_set_options(ctx, SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER);
|
SSL_CTX_set_options(ctx, SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER);
|
||||||
#if OPENSSL_VERSION_NUMBER >= 0x10101000L
|
|
||||||
SSL_CTX_set_options(ctx, SSL_OP_NO_TLSv1_3);
|
|
||||||
#endif
|
|
||||||
/* this option allow a potential SSL 2.0 rollback (CAN-2005-2969) */
|
/* this option allow a potential SSL 2.0 rollback (CAN-2005-2969) */
|
||||||
SSL_CTX_set_options(ctx, SSL_OP_MSIE_SSLV2_RSA_PADDING);
|
SSL_CTX_set_options(ctx, SSL_OP_MSIE_SSLV2_RSA_PADDING);
|
||||||
|
|
||||||
@ -484,7 +482,7 @@ int ob_ssl_load_config(int ctx_id, const ObSSLConfig& ssl_config)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ob_fd_enable_ssl_for_server(int fd, int ctx_id)
|
int ob_fd_enable_ssl_for_server(int fd, int ctx_id, uint64_t tls_option)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
SSL_CTX *ctx = NULL;
|
SSL_CTX *ctx = NULL;
|
||||||
@ -504,6 +502,7 @@ int ob_fd_enable_ssl_for_server(int fd, int ctx_id)
|
|||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
COMMON_LOG(WARN, "SSL_set_fd failed", K(ret), K(fd), K(ctx_id));
|
COMMON_LOG(WARN, "SSL_set_fd failed", K(ret), K(fd), K(ctx_id));
|
||||||
} else {
|
} else {
|
||||||
|
SSL_set_options(ssl, tls_option);
|
||||||
SSL_set_accept_state(ssl);
|
SSL_set_accept_state(ssl);
|
||||||
ATOMIC_STORE(&(gs_ssl_array[fd].ssl), ssl);
|
ATOMIC_STORE(&(gs_ssl_array[fd].ssl), ssl);
|
||||||
}
|
}
|
||||||
|
|||||||
2
deps/oblib/src/lib/ssl/ob_ssl_config.h
vendored
2
deps/oblib/src/lib/ssl/ob_ssl_config.h
vendored
@ -33,7 +33,7 @@ enum OB_SSL_ROLE {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int ob_ssl_load_config(int ctx_id, const ObSSLConfig& ssl_config);
|
int ob_ssl_load_config(int ctx_id, const ObSSLConfig& ssl_config);
|
||||||
int ob_fd_enable_ssl_for_server(int fd, int ctx_id);
|
int ob_fd_enable_ssl_for_server(int fd, int ctx_id, uint64_t tls_option);
|
||||||
int ob_fd_enable_ssl_for_client(int fd, int ctx_id);
|
int ob_fd_enable_ssl_for_client(int fd, int ctx_id);
|
||||||
void ob_fd_disable_ssl(int fd);
|
void ob_fd_disable_ssl(int fd);
|
||||||
SSL* ob_fd_get_ssl_st(int fd);
|
SSL* ob_fd_get_ssl_st(int fd);
|
||||||
|
|||||||
13
deps/oblib/src/rpc/obmysql/ob_sql_nio.cpp
vendored
13
deps/oblib/src/rpc/obmysql/ob_sql_nio.cpp
vendored
@ -344,7 +344,7 @@ public:
|
|||||||
ObSqlSock(ObSqlNioImpl *nio, int fd): dlink_(), all_list_link_(), write_task_link_(), nio_impl_(nio),
|
ObSqlSock(ObSqlNioImpl *nio, int fd): dlink_(), all_list_link_(), write_task_link_(), nio_impl_(nio),
|
||||||
fd_(fd), err_(0), read_buffer_(fd), need_epoll_trigger_write_(false), may_handling_(true),
|
fd_(fd), err_(0), read_buffer_(fd), need_epoll_trigger_write_(false), may_handling_(true),
|
||||||
handler_close_flag_(false), need_shutdown_(false), last_decode_time_(0), last_write_time_(0),
|
handler_close_flag_(false), need_shutdown_(false), last_decode_time_(0), last_write_time_(0),
|
||||||
sql_session_info_(NULL) {
|
sql_session_info_(NULL), tls_verion_option_(SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3) {
|
||||||
memset(sess_, 0, sizeof(sess_));
|
memset(sess_, 0, sizeof(sess_));
|
||||||
}
|
}
|
||||||
~ObSqlSock() {}
|
~ObSqlSock() {}
|
||||||
@ -443,6 +443,7 @@ public:
|
|||||||
void shutdown() { ::shutdown(fd_, SHUT_RD); }
|
void shutdown() { ::shutdown(fd_, SHUT_RD); }
|
||||||
int set_ssl_enabled();
|
int set_ssl_enabled();
|
||||||
SSL* get_ssl_st();
|
SSL* get_ssl_st();
|
||||||
|
void set_tls_version_option(uint64_t tls_option) { tls_verion_option_ = tls_option; }
|
||||||
int write_handshake_packet(const char* buf, int64_t sz);
|
int write_handshake_packet(const char* buf, int64_t sz);
|
||||||
public:
|
public:
|
||||||
ObDLink dlink_;
|
ObDLink dlink_;
|
||||||
@ -463,6 +464,7 @@ private:
|
|||||||
int64_t last_decode_time_;
|
int64_t last_decode_time_;
|
||||||
int64_t last_write_time_;
|
int64_t last_write_time_;
|
||||||
void* sql_session_info_;
|
void* sql_session_info_;
|
||||||
|
uint64_t tls_verion_option_;
|
||||||
private:
|
private:
|
||||||
const rpc::TraceId* get_trace_id() const {
|
const rpc::TraceId* get_trace_id() const {
|
||||||
ObSqlSockSession* sess = (ObSqlSockSession *)sess_;
|
ObSqlSockSession* sess = (ObSqlSockSession *)sess_;
|
||||||
@ -476,6 +478,7 @@ private:
|
|||||||
ObSqlSockSession* sess = (ObSqlSockSession *)sess_;
|
ObSqlSockSession* sess = (ObSqlSockSession *)sess_;
|
||||||
return sess->sql_session_id_;
|
return sess->sql_session_id_;
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
char sess_[3000] __attribute__((aligned(16)));
|
char sess_[3000] __attribute__((aligned(16)));
|
||||||
};
|
};
|
||||||
@ -488,7 +491,7 @@ static ObSqlSock *sess2sock(void *sess)
|
|||||||
int ObSqlSock::set_ssl_enabled()
|
int ObSqlSock::set_ssl_enabled()
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
if (OB_FAIL(ob_fd_enable_ssl_for_server(fd_, OB_SSL_CTX_ID_SQL_NIO))) {
|
if (OB_FAIL(ob_fd_enable_ssl_for_server(fd_, OB_SSL_CTX_ID_SQL_NIO, tls_verion_option_))) {
|
||||||
LOG_WARN("sqlnio enable ssl for server failed", K(ret), K(fd_));
|
LOG_WARN("sqlnio enable ssl for server failed", K(ret), K(fd_));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@ -1231,5 +1234,11 @@ int ObSqlNio::write_handshake_packet(void* sess, const char* buf, int64_t sz)
|
|||||||
{
|
{
|
||||||
return sess2sock(sess)->write_handshake_packet(buf, sz);
|
return sess2sock(sess)->write_handshake_packet(buf, sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObSqlNio::set_tls_version_option(void* sess, uint64_t tls_option)
|
||||||
|
{
|
||||||
|
sess2sock(sess)->set_tls_version_option(tls_option);
|
||||||
|
}
|
||||||
|
|
||||||
}; // end namespace obmysql
|
}; // end namespace obmysql
|
||||||
}; // end namespace oceanbase
|
}; // end namespace oceanbase
|
||||||
|
|||||||
1
deps/oblib/src/rpc/obmysql/ob_sql_nio.h
vendored
1
deps/oblib/src/rpc/obmysql/ob_sql_nio.h
vendored
@ -59,6 +59,7 @@ public:
|
|||||||
}
|
}
|
||||||
void update_tcp_keepalive_params(int keepalive_enabled, uint32_t tcp_keepidle, uint32_t tcp_keepintvl, uint32_t tcp_keepcnt);
|
void update_tcp_keepalive_params(int keepalive_enabled, uint32_t tcp_keepidle, uint32_t tcp_keepintvl, uint32_t tcp_keepcnt);
|
||||||
int write_handshake_packet(void* sess, const char* buf, int64_t sz);
|
int write_handshake_packet(void* sess, const char* buf, int64_t sz);
|
||||||
|
void set_tls_version_option(void* sess, uint64_t tls_option);
|
||||||
private:
|
private:
|
||||||
void run(int64_t idx);
|
void run(int64_t idx);
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -178,5 +178,10 @@ int ObSqlSockSession::write_hanshake_packet(const char *buf, int64_t sz)
|
|||||||
return nio_->write_handshake_packet((void *)this, buf, sz);
|
return nio_->write_handshake_packet((void *)this, buf, sz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObSqlSockSession::set_tls_version_option(uint64_t tls_option)
|
||||||
|
{
|
||||||
|
nio_->set_tls_version_option((void *)this, tls_option);
|
||||||
|
}
|
||||||
|
|
||||||
}; // end namespace obmysql
|
}; // end namespace obmysql
|
||||||
}; // end namespace oceanbase
|
}; // end namespace oceanbase
|
||||||
|
|||||||
@ -63,6 +63,7 @@ public:
|
|||||||
SSL* get_ssl_st();
|
SSL* get_ssl_st();
|
||||||
bool is_inited() const { return is_inited_; }
|
bool is_inited() const { return is_inited_; }
|
||||||
int write_hanshake_packet(const char *buf, int64_t sz);
|
int write_hanshake_packet(const char *buf, int64_t sz);
|
||||||
|
void set_tls_version_option(uint64_t tls_option);
|
||||||
ObSqlNio* nio_;
|
ObSqlNio* nio_;
|
||||||
ObISMConnectionCallback& sm_conn_cb_;
|
ObISMConnectionCallback& sm_conn_cb_;
|
||||||
rpc::ObRequest sql_req_;
|
rpc::ObRequest sql_req_;
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define USING_LOG_PREFIX RPC_OBMYSQL
|
#define USING_LOG_PREFIX RPC_OBMYSQL
|
||||||
|
#include <openssl/ssl.h>
|
||||||
#include "observer/mysql/obsm_conn_callback.h"
|
#include "observer/mysql/obsm_conn_callback.h"
|
||||||
#include "rpc/obmysql/ob_sql_sock_session.h"
|
#include "rpc/obmysql/ob_sql_sock_session.h"
|
||||||
#include "rpc/obmysql/obsm_struct.h"
|
#include "rpc/obmysql/obsm_struct.h"
|
||||||
@ -29,6 +30,22 @@ using namespace observer;
|
|||||||
namespace obmysql
|
namespace obmysql
|
||||||
{
|
{
|
||||||
|
|
||||||
|
uint64_t ob_calculate_tls_version_option(const ObString &tls_min_version)
|
||||||
|
{
|
||||||
|
uint64_t tls_option = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3;
|
||||||
|
if (0 == tls_min_version.case_compare("NONE")) {
|
||||||
|
} else if (0 == tls_min_version.case_compare("TLSV1")) {
|
||||||
|
//no need to set because OPENSSL support all protocol by default
|
||||||
|
} else if (0 == tls_min_version.case_compare("TLSV1.1")) {
|
||||||
|
tls_option |= SSL_OP_NO_TLSv1;
|
||||||
|
} else if (0 == tls_min_version.case_compare("TLSV1.2")) {
|
||||||
|
tls_option |= (SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1);
|
||||||
|
} else if (0 == tls_min_version.case_compare("TLSV1.3")) {
|
||||||
|
tls_option |= (SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2);
|
||||||
|
}
|
||||||
|
return tls_option;
|
||||||
|
}
|
||||||
|
|
||||||
static int create_scramble_string(char *scramble_buf, const int64_t buf_len, common::ObMysqlRandom &thread_rand)
|
static int create_scramble_string(char *scramble_buf, const int64_t buf_len, common::ObMysqlRandom &thread_rand)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
@ -118,6 +135,9 @@ int ObSMConnectionCallback::init(ObSqlSockSession& sess, ObSMConnection& conn)
|
|||||||
LOG_WARN("send handshake fail", K(ret), K(sess.client_addr_));
|
LOG_WARN("send handshake fail", K(ret), K(sess.client_addr_));
|
||||||
} else {
|
} else {
|
||||||
sess.sql_session_id_ = conn.sessid_;
|
sess.sql_session_id_ = conn.sessid_;
|
||||||
|
uint64_t tls_version_option = ob_calculate_tls_version_option(
|
||||||
|
GCONF.sql_protocol_min_tls_version.str());
|
||||||
|
sess.set_tls_version_option(tls_version_option);
|
||||||
LOG_INFO("sm conn init succ", K(conn.sessid_), K(sess.client_addr_));
|
LOG_INFO("sm conn init succ", K(conn.sessid_), K(sess.client_addr_));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,9 @@ namespace oceanbase
|
|||||||
using namespace rpc;
|
using namespace rpc;
|
||||||
using namespace common;
|
using namespace common;
|
||||||
using namespace name;
|
using namespace name;
|
||||||
|
namespace obmysql {
|
||||||
|
extern uint64_t ob_calculate_tls_version_option(const ObString &tls_min_version);
|
||||||
|
}
|
||||||
namespace observer
|
namespace observer
|
||||||
{
|
{
|
||||||
bool enable_proto_dia()
|
bool enable_proto_dia()
|
||||||
@ -113,6 +116,9 @@ int ObSMHandler::on_connect(easy_connection_t *c)
|
|||||||
eret = EASY_ERROR;
|
eret = EASY_ERROR;
|
||||||
LOG_WARN_RET(tmp_ret, "send handshake packet failed", K(tmp_ret), K(eret));
|
LOG_WARN_RET(tmp_ret, "send handshake packet failed", K(tmp_ret), K(eret));
|
||||||
} else {
|
} else {
|
||||||
|
uint64_t tls_version_option = obmysql::ob_calculate_tls_version_option(
|
||||||
|
GCONF.sql_protocol_min_tls_version.str());
|
||||||
|
c->tls_version_option = tls_version_option;
|
||||||
LOG_INFO("new mysql sessid created", K(easy_connection_str(c)), K(sessid), K(crt_id_ret));
|
LOG_INFO("new mysql sessid created", K(easy_connection_str(c)), K(sessid), K(crt_id_ret));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -857,5 +857,16 @@ bool ObConfigRuntimeFilterChecker::check(const ObConfigItem &t) const
|
|||||||
int64_t rf_type = get_runtime_filter_type(t.str(), len);
|
int64_t rf_type = get_runtime_filter_type(t.str(), len);
|
||||||
return rf_type >= 0;
|
return rf_type >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ObConfigSQLTlsVersionChecker::check(const ObConfigItem &t) const
|
||||||
|
{
|
||||||
|
const ObString tmp_str(t.str());
|
||||||
|
return 0 == tmp_str.case_compare("NONE") ||
|
||||||
|
0 == tmp_str.case_compare("TLSV1") ||
|
||||||
|
0 == tmp_str.case_compare("TLSV1.1") ||
|
||||||
|
0 == tmp_str.case_compare("TLSV1.2") ||
|
||||||
|
0 == tmp_str.case_compare("TLSV1.3");
|
||||||
|
}
|
||||||
|
|
||||||
} // end of namepace common
|
} // end of namepace common
|
||||||
} // end of namespace oceanbase
|
} // end of namespace oceanbase
|
||||||
|
|||||||
@ -614,6 +614,16 @@ private:
|
|||||||
DISALLOW_COPY_AND_ASSIGN(ObRpcServerAuthMethodChecker);
|
DISALLOW_COPY_AND_ASSIGN(ObRpcServerAuthMethodChecker);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ObConfigSQLTlsVersionChecker
|
||||||
|
: public ObConfigChecker
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ObConfigSQLTlsVersionChecker() {}
|
||||||
|
virtual ~ObConfigSQLTlsVersionChecker() {}
|
||||||
|
bool check(const ObConfigItem &t) const;
|
||||||
|
private:
|
||||||
|
DISALLOW_COPY_AND_ASSIGN(ObConfigSQLTlsVersionChecker);
|
||||||
|
};
|
||||||
typedef __ObConfigContainer<ObConfigStringKey,
|
typedef __ObConfigContainer<ObConfigStringKey,
|
||||||
ObConfigItem, OB_MAX_CONFIG_NUMBER> ObConfigContainer;
|
ObConfigItem, OB_MAX_CONFIG_NUMBER> ObConfigContainer;
|
||||||
} // namespace common
|
} // namespace common
|
||||||
|
|||||||
@ -1575,4 +1575,9 @@ ERRSIM_DEF_STR_LIST(errsim_module_types, OB_TENANT_PARAMETER, "",
|
|||||||
ERRSIM_DEF_DBL(errsim_module_error_percentage, OB_TENANT_PARAMETER, "0", "[0,100]",
|
ERRSIM_DEF_DBL(errsim_module_error_percentage, OB_TENANT_PARAMETER, "0", "[0,100]",
|
||||||
"the percentage of the error happened to errsim module. "
|
"the percentage of the error happened to errsim module. "
|
||||||
"Range: [0, 100] in percentage",
|
"Range: [0, 100] in percentage",
|
||||||
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE))
|
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||||
|
DEF_STR_WITH_CHECKER(sql_protocol_min_tls_version, OB_CLUSTER_PARAMETER, "none",
|
||||||
|
common::ObConfigSQLTlsVersionChecker,
|
||||||
|
"SQL SSL control options, used to specify the minimum SSL/TLS version number. "
|
||||||
|
"values: none, TLSv1, TLSv1.1, TLSv1.2, TLSv1.3",
|
||||||
|
ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||||
|
|||||||
@ -196,6 +196,7 @@ server_cpu_quota_min
|
|||||||
server_permanent_offline_time
|
server_permanent_offline_time
|
||||||
sql_login_thread_count
|
sql_login_thread_count
|
||||||
sql_net_thread_count
|
sql_net_thread_count
|
||||||
|
sql_protocol_min_tls_version
|
||||||
sql_work_area
|
sql_work_area
|
||||||
ssl_client_authentication
|
ssl_client_authentication
|
||||||
ssl_external_kms_info
|
ssl_external_kms_info
|
||||||
|
|||||||
Reference in New Issue
Block a user