Skip to content

Commit

Permalink
Merge 3b49b8a into 903def9
Browse files Browse the repository at this point in the history
  • Loading branch information
molotkov-and authored Feb 7, 2024
2 parents 903def9 + 3b49b8a commit c8ca54a
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 14 deletions.
13 changes: 8 additions & 5 deletions ydb/core/kqp/session_actor/kqp_query_state.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -260,11 +260,14 @@ std::unique_ptr<NSchemeCache::TSchemeCacheNavigate> TKqpQueryState::BuildSchemeC
}

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

if (!denied) {
return false;
Expand All @@ -277,7 +280,7 @@ bool TKqpQueryState::IsAccessDenied(const NSchemeCache::TSchemeCacheNavigate& re
continue;
}

if (result.SecurityObject && !result.SecurityObject->CheckAccess(rights, *UserToken)) {
if (checkAccessDenied(result)) {
builder << " '" << JoinPath(result.Path) << "'";
}
}
Expand Down
4 changes: 2 additions & 2 deletions ydb/core/testlib/test_pq_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -879,8 +879,8 @@ class TFlatMsgBusPQClient : public NFlatTests::TFlatMsgBusClient {

void GrantConsumerAccess(const TString& oldName, const TString& subj) {
NACLib::TDiffACL acl;
acl.AddAccess(NACLib::EAccessType::Allow, NACLib::ReadAttributes, subj);
acl.AddAccess(NACLib::EAccessType::Allow, NACLib::WriteAttributes, subj);
// in future use right UseConsumer
acl.AddAccess(NACLib::EAccessType::Allow, NACLib::SelectRow, subj);
auto name = NPersQueue::ConvertOldConsumerName(oldName);
auto pos = name.rfind("/");
Y_ABORT_UNLESS(pos != TString::npos);
Expand Down
11 changes: 7 additions & 4 deletions ydb/services/persqueue_v1/actors/read_init_auth_actor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -238,10 +238,13 @@ void TReadInitAndAuthActor::HandleClientSchemeCacheResponse(
return;
}

NACLib::EAccessRights rights = (NACLib::EAccessRights)(NACLib::EAccessRights::ReadAttributes + NACLib::EAccessRights::WriteAttributes);
if (
!CheckACLPermissionsForNavigate(entry.SecurityObject, path, rights, "No ReadAsConsumer permissions", ctx)
) {
// in future use right UseConsumer
auto selectRowRights = NACLib::EAccessRights::SelectRow;
auto accessAttributesRights = NACLib::EAccessRights::ReadAttributes | NACLib::EAccessRights::WriteAttributes;
if (DoCheckACL && !(entry.SecurityObject->CheckAccess(selectRowRights, *Token) || entry.SecurityObject->CheckAccess(accessAttributesRights, *Token))) {
CloseSession(TStringBuilder() << "No ReadAsConsumer permissions" << " for '" << path
<< "' for subject '" << Token->GetUserSID() << "'",
PersQueue::ErrorCode::ACCESS_DENIED, ctx);
return;
}
FinishInitialization(ctx);
Expand Down
7 changes: 4 additions & 3 deletions ydb/services/persqueue_v1/ut/topic_service_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,8 @@ class TUpdateOffsetsInTransactionFixture : public NUnitTest::TBaseFixture {

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

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

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

response = Call_UpdateOffsetsInTransaction({
Expand Down

0 comments on commit c8ca54a

Please sign in to comment.