SQL Server w logistyce

Tabela _users_cfg w bazie danych SQL Server

Uprawnienia szczegółowe — zgody nadawane pojedynczym użytkownikom do konkretnych transakcji, ponad zakresem roli.

sql.server.net.pl/sql/
Uśmiechnięty analityk w garniturze przy szerokim monitorze
Uśmiechnięty analityk w garniturze przy szerokim monitorze
W skrócie
  • Wiersz przypisuje konkretnemu użytkownikowi zgodę lub jej brak do jednej transakcji — niezależnie od uprawnień roli.
  • Kolumna TYP grupuje uprawnienia rodzajami, na przykład osobno prawo odczytu i prawo zatwierdzania.
  • Indeks unikalny na czterech kolumnach wyklucza dwa sprzeczne wpisy dla tego samego uprawnienia.
  • Sześć indeksów wynika z tego, że tabela jest odczytywana przy budowaniu każdego ekranu.

Do czego służy tabela [dbo].[_users_cfg]

Uprawnienia nadawane rolom sprawdzają się dopóty, dopóki wszyscy na danym stanowisku mają robić dokładnie to samo. W praktyce zdarzają się odstępstwa: jeden magazynier ma dodatkowo zatwierdzać korekty, jedna osoba z biura potrzebuje dostępu do zestawienia zastrzeżonego dla kierowników. Tabela [dbo].[_users_cfg] obsługuje właśnie te przypadki.

Wpis wiąże nazwę użytkownika z konkretną transakcją wskazaną w kolumnie PLIK i przypisuje jej wartość logiczną — zgodę albo jej brak. Kolumna TYP grupuje uprawnienia rodzajami, dzięki czemu jedna transakcja może mieć osobne zgody na odczyt, edycję i zatwierdzenie. Kolumna PRX wskazuje rolę, w kontekście której dane uprawnienie obowiązuje.

Mechanizm jest potężny i właśnie dlatego wymaga dyscypliny. Uprawnienie nadane pojedynczo omija cały porządek oparty na rolach: nie widać go przy przeglądaniu definicji roli, nie przenosi się przy zmianie stanowiska i nie znika, gdy osoba przestaje go potrzebować. Kilkanaście takich wpisów jest do opanowania; kilkaset sprawia, że nikt w firmie nie potrafi odpowiedzieć na pytanie, kto ma dostęp do czego.

Jak system ustala uprawnienie do transakcji
Rola RolaPodstawowy zakres uprawnień wynikający z przypisania do roli
Wpis szczegółowy Wpis szczegółowySprawdzenie, czy dla tego użytkownika i transakcji istnieje wyjątek
Rozstrzygnięcie RozstrzygnięcieWartość logiczna wpisu decyduje o dostępie
Skutek SkutekTransakcja zostaje udostępniona albo zablokowana

Wpis szczegółowy działa poza porządkiem ról — nie widać go przy przeglądaniu definicji roli, do której należy użytkownik.

Budowa tabeli — wykaz kolumn

Dziewięć kolumn opisuje uprawnienie: kogo dotyczy, czego dotyczy i jaka jest jego wartość.

Wykaz kolumn tabeli
KolumnaTypWymaganaZnaczenie
ID_USERS_CFGint
liczba całkowita
takUnikalny identyfikator wiersza w tabeli
OPISvarchar(150)
tekst do 150 znaków
nieOpis znaczenia danego parametru
PLIKvarchar(50)
tekst do 50 znaków
takNazwa transakcji - pliku
PRXvarchar(5)
tekst do 5 znaków
takSymbol PRX parametru - oznaczający rolę w której dany parametr znajduje zastosowanie
ROLAvarchar(20)
tekst do 20 znaków
nieRola systemowa
TYPvarchar(50)
tekst do 50 znaków
takTyp uprawnienia do grupowania parametrów
USERGUIDuniqueidentifier
identyfikator GUID
niekod ID rekordu - użytkownika, powiazany z tabelą użytkowników _users
USERNAMEvarchar(50)
tekst do 50 znaków
takNazwa użytkownika dla którego określane są uprawnienia
WARTOSCbit
wartość logiczna 0/1
takOznaczenie uprawnienia użytkownika do uruchamiania danego parametru

Kolumna USERGUID wiąże wpis z kontem w tabeli użytkowników trwałym identyfikatorem, podczas gdy USERNAME przechowuje sam login. Obecność obu pozwala zachować powiązanie mimo zmiany loginu, na przykład po zmianie nazwiska.

