[CP] fix proxy cap not sync when changing user
This commit is contained in:
parent
8c12503083
commit
4f995347ac
@ -607,5 +607,29 @@ int ObMPBase::process_extra_info(sql::ObSQLSessionInfo &session,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObMPBase::update_charset_sys_vars(ObSMConnection &conn, ObSQLSessionInfo &sess_info)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
int64_t cs_type = conn.client_cs_type_;
|
||||
const int64_t LATIN1_CS = 8;
|
||||
//background: mysqltest give a default connect_charset=latin1
|
||||
// but for history reason, oceanbase use utf8 as
|
||||
// default charset for mysqltest
|
||||
//TODO: after obclient&mysqltest support default charset = utf8
|
||||
// login for cs_type != LATIN1_CS would be deleted
|
||||
if (ObCharset::is_valid_collation(cs_type)) {
|
||||
if (OB_FAIL(sess_info.update_sys_variable(SYS_VAR_CHARACTER_SET_CLIENT, cs_type))) {
|
||||
SQL_ENG_LOG(WARN, "failed to update sys var", K(ret));
|
||||
} else if (OB_FAIL(sess_info.update_sys_variable(SYS_VAR_CHARACTER_SET_RESULTS, cs_type))) {
|
||||
SQL_ENG_LOG(WARN, "failed to update sys var", K(ret));
|
||||
} else if (OB_FAIL(sess_info.update_sys_variable(SYS_VAR_CHARACTER_SET_CONNECTION, cs_type))) {
|
||||
SQL_ENG_LOG(WARN, "failed to update sys var", K(ret));
|
||||
} else if (OB_FAIL(sess_info.update_sys_variable(SYS_VAR_COLLATION_CONNECTION, cs_type))) {
|
||||
SQL_ENG_LOG(WARN, "failed to update sys var", K(ret));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
} // namespace observer
|
||||
} // namespace oceanbase
|
||||
|
@ -110,6 +110,7 @@ protected:
|
||||
bool need_flush_buffer() const;
|
||||
int update_transmission_checksum_flag(const sql::ObSQLSessionInfo &session);
|
||||
int update_proxy_sys_vars(sql::ObSQLSessionInfo &session);
|
||||
int update_charset_sys_vars(ObSMConnection &conn, sql::ObSQLSessionInfo &sess_info);
|
||||
|
||||
int build_encode_param_(obmysql::ObProtoEncodeParam ¶m,
|
||||
obmysql::ObMySQLPacket *pkt, const bool is_last);
|
||||
|
@ -276,9 +276,13 @@ int ObMPChangeUser::load_privilege_info(ObSQLSessionInfo *session)
|
||||
int ret = OB_SUCCESS;
|
||||
|
||||
ObSchemaGetterGuard schema_guard;
|
||||
ObSMConnection *conn = NULL;
|
||||
if (OB_ISNULL(session) || OB_ISNULL(gctx_.schema_service_)) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
OB_LOG(WARN,"invalid argument", K(session), K(gctx_.schema_service_));
|
||||
} else if (OB_ISNULL(conn = get_conn())) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_ERROR("null conn", K(ret));
|
||||
} else if (OB_FAIL(gctx_.schema_service_->get_tenant_schema_guard(
|
||||
session->get_effective_tenant_id(), schema_guard))) {
|
||||
OB_LOG(WARN,"fail get schema guard", K(ret));
|
||||
@ -308,8 +312,7 @@ int ObMPChangeUser::load_privilege_info(ObSQLSessionInfo *session)
|
||||
login_info.client_ip_ = session->get_client_ip();
|
||||
OB_LOG(INFO, "com change user", "username", login_info.user_name_,
|
||||
"tenant name", login_info.tenant_name_);
|
||||
const ObSMConnection &conn = *get_conn();
|
||||
login_info.scramble_str_.assign_ptr(conn.scramble_buf_, sizeof(conn.scramble_buf_));
|
||||
login_info.scramble_str_.assign_ptr(conn->scramble_buf_, sizeof(conn->scramble_buf_));
|
||||
login_info.passwd_ = auth_response_;
|
||||
|
||||
}
|
||||
@ -354,6 +357,12 @@ int ObMPChangeUser::load_privilege_info(ObSQLSessionInfo *session)
|
||||
session->get_database_name(),
|
||||
db_id))) {
|
||||
OB_LOG(WARN, "failed to get database id", K(ret));
|
||||
} else if (OB_FAIL(update_transmission_checksum_flag(*session))) {
|
||||
LOG_WARN("update transmisson checksum flag failed", K(ret));
|
||||
} else if (OB_FAIL(update_proxy_sys_vars(*session))) {
|
||||
LOG_WARN("update_proxy_sys_vars failed", K(ret));
|
||||
} else if (OB_FAIL(update_charset_sys_vars(*conn, *session))) {
|
||||
LOG_WARN("fail to update charset sys vars", K(ret));
|
||||
} else {
|
||||
session->set_database_id(db_id);
|
||||
session->reset_user_var();
|
||||
|
@ -2147,26 +2147,3 @@ int ObMPConnect::set_client_version(ObSMConnection &conn)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObMPConnect::update_charset_sys_vars(ObSMConnection &conn, ObSQLSessionInfo &sess_info)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
int64_t cs_type = conn.client_cs_type_;
|
||||
const int64_t LATIN1_CS = 8;
|
||||
//background: mysqltest give a default connect_charset=latin1
|
||||
// but for history reason, oceanbase use utf8 as
|
||||
// default charset for mysqltest
|
||||
//TODO: after obclient&mysqltest support default charset = utf8
|
||||
// login for cs_type != LATIN1_CS would be deleted
|
||||
if (ObCharset::is_valid_collation(cs_type)) {
|
||||
if (OB_FAIL(sess_info.update_sys_variable(SYS_VAR_CHARACTER_SET_CLIENT, cs_type))) {
|
||||
SQL_ENG_LOG(WARN, "failed to update sys var", K(ret));
|
||||
} else if (OB_FAIL(sess_info.update_sys_variable(SYS_VAR_CHARACTER_SET_RESULTS, cs_type))) {
|
||||
SQL_ENG_LOG(WARN, "failed to update sys var", K(ret));
|
||||
} else if (OB_FAIL(sess_info.update_sys_variable(SYS_VAR_CHARACTER_SET_CONNECTION, cs_type))) {
|
||||
SQL_ENG_LOG(WARN, "failed to update sys var", K(ret));
|
||||
} else if (OB_FAIL(sess_info.update_sys_variable(SYS_VAR_COLLATION_CONNECTION, cs_type))) {
|
||||
SQL_ENG_LOG(WARN, "failed to update sys var", K(ret));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -123,7 +123,6 @@ private:
|
||||
|
||||
int set_proxy_version(ObSMConnection &conn);
|
||||
int set_client_version(ObSMConnection &conn);
|
||||
int update_charset_sys_vars(ObSMConnection &conn, sql::ObSQLSessionInfo &sess_info);
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObMPConnect);
|
||||
obmysql::OMPKHandshakeResponse hsr_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user