[CP] not to print plain text of query sql which contains sensitive data
This commit is contained in:
		@ -205,13 +205,14 @@ int ObSql::stmt_query(const common::ObString &stmt, ObSqlCtx &context, ObResultS
 | 
			
		||||
           "tenant_id", result.get_session().get_effective_tenant_id(),
 | 
			
		||||
           "execution_id", result.get_session().get_current_execution_id());
 | 
			
		||||
#endif
 | 
			
		||||
  NG_TRACE_EXT(parse_begin, OB_ID(stmt), trunc_stmt.string(), OB_ID(stmt_len), stmt.length());
 | 
			
		||||
  NG_TRACE(parse_begin);
 | 
			
		||||
  //1 check inited
 | 
			
		||||
  if (OB_FAIL(sanity_check(context))) {
 | 
			
		||||
    LOG_WARN("Failed to do sanity check", K(ret));
 | 
			
		||||
  } else if (OB_FAIL(handle_text_query(stmt, context, result))) {
 | 
			
		||||
    if (OB_EAGAIN != ret && OB_ERR_PROXY_REROUTE != ret) {
 | 
			
		||||
      LOG_WARN("fail to handle text query", K(stmt), K(ret));
 | 
			
		||||
      LOG_WARN("fail to handle text query",
 | 
			
		||||
               "stmt", context.is_sensitive_ ? ObString(OB_MASKED_STR) : stmt, K(ret));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  CHECK_STMT_SUPPORTED_BY_TXN_FREE_ROUTE(result, true);
 | 
			
		||||
@ -229,6 +230,9 @@ int ObSql::stmt_query(const common::ObString &stmt, ObSqlCtx &context, ObResultS
 | 
			
		||||
  }
 | 
			
		||||
  FLT_SET_TAG(database_id, result.get_session().get_database_id(),
 | 
			
		||||
                sql_id, context.sql_id_);
 | 
			
		||||
  NG_TRACE_EXT(stmt_query_end, OB_ID(stmt),
 | 
			
		||||
               context.is_sensitive_ ? ObString(OB_MASKED_STR) : trunc_stmt.string(),
 | 
			
		||||
               OB_ID(stmt_len), stmt.length());
 | 
			
		||||
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
@ -1031,7 +1035,8 @@ int ObSql::do_real_prepare(const ObString &sql,
 | 
			
		||||
  } else if (OB_FAIL(parser.parse(sql,
 | 
			
		||||
                                  parse_result,
 | 
			
		||||
                                  parse_mode))) {
 | 
			
		||||
    LOG_WARN("generate syntax tree failed", K(sql), K(ret));
 | 
			
		||||
    LOG_WARN("generate syntax tree failed",
 | 
			
		||||
             "sql", parse_result.contain_sensitive_data_ ? ObString(OB_MASKED_STR) : sql, K(ret));
 | 
			
		||||
  } else if (is_mysql_mode()
 | 
			
		||||
             && ObSQLUtils::is_mysql_ps_not_support_stmt(parse_result)) {
 | 
			
		||||
    ret = OB_ER_UNSUPPORTED_PS;
 | 
			
		||||
@ -1039,6 +1044,7 @@ int ObSql::do_real_prepare(const ObString &sql,
 | 
			
		||||
  } else {
 | 
			
		||||
    ps_status_guard.is_varparams_sql_prepare(is_from_pl, parse_result.question_mark_ctx_.count_ > 0 ? true : false);
 | 
			
		||||
  }
 | 
			
		||||
  context.is_sensitive_ |= parse_result.contain_sensitive_data_;
 | 
			
		||||
 | 
			
		||||
  OZ (ObResolverUtils::resolve_stmt_type(parse_result, stmt_type));
 | 
			
		||||
 | 
			
		||||
@ -1149,7 +1155,8 @@ int ObSql::do_real_prepare(const ObString &sql,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    LOG_INFO("generate new stmt", K(ret), K(param_cnt), K(stmt_type), K(info_ctx.no_param_sql_),
 | 
			
		||||
             K(info_ctx.normalized_sql_), K(sql), K(info_ctx.num_of_returning_into_));
 | 
			
		||||
             K(info_ctx.normalized_sql_), K(info_ctx.num_of_returning_into_),
 | 
			
		||||
             "sql", context.is_sensitive_ ? ObString(OB_MASKED_STR) : sql);
 | 
			
		||||
  }
 | 
			
		||||
  if (OB_SUCC(ret)) {
 | 
			
		||||
    info_ctx.param_cnt_ = param_cnt;
 | 
			
		||||
@ -1303,13 +1310,15 @@ int ObSql::handle_pl_prepare(const ObString &sql,
 | 
			
		||||
          } else if (OB_FAIL(sess.store_query_string(sql))) {
 | 
			
		||||
            LOG_WARN("store query string fail", K(ret));
 | 
			
		||||
          } else if (OB_FAIL(parser.parse(sql, parse_result, parse_mode, false, false, true))) {
 | 
			
		||||
            LOG_WARN("generate syntax tree failed", K(sql), K(ret));
 | 
			
		||||
            LOG_WARN("generate syntax tree failed", K(ret),
 | 
			
		||||
                     "sql", parse_result.contain_sensitive_data_ ? ObString(OB_MASKED_STR) : sql);
 | 
			
		||||
          } else if (is_mysql_mode() && ObSQLUtils::is_mysql_ps_not_support_stmt(parse_result)) {
 | 
			
		||||
            ret = OB_ER_UNSUPPORTED_PS;
 | 
			
		||||
            LOG_WARN("This command is not supported in the prepared statement protocol yet", K(ret));
 | 
			
		||||
          } else if (NULL == pl_prepare_ctx.secondary_ns_ && !pl_prepare_ctx.is_dynamic_sql_) {
 | 
			
		||||
            result.set_simple_ps_protocol();
 | 
			
		||||
          }
 | 
			
		||||
          context.is_sensitive_ |= parse_result.contain_sensitive_data_;
 | 
			
		||||
 | 
			
		||||
          if (OB_FAIL(ret)) {
 | 
			
		||||
            // do nothing
 | 
			
		||||
@ -1524,7 +1533,9 @@ int ObSql::handle_pl_execute(const ObString &sql,
 | 
			
		||||
    result.set_simple_ps_protocol();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  LOG_TRACE("arrive handle pl execute", K(ret), K(sql), K(is_prepare_protocol), K(is_dynamic_sql), K(lbt()));
 | 
			
		||||
  LOG_TRACE("arrive handle pl execute", K(ret),
 | 
			
		||||
            "sql", context.is_sensitive_ ? ObString(OB_MASKED_STR) : sql,
 | 
			
		||||
            K(is_prepare_protocol), K(is_dynamic_sql), K(lbt()));
 | 
			
		||||
 | 
			
		||||
  if (OB_FAIL(ret)) {
 | 
			
		||||
  } else if (OB_ISNULL(pctx)) {
 | 
			
		||||
@ -2210,12 +2221,18 @@ int ObSql::handle_ps_execute(const ObPsStmtId client_stmt_id,
 | 
			
		||||
                                context.is_dynamic_sql_ ? DYNAMIC_SQL_MODE :
 | 
			
		||||
                                (context.session_info_->is_for_trigger_package() ? TRIGGER_MODE : STD_MODE);
 | 
			
		||||
        if (OB_FAIL(parser.parse(sql, parse_result, parse_mode))) {
 | 
			
		||||
          LOG_WARN("failed to parse sql", K(ret), K(sql), K(stmt_type));
 | 
			
		||||
          LOG_WARN("failed to parse sql", K(ret), K(stmt_type),
 | 
			
		||||
                   "sql", parse_result.contain_sensitive_data_ ? ObString(OB_MASKED_STR) : sql);
 | 
			
		||||
        }
 | 
			
		||||
        context.is_sensitive_ |= parse_result.contain_sensitive_data_;
 | 
			
		||||
 | 
			
		||||
        if (OB_FAIL(ret)) {
 | 
			
		||||
        } else if (OB_FAIL(check_read_only_privilege(parse_result, ectx, *schema_guard, sql_traits))) {
 | 
			
		||||
          LOG_WARN("failed to check read only privilege", K(ret));
 | 
			
		||||
        } else if (OB_FAIL(generate_physical_plan(parse_result, NULL, context, result,
 | 
			
		||||
            false /*is_begin_commit_stmt*/, PC_PS_MODE))) {
 | 
			
		||||
          LOG_WARN("generate physical plan failed", K(ret), K(sql), K(stmt_type));
 | 
			
		||||
          LOG_WARN("generate physical plan failed", K(ret),
 | 
			
		||||
                   "sql", context.is_sensitive_ ? ObString(OB_MASKED_STR) : sql, K(stmt_type));
 | 
			
		||||
        } // TODO 生成物理计划的路径可x需q区分
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
@ -2759,33 +2776,6 @@ int ObSql::generate_stmt(ParseResult &parse_result,
 | 
			
		||||
        ret = resolver.resolve(ObResolver::IS_NOT_PREPARED_STMT, tmp_node, stmt);
 | 
			
		||||
      } else {
 | 
			
		||||
        ret = resolver.resolve(ObResolver::IS_NOT_PREPARED_STMT, *parse_result.result_tree_->children_[0], stmt);
 | 
			
		||||
        ObItemType resolve_type = parse_result.result_tree_->children_[0]->type_;
 | 
			
		||||
        switch (resolve_type) {
 | 
			
		||||
          case T_ALTER_SYSTEM_SET:
 | 
			
		||||
          case T_ALTER_SYSTEM_SET_PARAMETER:
 | 
			
		||||
          case T_CREATE_USER:
 | 
			
		||||
          case T_SET_PASSWORD:
 | 
			
		||||
          case T_GRANT:
 | 
			
		||||
          case T_CREATE_ROLE:
 | 
			
		||||
          case T_ALTER_ROLE:
 | 
			
		||||
          case T_SET_ROLE_PASSWORD:
 | 
			
		||||
          case T_SYSTEM_GRANT:
 | 
			
		||||
          case T_GRANT_ROLE: {
 | 
			
		||||
            context.is_sensitive_ = true;
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
          case T_CREATE_TABLE: {
 | 
			
		||||
            ParseNode *special_type_node = parse_result.result_tree_->children_[0]->children_[0];
 | 
			
		||||
            if (OB_NOT_NULL(special_type_node) && T_EXTERNAL == special_type_node->type_) {
 | 
			
		||||
              //external table location may contain sensitive access info
 | 
			
		||||
              context.is_sensitive_ = true;
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
          default: {
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      // set const param constraint after resolving
 | 
			
		||||
      context.all_plan_const_param_constraints_ = &(resolver_ctx.query_ctx_->all_plan_const_param_constraints_);
 | 
			
		||||
@ -4081,12 +4071,14 @@ int ObSql::parser_and_check(const ObString &outlined_stmt,
 | 
			
		||||
                             pc_ctx.is_rewrite_sql_ ? UDR_SQL_MODE : STD_MODE,
 | 
			
		||||
                             pc_ctx.sql_ctx_.handle_batched_multi_stmt(),
 | 
			
		||||
                             false, lib::is_mysql_mode() && NULL != session->get_pl_context()))) {
 | 
			
		||||
      LOG_WARN("Generate syntax tree failed", K(outlined_stmt), K(ret));
 | 
			
		||||
      LOG_WARN("Generate syntax tree failed", K(ret),
 | 
			
		||||
               "outlined_stmt", parse_result.contain_sensitive_data_ ? ObString(OB_MASKED_STR) : outlined_stmt);
 | 
			
		||||
    } else if ((PC_PS_MODE == pc_ctx.mode_ || PC_PL_MODE == pc_ctx.mode_)
 | 
			
		||||
      && OB_FAIL(construct_param_store_from_parameterized_params(
 | 
			
		||||
                    pc_ctx, pctx->get_param_store_for_update()))) {
 | 
			
		||||
      LOG_WARN("construct param store failed", K(ret));
 | 
			
		||||
    }
 | 
			
		||||
    pc_ctx.sql_ctx_.is_sensitive_ |= parse_result.contain_sensitive_data_;
 | 
			
		||||
    if (OB_SUCC(ret)) {
 | 
			
		||||
      // parser返回成功
 | 
			
		||||
      if (OB_ISNULL(parse_result.result_tree_)) {
 | 
			
		||||
@ -4907,7 +4899,8 @@ int ObSql::handle_parser(const ObString &sql,
 | 
			
		||||
    LOG_WARN("invalid argument", K(ret), KP(pctx), KP(pc_ctx.sql_ctx_.session_info_));
 | 
			
		||||
  } else if (OB_FAIL(parser_and_check(sql, exec_ctx, pc_ctx, parse_result,
 | 
			
		||||
                                      get_plan_err, add_plan_to_pc, is_enable_transform_tree))) {
 | 
			
		||||
    LOG_WARN("fail to parser normal query", K(sql), K(ret));
 | 
			
		||||
    LOG_WARN("fail to parser normal query",
 | 
			
		||||
             "sql", pc_ctx.sql_ctx_.is_sensitive_ ? ObString(OB_MASKED_STR) : sql, K(ret));
 | 
			
		||||
  }
 | 
			
		||||
  if (OB_SUCC(ret)) {
 | 
			
		||||
    if (exec_ctx.has_dynamic_values_table()) {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user