From 9efbf6e39a8580c1a7ae36a4ba334b677e2ef549 Mon Sep 17 00:00:00 2001 From: Vitaly Baranov Date: Sun, 20 Feb 2022 09:27:54 +0300 Subject: [PATCH 1/2] Add new configuration flag 'row_policies.permissive_policies_always_required' which enables the change in mixing row policies' filters implemented in https://github.com/ClickHouse/ClickHouse/pull/34596 --- programs/server/Server.cpp | 6 +- programs/server/config.xml | 8 +++ src/Access/AccessControl.cpp | 6 ++ src/Access/AccessControl.h | 2 + src/Access/RowPolicyCache.cpp | 28 +++++--- src/Access/RowPolicyCache.h | 3 + .../permissive_policies_always_required_0.xml | 5 ++ .../permissive_policies_always_required_1.xml | 5 ++ tests/integration/test_row_policy/test.py | 68 +++++++++++++++++-- ...iple_row_policies_on_same_column.reference | 33 --------- ...1_multiple_row_policies_on_same_column.sql | 55 --------------- 11 files changed, 118 insertions(+), 101 deletions(-) create mode 100644 tests/integration/test_row_policy/permissive_policies_always_required_0.xml create mode 100644 tests/integration/test_row_policy/permissive_policies_always_required_1.xml delete mode 100644 tests/queries/0_stateless/02131_multiple_row_policies_on_same_column.reference delete mode 100644 tests/queries/0_stateless/02131_multiple_row_policies_on_same_column.sql diff --git a/programs/server/Server.cpp b/programs/server/Server.cpp index 79837310ec4a..b4a9eee04cac 100644 --- a/programs/server/Server.cpp +++ b/programs/server/Server.cpp @@ -940,7 +940,10 @@ if (ThreadFuzzer::instance().isEffective()) updateLevels(*config, logger()); global_context->setClustersConfig(config, has_zookeeper); global_context->setMacros(std::make_unique(*config, "macros", log)); - global_context->setExternalAuthenticatorsConfig(*config); + + auto & access_control = global_context->getAccessControl(); + access_control.setExternalAuthenticatorsConfig(*config); + access_control.setRowPoliciesConfig(*config); global_context->loadOrReloadDictionaries(*config); global_context->loadOrReloadModels(*config); @@ -1069,6 +1072,7 @@ if (ThreadFuzzer::instance().isEffective()) auto & access_control = global_context->getAccessControl(); if (config().has("custom_settings_prefixes")) access_control.setCustomSettingsPrefixes(config().getString("custom_settings_prefixes")); + access_control.setRowPoliciesConfig(config()); /// Initialize access storages. try diff --git a/programs/server/config.xml b/programs/server/config.xml index def64607caf5..d0c9bc1eed6e 100644 --- a/programs/server/config.xml +++ b/programs/server/config.xml @@ -559,6 +559,14 @@ default + + + + 0 + + default - - - + + 1 + + + Whether the permissive row policies are always required to see any rows. + If the flag is 1 then if for some table only restrictive policies exist without permissive ones any user won't see any rows. + If the flag is 0 then in the above case each user will see rows chosen by applied restrictive policies. --> + 0 + 0 + +