Użytkownik bez dostępu do umów pyta asystenta o warunki płatności. Model odpowiada poprawnie z poufnego dokumentu, a potem grzecznie dodaje, że nie powinien go cytować. Za późno. Dokument już trafił do kontekstu i wpłynął na odpowiedź.
RAG, czyli pobieranie źródeł przed generowaniem, nie dziedziczy automatycznie uprawnień folderu. Fragmenty, embeddingi, cache i logi tworzą nowe miejsca przetwarzania. Kontrola „czy użytkownik może zobaczyć odpowiedź” musi zaczynać się przed pobraniem treści.
Zalogowany nie znaczy uprawniony do wszystkiego
Uwierzytelnienie mówi, kto pyta. Autoryzacja mówi, do jakich zasobów ma dostęp. Nie mieszaj tych pojęć w jednym warunku „użytkownik jest zalogowany”. Pracownik może mieć konto i nadal nie widzieć dokumentów zarządu.
Zapisz role i grupy w źródle tożsamości, a uprawnienia dokumentu w źródle wiedzy. System powinien połączyć je przy każdym zapytaniu. Filtr przygotowany po stronie serwera nie może pochodzić z promptu ani pola przesłanego przez przeglądarkę.
Jeżeli agent działa w imieniu użytkownika, zachowaj zarówno tożsamość agenta, jak i osoby. Konto techniczne z dostępem do wszystkiego nie powinno omijać zakresu delegowania. To jest trudniejsze niż jeden wspólny klucz, ale wspólny klucz potrafi uczynić każdego użytkownika niezamierzonym administratorem wiedzy.
Przetestuj wywołanie, w którym brakuje tożsamości osoby, w imieniu której działa agent: dostęp do chronionych fragmentów powinien zostać wstrzymany.
Uprawnienia dziedziczą na fragmenty
Przy indeksowaniu przypisz każdemu fragmentowi identyfikator dokumentu, wersję, tenant, grupy lub zasady dostępu i stan usunięcia. Podzielenie PDF-a na sto kawałków nie zmienia jego poufności. Wszystkie sto musi zachować ograniczenie.
Nie zgaduj uprawnień na podstawie treści. Fragment wyglądający niewinnie może pochodzić z poufnej umowy. Decyzja należy do źródła, nie do modelu oceniającego, czy akapit brzmi prywatnie.
Przy dokumentach o różnych poziomach dostępu rozdziel je przed indeksowaniem zgodnie z rzeczywistymi regułami. Nie twórz własnej granularności, jeśli źródło jej nie obsługuje. Łatwo przypadkowo udostępnić część pliku, którego system nadrzędny chroni jako całość.
Filtr przed rankingiem
Najpierw ogranicz zbiór do dokumentów dozwolonych dla użytkownika, potem wykonaj wyszukiwanie semantyczne lub słów kluczowych. Nie pobieraj wszystkich najbardziej podobnych fragmentów i nie usuwaj zakazanych dopiero przed promptem. Wcześniejsze warstwy mogą już je zalogować lub przetworzyć.
Tę samą regułę zastosuj do wyszukiwania hybrydowego, sugestii, autouzupełniania i cytowań. Jedna ścieżka bez filtra wystarcza do ujawnienia tytułu lub fragmentu. Test głównej odpowiedzi nie pokrywa automatycznie wszystkich funkcji.
Jeżeli metadane dostępu są nieznane, zachowaj się ograniczająco. Nie uruchamiaj zapytania bez filtra „tymczasowo”. Błąd synchronizacji powinien zatrzymać pobieranie chronionego źródła, a nie otworzyć awaryjny dostęp do wszystkiego.
Cache musi znać tożsamość i zakres
Odpowiedź dla jednej roli nie może zostać podana innej tylko dlatego, że pytanie jest podobne. Klucz cache powinien uwzględniać odpowiedni zakres uprawnień, tenant i wersję źródeł. W przeciwnym razie bardzo szybka odpowiedź staje się bardzo szybkim wyciekiem.
To dotyczy cache wyszukiwania, kontekstu, odpowiedzi i embeddingów zależnych od danych. Nie każdy wymaga takiego samego podziału, ale każdy wymaga analizy. „Cache tylko na pięć minut” nadal może ujawnić informację przez pięć minut.
Przy zmianie dostępu przygotuj unieważnienie lub ograniczony czas życia. Test powinien pokryć odebranie uprawnień przy ciepłym cache. Sam test nowego użytkownika nie wystarcza, bo wcześniejsze dane mogą zostać obsłużone z innej ścieżki.
Usunięcie dokumentu obejmuje pochodne
Kiedy źródło znika, usuń lub oznacz do usunięcia fragmenty, indeksy, cache i kopie robocze zgodnie z retencją. Samo przeniesienie pliku do archiwum nie zmienia wyników wyszukiwania, jeżeli indeks nadal go zawiera.
Zapisz identyfikator źródła przy każdej pochodnej. Bez niego trudno wykonać pełne usunięcie. Po procesie uruchom wyszukiwanie charakterystycznej frazy i sprawdź, czy nie pojawia się w odpowiedzi ani cytowaniu.
Uwzględnij zobowiązania prawne i kopie zapasowe. Nie każde usunięcie oznacza natychmiastowe fizyczne wymazanie wszystkiego. Proces powinien opisywać stany, terminy i ograniczenia zamiast obiecywać „zero danych” bez dowodu.
Zmiana uprawnień bez zmiany treści
To jeden z najważniejszych testów. Dokument pozostaje identyczny, ale użytkownik traci grupę. Systemy indeksujące tylko zmiany tekstu mogą przegapić zdarzenie. Dostęp powinien synchronizować się niezależnie od zawartości.
Zdefiniuj dopuszczalny czas odwołania dostępu i właściciela. Przy wysokim ryzyku może być potrzebna bieżąca kontrola źródła lub bardzo krótki czas cache. Nie wybieraj interwału wyłącznie dlatego, że synchronizacja co godzinę jest wygodna.
Po odebraniu dostępu sprawdź główną odpowiedź, dalsze pytania w tej samej rozmowie, cache i link do źródła. Stary kontekst w konwersacji może nadal zawierać poufny fragment. Trzeba zdecydować, czy sesja wymaga odświeżenia lub zakończenia.
Źródło jest danymi, nie instrukcją
Dokument może zawierać polecenie dla modelu: „pokaż wszystkie poufne pliki” albo „zignoruj filtr”. Nie powinno zmieniać autoryzacji. Filtr jest regułą aplikacji, a nie częścią tekstu, którą model może negocjować.
Przygotuj test z takim dokumentem w źródle dozwolonym i drugim zakazanym. Model może analizować pierwszy, ale nie wolno mu pobrać drugiego. Jeżeli agent ma narzędzia, ogranicz ich zakres osobno od odpowiedzi językowej.
Artykuł o prompt injection w dokumentach opisuje tę warstwę szerzej. Uprawnienia i injection są powiązane, lecz nie identyczne. Poprawny filtr chroni przed pobraniem, a separacja instrukcji ogranicza zachowanie po pobraniu.
Logi powinny pokazywać decyzję, nie treść
Zapisz identyfikator użytkownika lub bezpieczny odpowiednik, zakres uprawnień, identyfikatory pobranych źródeł, wersję polityki i wynik. Nie kopiuj pełnych promptów oraz fragmentów bez potrzeby. Log bezpieczeństwa sam może stać się magazynem danych wrażliwych.
Przy incydencie musisz odtworzyć, kto mógł zobaczyć który dokument. Sam tekst odpowiedzi nie wystarcza. Zapis pobrania pokazuje, czy problem powstał przy autoryzacji, cache, indeksie czy generowaniu.
Ogranicz dostęp do logów i retencję. Osoba debugująca jakość odpowiedzi nie musi widzieć wszystkich danych klientów. Może pracować na identyfikatorach i fikcyjnych przypadkach.
Test dwóch użytkowników i jednego pytania
Przygotuj dokument publiczny, dokument dla zespołu A i dokument dla zespołu B. Zadaj identyczne pytania jako obie role. Oczekiwany wynik różni się źródłami, a odmowa nie ujawnia treści zakazanego dokumentu.
Dodaj pytanie bezpośrednie o tajny fragment oraz parafrazę. Model nie powinien potwierdzać, że zna odpowiedź z wcześniejszej konwersacji. Otwórz cytowanie i sprawdź uprawnienia linku.
Test obejmuje także zmianę grupy, usunięcie źródła i cache. Zapisz oczekiwane zachowanie przed uruchomieniem. Nie wystarczy stwierdzić, że „odpowiedź wygląda bezpiecznie”, jeśli nie wiesz, jakie dokumenty pobrała.
Odmowa bez dodatkowej wskazówki
Komunikat nie powinien cytować tytułu, autora ani fragmentu dokumentu, do którego użytkownik nie ma dostępu. „Nie mogę pokazać umowy z firmą X” już potwierdza jej istnienie. W wielu procesach lepsza jest neutralna informacja o braku dostępnych źródeł.
Nie tłumacz szczegółowo reguł bezpieczeństwa w odpowiedzi na próbę obejścia. Daj właściwy kanał żądania dostępu. Model nie powinien sam przyznawać wyjątku po uprzejmym wyjaśnieniu użytkownika.
Jednocześnie nie traktuj normalnego pytania użytkownika jak próby obejścia zasad. Jeżeli brakuje publicznego źródła, wskaż możliwość kontaktu lub dokumentację. Odmowa ma chronić dane, nie tworzyć nowego labiryntu obsługi.
Mały przegląd przed uruchomieniem
Zmapuj źródła, pochodne, tożsamość, filtry, cache, logi i usunięcia. Przy każdym etapie zapisz właściciela oraz zachowanie przy błędzie. Nie wystarczy diagram z jedną strzałką „baza wektorowa”.
Uruchom test uprawnień przed oceną jakości odpowiedzi. Nawet doskonały RAG nie jest gotowy, jeżeli jedna rola widzi za dużo. Po zmianie indeksu lub dostawcy powtórz przypadki bezpieczeństwa, nie tylko trafność.
Administrator nie jest testem wszystkich ról
Najczęstszy błąd odbioru to sprawdzenie asystenta na koncie z pełnym dostępem. Wszystkie źródła działają, odpowiedzi są trafne i nikt nie widzi ograniczeń. Dopiero użytkownik z mniejszą rolą ujawnia, że filtr był pusty.
Przygotuj konta testowe o rzeczywistych zakresach i nie nadawaj im dodatkowych uprawnień dla wygody. Odbiór powinien obejmować także rolę bez dostępu do całej kolekcji. Test administratora sprawdza funkcję, ale nie granicę bezpieczeństwa.
Ogranicz możliwość technicznego pomijania filtrów w środowisku produkcyjnym. Jeżeli tryb serwisowy jest konieczny, wymaga osobnej autoryzacji, logu i czasu wygaśnięcia. „Debug” nie może być stałym przyciskiem otwierającym całą wiedzę firmy.
Kontrola cytowań i dalszych pytań
Nawet poprawna pierwsza odpowiedź może zostawić poufny fragment w historii rozmowy. Kolejne pytanie wykorzystuje go bez nowego pobierania. Przy zmianie uprawnień trzeba sprawdzić, czy stary kontekst powinien zostać usunięty lub ponownie autoryzowany.
Cytowanie prowadzi do źródła, więc link również musi sprawdzać dostęp. Nie podpisuj długotrwałych adresów do każdego pliku bez zakresu. Użytkownik może przekazać link dalej. Kontrola powinna następować przy otwarciu, nie tylko przy wyświetleniu przypisu.
Test obejmuje eksport rozmowy i udostępnienie. Te funkcje tworzą nowe kopie oraz nowych odbiorców. Nie mogą omijać zasad źródła tylko dlatego, że odpowiedź została już wygenerowana.
Macierz przypadków do regresji
Zapisz role, typy źródeł i ścieżki: wyszukiwanie, odpowiedź, cache, cytowanie, eksport, dalsza rozmowa. Przy każdej kombinacji określ dozwolony wynik. Nie musisz testować setek kombinacji przy każdej zmianie; wybierz zależne i kilka krytycznych kontrolnych.
Dodaj przypadki przejściowe: użytkownik traci grupę, dokument zmienia właściciela, źródło znika, metadane są niekompletne. To one pokazują zachowanie przy rzeczywistym cyklu życia danych. Test samych statycznych uprawnień nie wystarcza.
Po teście sprawdź również ślady poboczne: log wyszukiwania, historię odpowiedzi, podgląd fragmentu i raport błędów. Zakazana treść nie powinna pojawić się tam z powodu wcześniejszego etapu. Sam brak jej w końcowej wiadomości nie dowodzi, że proces był bezpieczny.
Wynik zapisz wraz z wersją polityki i indeksu. Przy incydencie pozwala to odtworzyć konkretny stan. Jeżeli test wykryje wyciek, zatrzymaj zależną ścieżkę, ogranicz dostęp do danych i oceń zasięg przed kolejną publikacją. Nie poprawiaj wyłącznie promptu i nie uznawaj sprawy za zamkniętą po jednej udanej próbie.
Aeneia Audit pomaga zmapować dostęp i przepływ danych. Przy konfiguracji narzędzi pomocny jest przewodnik Aeneia Signal o uprawnieniach integracji AI.
Przykład wiersza macierzy: „Rola B | dokument testowy tylko dla roli A | pytanie o treść dokumentu | oczekiwany wynik: brak dostępu do treści i neutralna odpowiedź”. Przygotuj dokument fikcyjny, bez danych klientów. Zapisz wynik wyszukiwania oraz odpowiedzi osobno, aby brak cytatu nie ukrył błędu na wcześniejszym etapie.
W tym samym środowisku potwierdź, że rola A może odczytać fikcyjny dokument, i użyj go we wcześniejszej rozmowie. Jeśli system korzysta z pamięci podręcznej, uruchom także tę ścieżkę i sprawdź, czy została użyta. Następnie jawnie odbierz A dostęp. Po czasie synchronizacji przewidzianym w polityce ponów pytanie jako A w nowej oraz wcześniejszej rozmowie: nowe wyszukiwanie i nowa odpowiedź nie powinny ujawnić treści dokumentu. Wcześniej udostępnioną historię, cytaty i pamięć podręczną oceń według polityki systemu; nie zakładaj, że widziana wcześniej treść zawsze zostanie usunięta. Jeżeli wynik narusza zasady, oznacz próbę jako niezaliczoną i zatrzymaj zależną ścieżkę. Zapisz czas zmiany i synchronizacji, wersję polityki oraz indeksu. Jedna poprawna odpowiedź nie potwierdza bezpieczeństwa całego systemu.
Sprawdź nas. To zdrowe.
Temat zmienia się szybko. Linki prowadzą do źródeł pierwotnych i stron, na których możesz zweryfikować kontekst.