Indeksy i wydajność zapytań

Sześć indeksów to dużo jak na dziewięciokolumnową tabelę, ale wynika z częstotliwości jej odczytu.

Indeksy zdefiniowane na tabeli
IndeksKolumnyRodzaj
PK__users_cfgID_USERS_CFGklucz główny
TYPPLIK, TYPzwykły
USERNAMEUSERNAMEzwykły
USERNAME_PRX_PLIKUSERNAME, PRX, PLIKzwykły
USERNAME_PRX_TYP_PLIKUSERNAME, PRX, TYP, PLIKunikalny
USERNAME_ROLA_TYP_PLIKUSERNAME, ROLA, TYP, PLIKzwykły

Tabela jest sprawdzana przy budowaniu każdego ekranu, dla każdego użytkownika. Indeks USERNAME_PRX_TYP_PLIK jest przy tym unikalny i pełni podwójną rolę: obsługuje odczyt oraz wyklucza dwa sprzeczne wpisy dla tego samego uprawnienia. Bez niego dostęp zależałby od kolejności odczytu wierszy, czyli bywałby różny w kolejnych sesjach.

Uprawnienie szczegółowe czy nowa rola — jak wybrać

Każde odstępstwo od uprawnień roli da się obsłużyć na dwa sposoby. Wybór między nimi decyduje o tym, czy za rok da się jeszcze zrozumieć, kto ma dostęp do czego.

Porównanie sposobów obsługi odstępstwa
KryteriumWpis szczegółowyNowa rola
Nakład pracyJeden wiersz, kilka sekundDefinicja roli i przypisanie uprawnień
Widoczność przy audycieUkryta — trzeba wiedzieć, gdzie szukaćWidoczna w przeglądzie ról
Zachowanie przy zmianie stanowiskaZostaje, choć przestaje mieć uzasadnienieZmienia się razem z przypisaniem roli
Powielenie dla kolejnej osobyKolejny wiersz, i tak przy każdejWystarczy przypisać istniejącą rolę
Sensowne przyPojedynczym, tymczasowym wyjątkuOdstępstwie dotyczącym więcej niż jednej osoby

Reguła praktyczna: drugi raz to samo uprawnienie nadawane pojedynczo jest sygnałem, że powinna powstać rola.

Największym problemem wpisów szczegółowych nie jest ich nadawanie, lecz odbieranie. Uprawnienie przyznane „na czas zastępstwa” nie ma daty wygaśnięcia i nikt o nim nie pamięta, gdy zastępstwo się kończy. Po dwóch latach lista takich wpisów opisuje uprawnienia, których uzasadnienia nikt już nie potrafi odtworzyć — a odebranie ich bez wiedzy, po co powstały, grozi zablokowaniem komuś pracy.

Jak korzystać z tabeli w praktyce

Przy nadawaniu uprawnień szczegółowych warto trzymać się poniższych zasad:

  • Wypełniaj kolumnę OPIS zawsze — po roku to jedyna wskazówka, dlaczego dane uprawnienie zostało nadane.
  • Twórz nową rolę, gdy to samo odstępstwo dotyczy drugiej osoby; wpisy szczegółowe nie skalują się.
  • Przeglądaj listę wpisów co najmniej raz w roku i odbieraj te, których nikt nie potrafi uzasadnić.
  • Sprawdzaj wpisy przy zmianie stanowiska pracownika — nie zmieniają się razem z rolą i zwykle tracą uzasadnienie.
  • Nie używaj tego mechanizmu do odbierania uprawnień wynikających z roli; lepiej poprawić samą rolę.
  • Zestawiaj tę tabelę z listą aktywnych kont — wpisy dla osób, które odeszły, są martwe, ale zaciemniają obraz.

Wpisy szczegółowe wraz z informacją, czy dotyczą aktywnego konta i czy mają wypełniony opis:

SELECT  c.USERNAME,
        u.NAZWISKO,
        c.PRX      AS ROLA_KONTEKST,
        c.TYP,
        c.PLIK     AS TRANSAKCJA,
        c.WARTOSC,
        ISNULL(NULLIF(c.OPIS, ''), '(brak uzasadnienia)') AS OPIS,
        CASE WHEN u.USERNAME IS NULL THEN 'konto nie istnieje'
             WHEN u.AKTYWNE = 0     THEN 'konto wyłączone'
             ELSE '' END AS UWAGA
