Podstawowe zasady:
- przywileje, które są ci niepotrzebne powinny zostać wyłączone
- nie używane konta użytkownika powinny być blokowane
- powinno się stosować wbudowanych rozwiązań DBMS, nie od nowa wymyślać koło w kodzie aplikacji klienckiej
Techniki specyficzne dla Oracle Database
- każdy użytkownik ma swoją listę uprawnień
- istnieje funkcja Roles, czyli lista uprawnień. Istnieją:
- System defined roles, takie jak DBA albo Connect
- user defined roles, czyli takie jakie sobie zdefiniujesz
- uprawnienia, kategoryzujemy:
- uprawnienia systemowe, czyli np.
create tablealbogrant any priviliges - uprawnienia obiektowe, czyli np. czy użytkownik ma dostęp do danej tabeli
- uprawnienia systemowe, czyli np.
- profile, powiązane z kontem użytkownika, wykorzystywane do tworzenia jakiś polityk haseł
Zarządzanie użytkownikami
--odblokowywanie/blokowanie usera
alter user [name] account [lock | unlock]
--listujesz użytkowników wraz z ich statusem
select username,account_status from dba_users
revoke execute on utl_file from PublicCokolwiek ustawisz na pseudo-userze Public, zmienia się u wszystkich użytkowników
Utl_file pozwala na odczytywanie plików tekstowych systemu operacyjnego.
Profile
Zbiór reguł/zasad nakładanych na danego użytkownika. Nakłada je się głównie po to by:
- ograniczyć ilość CPU, którą user może użyć, żeby jego kwerenda nie blokowała bazy
- ustawić limit prób zalogowania się, żeby nie móc brute-force’ować hasła
Audit
Monitorowanie aktywności użytkowników, głównie:
- dotykanie niektórych obiektów w DB
- dostęp do poufnych plików
- próby logowania się do konta
- akcje administratora
Audyty negatywnie wpływają na wydajność.
Konfiguracja
alter system set audit_trail = [none | false | os | db | true| db_extended]none lub false - audyt wyłączony
os - ślad audytu zapisywany do trail file systemu operacyjnego
db lub true - do zapisu jest wykorzystywana tabela Sys.Aud$
db_extended - zapisywane jest całe zapytanie SQL wraz z zmiennymi wiążącymi
Zmienne wiążące to ta zaślepka z prepared statement, np.:
ps = 'select ...... where id = :id' - > to jest zaślepka
ps.setInt(1,100)Przykłady
audit create any trigger
audit session
audit insert on hr.devs
audit session whenever not successfulAudyt jest zapisywany w widoku dba_audit_trail w tabeli sys.aud$. Istnieją jeszcze inne, takie jak:
dba_audit_object- na jakich obiektachdba_audit_statement- jakie statementydba_audit_session- próby zalogowania
Można jeszcze dodawać triggery, wywoływane np. na edycji danej kolumny na jakąś wartość.
Można bardzo dużo tutaj poustawiać wg. swoich potrzeb, ale nie pomoże naSelecty.
Fine grained auditing
Służy do monitorowania SQL Select i wyrażen DML. Można monitorować:
- tylko dane tabele
- tylko dane kolumny
- tylko dane rekordy
- tylko niektóre wyrażenia z listy
Osiągane przez modyfikację polityki FGA w paczce DBA_FGA
Unified auditing
Jako że jest mega dużo tych różnych sposobów audytowania, unified auditing zbiera te wszystkie logi w jedno miejsce, do schemy audsys do przestrzeni tabel sysaux
Niebezpieczne praktyki
- tworzenie kopii danych wyjętych z miejsc pracy użytkowników
- przechowywanie danych na przenośnych urządzeniach
- tworzenie aplikacji zależnych od jednego użytkownika z długą listą uprawnień
- nie zapobieganie SQL injection
- robienie kodu, który może wywołać polecenie SQL jeśli proszony