Skip to content

Commit c8ca54a

Browse files
authored
Merge 3b49b8a into 903def9
2 parents 903def9 + 3b49b8a commit c8ca54a

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

ydb/core/kqp/session_actor/kqp_query_state.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -260,11 +260,14 @@ std::unique_ptr<NSchemeCache::TSchemeCacheNavigate> TKqpQueryState::BuildSchemeC
260260
}
261261

262262
bool TKqpQueryState::IsAccessDenied(const NSchemeCache::TSchemeCacheNavigate& response, TString& message) {
263-
auto rights = NACLib::EAccessRights::ReadAttributes | NACLib::EAccessRights::WriteAttributes;
263+
auto checkAccessDenied = [&] (const NSchemeCache::TSchemeCacheNavigate::TEntry& result) {
264+
static const auto selectRowRights = NACLib::EAccessRights::SelectRow;
265+
static const auto accessAttributesRights = NACLib::EAccessRights::ReadAttributes | NACLib::EAccessRights::WriteAttributes;
266+
// in future check right UseConsumer
267+
return result.SecurityObject && !(result.SecurityObject->CheckAccess(selectRowRights, *UserToken) || result.SecurityObject->CheckAccess(accessAttributesRights, *UserToken));
268+
};
264269
// don't build message string on success path
265-
bool denied = std::any_of(response.ResultSet.begin(), response.ResultSet.end(), [&] (auto& result) {
266-
return result.SecurityObject && !result.SecurityObject->CheckAccess(rights, *UserToken);
267-
});
270+
bool denied = std::any_of(response.ResultSet.begin(), response.ResultSet.end(), checkAccessDenied);
268271

269272
if (!denied) {
270273
return false;
@@ -277,7 +280,7 @@ bool TKqpQueryState::IsAccessDenied(const NSchemeCache::TSchemeCacheNavigate& re
277280
continue;
278281
}
279282

280-
if (result.SecurityObject && !result.SecurityObject->CheckAccess(rights, *UserToken)) {
283+
if (checkAccessDenied(result)) {
281284
builder << " '" << JoinPath(result.Path) << "'";
282285
}
283286
}

ydb/core/testlib/test_pq_client.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -879,8 +879,8 @@ class TFlatMsgBusPQClient : public NFlatTests::TFlatMsgBusClient {
879879

880880
void GrantConsumerAccess(const TString& oldName, const TString& subj) {
881881
NACLib::TDiffACL acl;
882-
acl.AddAccess(NACLib::EAccessType::Allow, NACLib::ReadAttributes, subj);
883-
acl.AddAccess(NACLib::EAccessType::Allow, NACLib::WriteAttributes, subj);
882+
// in future use right UseConsumer
883+
acl.AddAccess(NACLib::EAccessType::Allow, NACLib::SelectRow, subj);
884884
auto name = NPersQueue::ConvertOldConsumerName(oldName);
885885
auto pos = name.rfind("/");
886886
Y_ABORT_UNLESS(pos != TString::npos);

ydb/services/persqueue_v1/actors/read_init_auth_actor.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,10 +238,13 @@ void TReadInitAndAuthActor::HandleClientSchemeCacheResponse(
238238
return;
239239
}
240240

241-
NACLib::EAccessRights rights = (NACLib::EAccessRights)(NACLib::EAccessRights::ReadAttributes + NACLib::EAccessRights::WriteAttributes);
242-
if (
243-
!CheckACLPermissionsForNavigate(entry.SecurityObject, path, rights, "No ReadAsConsumer permissions", ctx)
244-
) {
241+
// in future use right UseConsumer
242+
auto selectRowRights = NACLib::EAccessRights::SelectRow;
243+
auto accessAttributesRights = NACLib::EAccessRights::ReadAttributes | NACLib::EAccessRights::WriteAttributes;
244+
if (DoCheckACL && !(entry.SecurityObject->CheckAccess(selectRowRights, *Token) || entry.SecurityObject->CheckAccess(accessAttributesRights, *Token))) {
245+
CloseSession(TStringBuilder() << "No ReadAsConsumer permissions" << " for '" << path
246+
<< "' for subject '" << Token->GetUserSID() << "'",
247+
PersQueue::ErrorCode::ACCESS_DENIED, ctx);
245248
return;
246249
}
247250
FinishInitialization(ctx);

ydb/services/persqueue_v1/ut/topic_service_ut.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,8 @@ class TUpdateOffsetsInTransactionFixture : public NUnitTest::TBaseFixture {
156156

157157
NACLib::TDiffACL acl;
158158
acl.AddAccess(NACLib::EAccessType::Allow, NACLib::DescribeSchema, AUTH_TOKEN);
159-
acl.AddAccess(NACLib::EAccessType::Allow, NACLib::ReadAttributes, AUTH_TOKEN);
160-
acl.AddAccess(NACLib::EAccessType::Allow, NACLib::WriteAttributes, AUTH_TOKEN);
159+
// in future use right UseConsumer
160+
acl.AddAccess(NACLib::EAccessType::Allow, NACLib::SelectRow, AUTH_TOKEN);
161161
server->AnnoyingClient->ModifyACL(TOPIC_PARENT, VALID_TOPIC_NAME, acl.SerializeAsString());
162162

163163
auto driverCfg = NYdb::TDriverConfig()
@@ -328,7 +328,8 @@ Y_UNIT_TEST_F(AccessRights, TUpdateOffsetsInTransactionFixture) {
328328
UNIT_ASSERT_VALUES_EQUAL(response.operation().status(), Ydb::StatusIds::SUCCESS);
329329

330330
NACLib::TDiffACL acl;
331-
acl.RemoveAccess(NACLib::EAccessType::Allow, NACLib::ReadAttributes, AUTH_TOKEN);
331+
// in future use right UseConsumer
332+
acl.RemoveAccess(NACLib::EAccessType::Allow, NACLib::SelectRow, AUTH_TOKEN);
332333
server->AnnoyingClient->ModifyACL(TOPIC_PARENT, VALID_TOPIC_NAME, acl.SerializeAsString());
333334

334335
response = Call_UpdateOffsetsInTransaction({

0 commit comments

Comments
 (0)