Skip to content

Commit 9ef46dd

Browse files
committed
Added creating sys views during SchemeShard init
1 parent 6304305 commit 9ef46dd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+2040
-750
lines changed

ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp

Lines changed: 106 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1172,7 +1172,7 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
11721172
Value String,
11731173
PRIMARY KEY (Key)
11741174
)
1175-
)")
1175+
)")
11761176
+ (СolumnTable ? TString("WITH (STORE = COLUMN)") : "");
11771177
auto result = session.ExecuteSchemeQuery(query).GetValueSync();
11781178
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
@@ -4850,6 +4850,111 @@ Y_UNIT_TEST_SUITE(KqpScheme) {
48504850
}
48514851
}
48524852

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+
48534958
Y_UNIT_TEST(ModifyUnknownPermissions) {
48544959
TKikimrRunner kikimr;
48554960
auto db = kikimr.GetTableClient();

0 commit comments

Comments
 (0)