mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-04 21:42:39 +00:00
Better
This commit is contained in:
parent
9146dd3636
commit
3a20fbdbf6
@ -805,8 +805,13 @@ void ClientBase::processTextAsSingleQuery(const String & full_query)
|
|||||||
/// But for asynchronous inserts we don't extract data, because it's needed
|
/// But for asynchronous inserts we don't extract data, because it's needed
|
||||||
/// to be done on server side in that case (for coalescing the data from multiple inserts on server side).
|
/// to be done on server side in that case (for coalescing the data from multiple inserts on server side).
|
||||||
const auto * insert = parsed_query->as<ASTInsertQuery>();
|
const auto * insert = parsed_query->as<ASTInsertQuery>();
|
||||||
|
/// In the case of a CREATE USER query, we should serialize the parsed AST to send
|
||||||
|
/// the hash of the password, if applicable, to the server instead of the actual password.
|
||||||
|
const auto * create_user_query = parsed_query->as<ASTCreateUserQuery>();
|
||||||
if (insert && isSyncInsertWithData(*insert, global_context))
|
if (insert && isSyncInsertWithData(*insert, global_context))
|
||||||
query_to_execute = full_query.substr(0, insert->data - full_query.data());
|
query_to_execute = full_query.substr(0, insert->data - full_query.data());
|
||||||
|
else if (create_user_query)
|
||||||
|
query_to_execute = serializeAST(*parsed_query);
|
||||||
else
|
else
|
||||||
query_to_execute = full_query;
|
query_to_execute = full_query;
|
||||||
|
|
||||||
@ -1786,7 +1791,12 @@ MultiQueryProcessingStage ClientBase::analyzeMultiQueryText(
|
|||||||
query_to_execute_end = isSyncInsertWithData(*insert_ast, global_context) ? insert_ast->data : this_query_end;
|
query_to_execute_end = isSyncInsertWithData(*insert_ast, global_context) ? insert_ast->data : this_query_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
query_to_execute = all_queries_text.substr(this_query_begin - all_queries_text.data(), query_to_execute_end - this_query_begin);
|
/// In the case of a CREATE USER query, we should serialize the parsed AST to send
|
||||||
|
/// the hash of the password, if applicable, to the server instead of the actual password.
|
||||||
|
if (const auto * create_user_query = parsed_query->as<ASTCreateUserQuery>())
|
||||||
|
query_to_execute = serializeAST(*parsed_query);
|
||||||
|
else
|
||||||
|
query_to_execute = all_queries_text.substr(this_query_begin - all_queries_text.data(), query_to_execute_end - this_query_begin);
|
||||||
|
|
||||||
// Try to include the trailing comment with test hints. It is just
|
// Try to include the trailing comment with test hints. It is just
|
||||||
// a guess for now, because we don't yet know where the query ends
|
// a guess for now, because we don't yet know where the query ends
|
||||||
|
@ -110,15 +110,12 @@ BlockIO InterpreterCreateUserQuery::execute()
|
|||||||
"Authentication type NO_PASSWORD must be explicitly specified, check the setting allow_implicit_no_password in the server configuration");
|
"Authentication type NO_PASSWORD must be explicitly specified, check the setting allow_implicit_no_password in the server configuration");
|
||||||
|
|
||||||
if (query.auth_data->getType() == AuthenticationType::NO_PASSWORD && query.temporary_password)
|
if (query.auth_data->getType() == AuthenticationType::NO_PASSWORD && query.temporary_password)
|
||||||
{
|
|
||||||
query.auth_data = AuthenticationData::makePasswordAuthenticationData(default_password_type, query.temporary_password.value());
|
query.auth_data = AuthenticationData::makePasswordAuthenticationData(default_password_type, query.temporary_password.value());
|
||||||
}
|
|
||||||
|
|
||||||
if (!query.attach && query.temporary_password)
|
if (!query.attach && query.temporary_password)
|
||||||
{
|
|
||||||
access_control.checkPasswordComplexityRules(query.temporary_password.value());
|
access_control.checkPasswordComplexityRules(query.temporary_password.value());
|
||||||
query.temporary_password.reset();
|
|
||||||
}
|
query.temporary_password.reset();
|
||||||
|
|
||||||
std::optional<RolesOrUsersSet> default_roles_from_query;
|
std::optional<RolesOrUsersSet> default_roles_from_query;
|
||||||
if (query.default_roles)
|
if (query.default_roles)
|
||||||
|
@ -157,7 +157,10 @@ namespace
|
|||||||
temporary_password = value;
|
temporary_password = value;
|
||||||
|
|
||||||
if (!type)
|
if (!type)
|
||||||
|
{
|
||||||
|
auth_data = AuthenticationData{AuthenticationType::NO_PASSWORD};
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (expect_password)
|
if (expect_password)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user