[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;
|
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 observer
|
||||||
} // namespace oceanbase
|
} // namespace oceanbase
|
||||||
|
@ -110,6 +110,7 @@ protected:
|
|||||||
bool need_flush_buffer() const;
|
bool need_flush_buffer() const;
|
||||||
int update_transmission_checksum_flag(const sql::ObSQLSessionInfo &session);
|
int update_transmission_checksum_flag(const sql::ObSQLSessionInfo &session);
|
||||||
int update_proxy_sys_vars(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,
|
int build_encode_param_(obmysql::ObProtoEncodeParam ¶m,
|
||||||
obmysql::ObMySQLPacket *pkt, const bool is_last);
|
obmysql::ObMySQLPacket *pkt, const bool is_last);
|
||||||
|
@ -276,9 +276,13 @@ int ObMPChangeUser::load_privilege_info(ObSQLSessionInfo *session)
|
|||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
|
||||||
ObSchemaGetterGuard schema_guard;
|
ObSchemaGetterGuard schema_guard;
|
||||||
|
ObSMConnection *conn = NULL;
|
||||||
if (OB_ISNULL(session) || OB_ISNULL(gctx_.schema_service_)) {
|
if (OB_ISNULL(session) || OB_ISNULL(gctx_.schema_service_)) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
OB_LOG(WARN,"invalid argument", K(session), K(gctx_.schema_service_));
|
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(
|
} else if (OB_FAIL(gctx_.schema_service_->get_tenant_schema_guard(
|
||||||
session->get_effective_tenant_id(), schema_guard))) {
|
session->get_effective_tenant_id(), schema_guard))) {
|
||||||
OB_LOG(WARN,"fail get schema guard", K(ret));
|
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();
|
login_info.client_ip_ = session->get_client_ip();
|
||||||
OB_LOG(INFO, "com change user", "username", login_info.user_name_,
|
OB_LOG(INFO, "com change user", "username", login_info.user_name_,
|
||||||
"tenant name", login_info.tenant_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_;
|
login_info.passwd_ = auth_response_;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -354,6 +357,12 @@ int ObMPChangeUser::load_privilege_info(ObSQLSessionInfo *session)
|
|||||||
session->get_database_name(),
|
session->get_database_name(),
|
||||||
db_id))) {
|
db_id))) {
|
||||||
OB_LOG(WARN, "failed to get database id", K(ret));
|
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 {
|
} else {
|
||||||
session->set_database_id(db_id);
|
session->set_database_id(db_id);
|
||||||
session->reset_user_var();
|
session->reset_user_var();
|
||||||
|
@ -2147,26 +2147,3 @@ int ObMPConnect::set_client_version(ObSMConnection &conn)
|
|||||||
return ret;
|
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_proxy_version(ObSMConnection &conn);
|
||||||
int set_client_version(ObSMConnection &conn);
|
int set_client_version(ObSMConnection &conn);
|
||||||
int update_charset_sys_vars(ObSMConnection &conn, sql::ObSQLSessionInfo &sess_info);
|
|
||||||
private:
|
private:
|
||||||
DISALLOW_COPY_AND_ASSIGN(ObMPConnect);
|
DISALLOW_COPY_AND_ASSIGN(ObMPConnect);
|
||||||
obmysql::OMPKHandshakeResponse hsr_;
|
obmysql::OMPKHandshakeResponse hsr_;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user