FROM    dbo._users_cfg AS c
        LEFT JOIN dbo._users AS u ON u.USERNAME = c.USERNAME
ORDER BY UWAGA DESC, c.USERNAME, c.TYP;

Wiersze z adnotacją o nieistniejącym albo wyłączonym koncie warto usunąć w pierwszej kolejności — są martwe, a wydłużają każdy przegląd uprawnień.

Uprawnienia szczegółowe są narzędziem, które ratuje sytuację raz i komplikuje ją później dziesięć razy. Warto traktować każdy taki wpis jak dług: da się go zaciągnąć w kilka sekund, ale spłaca się go przy każdym kolejnym audycie uprawnień.

Powiązane tabele i dokumentacja

Uprawnienia szczegółowe uzupełniają porządek oparty na rolach opisany w poniższych tabelach:

FAQ

Najczęściej zadawane pytania o tabelę _users_cfg

01

Kiedy używać wpisu szczegółowego zamiast nowej roli?

Przy pojedynczym, najlepiej tymczasowym odstępstwie dotyczącym jednej osoby. Gdy to samo uprawnienie trzeba nadać drugiemu użytkownikowi, powinna powstać rola — wpisy szczegółowe nie skalują się i są niewidoczne przy przeglądaniu definicji ról, co utrudnia późniejszy audyt.

02

Dlaczego indeks na czterech kolumnach jest unikalny?

Żeby wykluczyć dwa sprzeczne wpisy dla tej samej pary użytkownik–transakcja w tym samym kontekście. Bez tego ograniczenia dostęp zależałby od kolejności odczytu wierszy, czyli mógłby być różny w kolejnych sesjach — a błąd tego rodzaju jest wyjątkowo trudny do odtworzenia i zdiagnozowania.

03

Co zrobić z wpisami po odejściu pracownika?

Usunąć je razem z wyłączeniem konta. Wpisy pozostają w tabeli i nie powodują szkody, bo konto jest nieaktywne, ale zaciemniają obraz przy każdym późniejszym przeglądzie uprawnień. Po kilku latach potrafią stanowić większość zawartości tabeli.

04

Czy tym mechanizmem można odebrać uprawnienie wynikające z roli?

Technicznie tak — wartość logiczna może być ustawiona na brak zgody. W praktyce lepiej tego unikać: powstaje wtedy sytuacja, w której definicja roli mówi jedno, a rzeczywisty dostęp jest inny, i nikt tego nie zauważy bez zajrzenia do tej konkretnej tabeli. Właściwym rozwiązaniem jest poprawienie samej roli.

Słownik pojęć

Słownik pojęć

Pojęcia związane z zarządzaniem uprawnieniami użytkowników.

RRole i uprawnienia
Mechanizm przypisywania użytkownikom dostępu do funkcji i danych. Zamiast nadawać uprawnienia pojedynczo, przypisuje się je do roli odpowiadającej stanowisku.
GGRC
Governance, Risk and Compliance — ład korporacyjny, zarządzanie ryzykiem i zgodność z przepisami. Wymaga dokumentowania procedur i śladu rewizyjnego.
ŚŚlad rewizyjny
Nieusuwalny zapis, kto i kiedy zmienił dane w systemie. Podstawa wiarygodności ewidencji podczas audytu i kontroli.
RRODO
Rozporządzenie o ochronie danych osobowych. Wymaga ograniczenia dostępu do danych, rejestrowania operacji na nich i wskazania podstawy przetwarzania.
MMicrosoft SQL Server
Serwer relacyjnej bazy danych, na którym pracują aplikacje SoftwareStudio. Odpowiada za spójność danych, uprawnienia dostępu, kopie zapasowe i wydajność zapytań.
IIndeks bazodanowy
Struktura przyspieszająca wyszukiwanie wierszy w tabeli. Dobrze dobrane indeksy skracają czas zapytań, ale spowalniają zapisy i zajmują miejsce na dysku.
OObieg dokumentów
Zdefiniowana ścieżka, którą dokument przechodzi między stanowiskami wraz z wymaganymi akceptacjami. Ustala kolejność i odpowiedzialność.

Zobacz to w praktyce

Sprawdź, jak systemy SoftwareStudio oparte na MS SQL Server wspierają ten obszar Twojej firmy.