diff --git a/src/TableFunctions/TableFunctionLoop.cpp b/src/TableFunctions/TableFunctionLoop.cpp index 43f122f6cb34..f3456b41a42f 100644 --- a/src/TableFunctions/TableFunctionLoop.cpp +++ b/src/TableFunctions/TableFunctionLoop.cpp @@ -1,4 +1,5 @@ #include "config.h" +#include #include #include #include @@ -118,6 +119,7 @@ namespace DB storage = database->tryGetTable(loop_table_name, context); if (!storage) throw Exception(ErrorCodes::UNKNOWN_TABLE, "Table '{}' not found in database '{}'", loop_table_name, database_name); + context->checkAccess(AccessType::SELECT, database_name, loop_table_name); } else { diff --git a/tests/queries/0_stateless/03680_loop_table_function_access_check.reference b/tests/queries/0_stateless/03680_loop_table_function_access_check.reference new file mode 100644 index 000000000000..257cc5642cb1 --- /dev/null +++ b/tests/queries/0_stateless/03680_loop_table_function_access_check.reference @@ -0,0 +1 @@ +foo diff --git a/tests/queries/0_stateless/03680_loop_table_function_access_check.sh b/tests/queries/0_stateless/03680_loop_table_function_access_check.sh new file mode 100755 index 000000000000..cb2f3a08ceaf --- /dev/null +++ b/tests/queries/0_stateless/03680_loop_table_function_access_check.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +# Tags: long, no-replicated-database, no-async-insert + +CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +# shellcheck source=../shell_config.sh +. "$CURDIR"/../shell_config.sh + + +user="user03631_${CLICKHOUSE_DATABASE}_$RANDOM" +db=${CLICKHOUSE_DATABASE} + +${CLICKHOUSE_CLIENT} <