@@ -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,99 @@ 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, "root@builtin");
4857
+
4858
+ auto userSchemeClient = kikimr.GetSchemeClient();
4859
+ auto db = kikimr.GetTableClient();
4860
+ auto session = db.CreateSession().GetValueSync().GetSession();
4861
+
4862
+ {
4863
+ auto result = userSchemeClient.ListDirectory("/Root/.sys").GetValueSync();
4864
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::UNAUTHORIZED);
4865
+ UNIT_ASSERT_STRING_CONTAINS_C(result.GetIssues().ToString(), "Access denied",
4866
+ result.GetIssues().ToString()
4867
+ );
4868
+ }
4869
+ {
4870
+ auto query = TStringBuilder() << R"(
4871
+ --!syntax_v1
4872
+ GRANT DESCRIBE SCHEMA ON `/Root/.sys` TO `root@builtin`;
4873
+ )";
4874
+ auto result = session.ExecuteSchemeQuery(query).GetValueSync();
4875
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
4876
+ CheckPermissions(session, {
4877
+ {.Path = "/Root/.sys",
4878
+ .Permissions = {
4879
+ {"root@builtin", {"ydb.granular.describe_schema"}}
4880
+ }
4881
+ },
4882
+ });
4883
+ }
4884
+ {
4885
+ auto result = userSchemeClient.ListDirectory("/Root/.sys").GetValueSync();
4886
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
4887
+ }
4888
+ {
4889
+ auto query = TStringBuilder() << R"(
4890
+ --!syntax_v1
4891
+ GRANT ALTER SCHEMA ON `/Root/.sys` TO `root@builtin`;
4892
+ )";
4893
+ auto result = session.ExecuteSchemeQuery(query).GetValueSync();
4894
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
4895
+ CheckPermissions(session, {{.Path = "/Root/.sys",
4896
+ .Permissions = {
4897
+ {"root@builtin", {"ydb.granular.describe_schema",
4898
+ "ydb.granular.alter_schema"}}
4899
+ }
4900
+ }});
4901
+ }
4902
+ }
4903
+
4904
+ Y_UNIT_TEST(ModifySysViewPermissions) {
4905
+ NKikimrConfig::TFeatureFlags featureFlags;
4906
+ featureFlags.SetEnableRealSystemViewPaths(true);
4907
+ TKikimrRunner kikimr(featureFlags, "root@builtin");
4908
+
4909
+ auto userSchemeClient = kikimr.GetSchemeClient();
4910
+ auto db = kikimr.GetTableClient();
4911
+ auto userSession = db.CreateSession().GetValueSync().GetSession();
4912
+ auto querySelect = TStringBuilder() << R"(
4913
+ --!syntax_v1
4914
+ SELECT * FROM `/Root/.sys/partition_stats`;
4915
+ )";
4916
+
4917
+ {
4918
+ auto result = userSession.ExecuteDataQuery(querySelect, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
4919
+ UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SCHEME_ERROR);
4920
+ UNIT_ASSERT_STRING_CONTAINS_C(result.GetIssues().ToString(),
4921
+ "it does not exist or you do not have access permissions",
4922
+ result.GetIssues().ToString()
4923
+ );
4924
+ }
4925
+ {
4926
+ auto query = TStringBuilder() << R"(
4927
+ --!syntax_v1
4928
+ GRANT SELECT ON `/Root/.sys/partition_stats` TO `root@builtin`;
4929
+ )";
4930
+ auto result = userSession.ExecuteSchemeQuery(query).GetValueSync();
4931
+ UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
4932
+ CheckPermissions(userSession, {
4933
+ {.Path = "/Root/.sys/partition_stats",
4934
+ .Permissions = {
4935
+ {"root@builtin", {"ydb.generic.read"}}
4936
+ }
4937
+ },
4938
+ });
4939
+ }
4940
+ {
4941
+ auto result = userSession.ExecuteDataQuery(querySelect, TTxControl::BeginTx().CommitTx()).ExtractValueSync();
4942
+ UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString());
4943
+ }
4944
+ }
4945
+
4853
4946
Y_UNIT_TEST(ModifyUnknownPermissions) {
4854
4947
TKikimrRunner kikimr;
4855
4948
auto db = kikimr.GetTableClient();
0 commit comments