diff --git a/ydb/core/kqp/workload_service/actors/scheme_actors.cpp b/ydb/core/kqp/workload_service/actors/scheme_actors.cpp index 17ca8a48fedd..781d9f4a6eca 100644 --- a/ydb/core/kqp/workload_service/actors/scheme_actors.cpp +++ b/ydb/core/kqp/workload_service/actors/scheme_actors.cpp @@ -483,12 +483,12 @@ class TDatabaseFetcherActor : public TSchemeActorBase { } return; case EStatus::Ok: + if (!IsSubDomainPath(result)) { + Reply(Ydb::StatusIds::UNSUPPORTED, TStringBuilder() << "Invalid database path " << Database << ", please check the correctness of the path"); + return; + } if (result.DomainInfo) { Serverless = result.DomainInfo->IsServerless(); - if (result.Self->Info.GetPathId() != result.DomainInfo->DomainKey.LocalPathId) { - Reply(Ydb::StatusIds::UNSUPPORTED, TStringBuilder() << "Invalid database " << Database << ", domain path id is different"); - return; - } } Reply(Ydb::StatusIds::SUCCESS); return; @@ -541,6 +541,18 @@ class TDatabaseFetcherActor : public TSchemeActorBase { PassAway(); } + static bool IsSubDomainPath(const NSchemeCache::TSchemeCacheNavigate::TEntry& entry) { + switch (entry.Kind) { + case NSchemeCache::TSchemeCacheNavigate::EKind::KindSubdomain: + case NSchemeCache::TSchemeCacheNavigate::EKind::KindExtSubdomain: + return true; + case NSchemeCache::TSchemeCacheNavigate::EKind::KindPath: + return entry.Self->Info.GetPathId() == NSchemeShard::RootPathId; + default: + return false; + } + } + private: const TActorId ReplyActorId; const TString Database;