No description
Find a file
byrsapty 95a19b074d
Some checks failed
CI / agent (push) Waiting to run
CI / hygiene (push) Successful in 9s
CI / web (push) Successful in 1m11s
CI / server (push) Successful in 1m35s
CI / dbtest (push) Has been cancelled
Історія входів: 93 записи були в базі й ніде не показувались
core.login_attempts наповнювалась на кожній спробі входу й читалась
рівно в одному місці — для стримування підбору. Ні ендпойнта, ні
сторінки. На питання «хто заходив у мій моніторинг» продукт мав
відповідь у базі й не мав способу її показати.

ГОЛОВНЕ БУЛА НЕ ВЕРСТКА. У таблиці немає tenant_id — саме тому ці
події й не в аудиті. Показати «як є» означало б віддати одному
кабінету спроби входу чужих людей. Прив'язка непряма: спроба ->
користувач -> членство, трьома шляхами одночасно (user_id, username,
email) в одному JOIN LATERAL з tenant_id усередині. Саме JOIN, а не
LEFT JOIN: без збігу рядок ПРИБИРАЄТЬСЯ, а не лишається без імені.

На бойових даних це не теорія: у власника немає пошти, тож за email
не прив'язується ЖОДНА з 94 спроб. Шлях через username дає 93.

Невдала спроба з неіснуючим логіном не належить нікому: рядком не
показується, але рахується числом — сигнал «логіни перебирають»
лишається, чужа людина в чужий кабінет не потрапляє.

Ізоляцію перевірено проти справжньої бази (TestLoginAttemptsTenantIsolation).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-29 01:06:42 +03:00
.claude Стеля журналів, терплячіша самоперевірка, Етап 13 у плані 2026-08-27 21:52:27 +03:00
.forgejo/workflows Відкат на живому залізі: пароль адміністратора лежав відкритим 2026-08-28 23:42:43 +03:00
agent Трапи: приймач каже про готовність тоді, коли справді готовий 2026-08-27 18:11:23 +03:00
db Дві сесії роботи: 0058–0068, розгортання однією командою, тести 2026-08-27 17:32:49 +03:00
deploy Рішення власника: дзеркало конфігів лишається дослівним 2026-08-28 23:52:30 +03:00
gen/go Дві сесії роботи: 0058–0068, розгортання однією командою, тести 2026-08-27 17:32:49 +03:00
proto Дві сесії роботи: 0058–0068, розгортання однією командою, тести 2026-08-27 17:32:49 +03:00
scripts Відкат на живому залізі: пароль адміністратора лежав відкритим 2026-08-28 23:42:43 +03:00
server Історія входів: 93 записи були в базі й ніде не показувались 2026-08-29 01:06:42 +03:00
test/contract Етап 2: сервер сам заводить snmp.if-чеки з виявлених інтерфейсів 2026-08-14 15:10:02 +03:00
web Історія входів: 93 записи були в базі й ніде не показувались 2026-08-29 01:06:42 +03:00
.dockerignore Відкат на живому залізі: пароль адміністратора лежав відкритим 2026-08-28 23:42:43 +03:00
.gitattributes Нормалізувати кінці рядків: у репозиторії LF 2026-08-14 03:28:56 +03:00
.gitignore Відкат на живому залізі: пароль адміністратора лежав відкритим 2026-08-28 23:42:43 +03:00
buf.gen.yaml Етап 1-2: схема БД та protobuf-контракт агент-сервер 2026-08-14 03:28:40 +03:00
buf.yaml Етап 1-2: схема БД та protobuf-контракт агент-сервер 2026-08-14 03:28:40 +03:00
docker-compose.yml Стеля журналів, терплячіша самоперевірка, Етап 13 у плані 2026-08-27 21:52:27 +03:00
HISTORY.md Пісочниця оновлення: перевірка перевіряла одну пробу з вісімнадцяти 2026-08-29 00:27:10 +03:00
netpulse Пісочниця: пояснити нуль в аудиті й додати пробу, яка щось доводить 2026-08-29 00:30:54 +03:00
netpulse.conf.example Білінг, SLA, вбудовані правила, пісочниця установника, тести сторінок 2026-08-27 21:17:23 +03:00
ROADMAP.md Пісочниця: режим перевірки оновлення «стара версія → нова» 2026-08-28 23:58:18 +03:00