@@ -1172,7 +1172,7 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
1172
1172
Value String,
1173
1173
PRIMARY KEY (Key)
1174
1174
)
1175
- )")
1175
+ )")
1176
1176
+ (СolumnTable ? TString("WITH (STORE = COLUMN)") : "");
1177
1177
auto result = session.ExecuteSchemeQuery(query).GetValueSync();
1178
1178
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
@@ -4850,6 +4850,111 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
4850
4850
}
4851
4851
}
4852
4852
4853
+ Y_UNIT_TEST(ModifySysViewDirPermissions) {
4854
+ NKikimrConfig::TFeatureFlags featureFlags;
4855
+ featureFlags.SetEnableRealSystemViewPaths(true);
4856
+ TKikimrRunner kikimr(featureFlags, "user@builtin");
4857
+
4858
+ kikimr.GetTestServer().GetRuntime()->GetAppData().AdministrationAllowedSIDs.push_back("root@builtin");
4859
+
4860
+ auto userSchemeClient = kikimr.GetSchemeClient();
4861
+ auto userSession = kikimr.GetTableClient().CreateSession().GetValueSync().GetSession();
4862
+
4863
+ auto adminSession = kikimr.GetTableClient(NYdb::NTable::TClientSettings()
4864
+ .AuthToken("root@builtin")).CreateSession().GetValueSync().GetSession();
4865
+
4866
+ {
4867
+ auto query = TStringBuilder() << R"(
4868
+ --!syntax_v1
4869
+ GRANT DESCRIBE SCHEMA ON `/Root/.sys` TO `root@builtin`;
4870
+ )";
4871
+ auto result = adminSession.ExecuteSchemeQuery(query).GetValueSync();
4872
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
4873
+ }
4874
+ {
4875
+ auto result = userSchemeClient.ListDirectory("/Root/.sys").GetValueSync();
4876
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::UNAUTHORIZED);
4877
+ UNIT_ASSERT_STRING_CONTAINS_C(result.GetIssues().ToString(), "Access denied",
4878
+ result.GetIssues().ToString()
4879
+ );
4880
+ }
4881
+ {
4882
+ auto query = TStringBuilder() << R"(
4883
+ --!syntax_v1
4884
+ GRANT DESCRIBE SCHEMA ON `/Root/.sys` TO `user@builtin`;
4885
+ )";
4886
+ auto result = adminSession.ExecuteSchemeQuery(query).GetValueSync();
4887
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
4888
+ CheckPermissions(adminSession, {
4889
+ {.Path = "/Root/.sys",
4890
+ .Permissions = {
4891
+ {"root@builtin", {"ydb.granular.describe_schema"}},
4892
+ {"user@builtin", {"ydb.granular.describe_schema"}}
4893
+ }
4894
+ },
4895
+ });
4896
+ }
4897
+ {
4898
+ auto result = userSchemeClient.ListDirectory("/Root/.sys").GetValueSync();
4899
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
4900
+
4901
+ auto children = result.GetChildren();
4902
+ THashSet<TString> names;
4903
+ for (const auto& child : children) {
4904
+ names.insert(TString{child.Name});
4905
+ UNIT_ASSERT_VALUES_EQUAL(child.Type, NYdb::NScheme::ESchemeEntryType::SysView);
4906
+ }
4907
+ UNIT_ASSERT(names.contains("partition_stats"));
4908
+ }
4909
+ }
4910
+
4911
+ Y_UNIT_TEST(ModifySysViewPermissions) {
4912
+ NKikimrConfig::TFeatureFlags featureFlags;
4913
+ featureFlags.SetEnableRealSystemViewPaths(true);
4914
+ TKikimrRunner kikimr(featureFlags, "root@builtin");
4915
+
4916
+ auto userSchemeClient = kikimr.GetSchemeClient();
4917
+ auto db = kikimr.GetTableClient();
4918
+ auto userSession = db.CreateSession().GetValueSync().GetSession();
4919
+ auto querySelect = TStringBuilder() << R"(
4920
+ --!syntax_v1
4921
+ SELECT * FROM `/Root/.sys/partition_stats`;
4922
+ )";
4923
+
4924
+ {
4925
+ auto result = userSession.ExecuteDataQuery(querySelect, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
4926
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SCHEME_ERROR);
4927
+ UNIT_ASSERT_STRING_CONTAINS_C(result.GetIssues().ToString(),
4928
+ "it does not exist or you do not have access permissions",
4929
+ result.GetIssues().ToString()
4930
+ );
4931
+ }
4932
+ {
4933
+ auto query = TStringBuilder() << R"(
4934
+ --!syntax_v1
4935
+ GRANT SELECT ON `/Root/.sys/partition_stats` TO `root@builtin`;
4936
+ )";
4937
+ auto result = userSession.ExecuteSchemeQuery(query).GetValueSync();
4938
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
4939
+ CheckPermissions(userSession, {
4940
+ {.Path = "/Root/.sys/partition_stats",
4941
+ .Permissions = {
4942
+ {"root@builtin", {"ydb.generic.read"}}
4943
+ }
4944
+ },
4945
+ });
4946
+ }
4947
+ {
4948
+ auto result = userSession.ExecuteDataQuery(querySelect, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
4949
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
4950
+ UNIT_ASSERT_VALUES_EQUAL(result.GetResultSets().size(), 1);
4951
+
4952
+ auto rs = result.GetResultSet(0);
4953
+ UNIT_ASSERT_VALUES_EQUAL(rs.RowsCount(), 34);
4954
+ UNIT_ASSERT_VALUES_EQUAL(rs.ColumnsCount(), 30);
4955
+ }
4956
+ }
4957
+
4853
4958
Y_UNIT_TEST(ModifyUnknownPermissions) {
4854
4959
TKikimrRunner kikimr;
4855
4960
auto db = kikimr.GetTableClient();
0 commit comments