Skip to content

Commit 1d50502

Browse files
Merge pull request ClickHouse#88976 from ClickHouse/backport/25.8/88968
Backport ClickHouse#88968 to 25.8: Fix SET DEFINER access check for ephemeral users
2 parents 65df4a1 + 849cc12 commit 1d50502

File tree

3 files changed

+36
-4
lines changed

3 files changed

+36
-4
lines changed

src/Interpreters/InterpreterCreateQuery.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2498,8 +2498,10 @@ void InterpreterCreateQuery::processSQLSecurityOption(ContextMutablePtr context_
24982498
if (sql_security.definer && !skip_check_permissions)
24992499
{
25002500
auto definer_name = sql_security.definer->toString();
2501-
auto & access_control = context_->getAccessControl();
2501+
if (definer_name != current_user_name)
2502+
context_->checkAccess(AccessType::SET_DEFINER, definer_name);
25022503

2504+
auto & access_control = context_->getAccessControl();
25032505
const auto user = access_control.read<User>(definer_name);
25042506
if (access_control.isEphemeral(access_control.getID<User>(definer_name)))
25052507
{
@@ -2511,9 +2513,6 @@ void InterpreterCreateQuery::processSQLSecurityOption(ContextMutablePtr context_
25112513
new_user->authentication_methods.emplace_back(AuthenticationType::NO_AUTHENTICATION);
25122514
access_control.insertOrReplace(new_user);
25132515
}
2514-
2515-
if (definer_name != current_user_name)
2516-
context_->checkAccess(AccessType::SET_DEFINER, definer_name);
25172516
}
25182517

25192518
if (sql_security.type == SQLSecurityType::NONE && !skip_check_permissions)

tests/queries/0_stateless/03701_check_ephemeral_set_definer_access.reference

Whitespace-only changes.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/usr/bin/env bash
2+
# Tags: no-replicated-database, no-async-insert, no-fasttest
3+
4+
CUR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
5+
# shellcheck source=../shell_config.sh
6+
. "$CUR_DIR"/../shell_config.sh
7+
8+
user="user03701_${CLICKHOUSE_DATABASE}_$RANDOM"
9+
db=${CLICKHOUSE_DATABASE}
10+
11+
${CLICKHOUSE_CLIENT} <<EOF
12+
-- Cleanup
13+
DROP USER IF EXISTS $user;
14+
CREATE USER $user IN memory;
15+
GRANT ALL ON *.* TO $user;
16+
REVOKE SET DEFINER ON * FROM $user;
17+
18+
CREATE TABLE $db.source (x Int64) ENGINE = MergeTree() ORDER BY x;
19+
EOF
20+
21+
${CLICKHOUSE_CLIENT} --user $user <<EOF
22+
CREATE MATERIALIZED VIEW $db.test_view
23+
(
24+
x Int64
25+
)
26+
ENGINE = MergeTree() ORDER BY x
27+
DEFINER = CURRENT_USER SQL SECURITY DEFINER
28+
AS SELECT x FROM $db.source;
29+
EOF
30+
31+
${CLICKHOUSE_CLIENT} <<EOF
32+
DROP USER IF EXISTS $user;
33+
EOF

0 commit comments

Comments
 (0)