Skip to content

Commit 082edcd

Browse files
authored
fix(query): only account_admin role can modify setting network_policy (#18456)
1 parent d11c4fa commit 082edcd

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

src/query/service/src/interpreters/access/privilege_access.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,13 +1359,28 @@ impl AccessChecker for PrivilegeAccess {
13591359
Plan::Set(plan) => {
13601360
use databend_common_ast::ast::SetType;
13611361
if let SetType::SettingsGlobal = plan.set_type {
1362+
plan.idents.iter()
1363+
.try_for_each(|setting| {
1364+
if setting.eq_ignore_ascii_case("network_policy") && !self.ctx.get_current_user()?.is_account_admin() {
1365+
return Err(ErrorCode::PermissionDenied("Permission Denied: Setting of network_policy is restricted to account_admin role".to_string()));
1366+
}
1367+
Ok(())
1368+
})?;
13621369
self.validate_access(&GrantObject::Global, UserPrivilegeType::Super, false, false)
13631370
.await?;
13641371
}
13651372
}
13661373
Plan::Unset(plan) => {
13671374
use databend_common_ast::ast::SetType;
13681375
if let SetType::SettingsGlobal = plan.unset_type {
1376+
plan.vars.iter()
1377+
.try_for_each(|setting| {
1378+
if setting.eq_ignore_ascii_case("network_policy") && !self.ctx.get_current_user()?.is_account_admin() {
1379+
return Err(ErrorCode::PermissionDenied("Permission Denied: Setting of network_policy is restricted to account_admin role".to_string()));
1380+
}
1381+
Ok(())
1382+
}
1383+
)?;
13691384
self.validate_access(&GrantObject::Global, UserPrivilegeType::Super, false, false)
13701385
.await?;
13711386
}

tests/suites/0_stateless/18_rbac/18_0007_privilege_access.result

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ test -- insert overwrite
3636
test -- optimize table
3737
Error: APIError: QueryFailed: [1063]Permission denied: privilege [Super] is required on 'default'.'default'.'t20_0012' for user 'test-user'@'%' with roles [public,test-role1,test-role2]
3838
true
39+
=== NETWORK_POLICY SETTING ===
40+
Error: APIError: QueryFailed: [1063]Permission Denied: Setting of network_policy is restricted to account_admin role
41+
Error: APIError: QueryFailed: [1063]Permission Denied: Setting of network_policy is restricted to account_admin role
3942
test -- select
4043
1
4144
1

tests/suites/0_stateless/18_rbac/18_0007_privilege_access.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,13 @@ echo "set data_retention_time_in_days=0; optimize table t20_0012 all" | $TEST_US
9292
## verify
9393
echo "select count(*)>=1 from fuse_snapshot('default', 't20_0012')" | $TEST_USER_CONNECT
9494

95+
echo "=== NETWORK_POLICY SETTING ==="
96+
echo "drop network policy if exists test_user_without_account_admin" | $TEST_USER_CONNECT
97+
echo "create network policy test_user_without_account_admin allowed_ip_list=('127.0.0.0/24')" | $TEST_USER_CONNECT
98+
echo "set global network_policy='test_user_without_account_admin'" | $TEST_USER_CONNECT
99+
echo "unset global network_policy" | $TEST_USER_CONNECT
100+
echo "drop network policy if exists test_user_without_account_admin" | $TEST_USER_CONNECT
101+
95102
## select data
96103
echo "select 'test -- select'" | $TEST_USER_CONNECT
97104
## Init tables

0 commit comments

Comments
 (0)