Podstawowe informacje o profilach
Baza danych Oracle posiada mechanizmy dbające o bezpieczeństwo zgromadzonych danych oraz o możliwość bezproblemowego z nich korzystania. Profile są to reguły, których zadaniem jest odpowiednie rozplanowanie mocy obliczeniowej serwera oraz określenie polityki haseł, tak by baza danych pracowała bez zakłóceń. Profile są powiązane z sesją użytkownika, jeżeli użytkownik złamie regułę z obowiązującego go profilu, jego sesja zostanie natychmiast przerwana.
Profile składają się z dwóch grup. Grupa pierwsza nakłada ograniczenia na zasoby jądra sytemu (ang. kernel) tak, aby jeden użytkownik nie zajął całych zasobów. Można to osiągnąć za pomocą następujących parametrów:
  • SESSIONS_PER_USER – liczba określająca maksymalną ilość sesji użytkownika,
  • CPU_PER_CALL – liczba (setnych sekund) określająca maksymalny czas CPU przydzielony sesji,
  • CONNECT_TIME – określa maksymalną długość sesji użytkownika, czas ten wyrażony jest w minutach,
  • IDLE_TIME – maksymalny czas bezczynności wyrażony w minutach, (jeżeli użytkownik czeka "bezczynnie" na wykonanie długiego zapytania to czas ten nie wlicza się do IDLE_TIME),
  • LOGICAL_READS_PER_SESSION – maksymalna ilość bloków (znajdujących się w pamięci RAM i na dysku twardym) jaka może być wykorzystana na potrzeby jednego zapytania (gdzie zapytanie dzieli się na parsowanie, wykonanie, zwrócenie wyników),
  • LOGICAL_READS_PER_CALL – maksymalna ilość bloków potrzeban na jedno zapytanie (gdzie zapytanie dzieli się na parsowanie, wykonanie, zwrócenie wyników),
  • PRIVATE_SGA – maksymalna liczba pamięci (w bajtach) jaką sesja może wykorzystać z ang. shared pool z SGA (ang. System Globar Area), można dodać przedrostek „K” lub „M” aby liczbe tą wyrazić w kilo lub megabajtach,
  • COMPOSITE_LIMIT – maksymalny koszt sesji wyrażony w ang. sernice units. Jest to liczba będąca sumą wartości następujących parametrów: CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION, PRIVATE_SGA;
Komfort korzystania z bazy danych zależny jest także od poprawnej polityki haseł, którą można opracować na podstawie nastepujących reguł:
  • FAILED_LOGIN_ATTEMPTS – maksymalna ilość nieudanych prób zalogowania, po jej przekroczeniu konto zostanie zablokowane,
  • PASSWORD_LIFE_TIME – maksymalny czas życia hasła, po jego upływie zalogowanie jest niemożliwe dopóki hasło nie zostanie zmienione,
  • PASSWORD_REUSE_TIME – czas w dniach po którym hasło może być powtórnie wykorzystane, (przy zmianie hasła),
  • PASSWORD_REUSE_MAX – minimalna ilość zmian haseł po którym hasło może być powtórnie wykorzystane, po przypisaniu tej opcji dowolnej liczby, opcji PASSWORD_REUSE_TIME należy przypisać wartość „unlimited”,
  • PASSWORD_LOCK_TIME – liczba dni po jakich konto zostanie odblokowane, po maksymalnej liczbie nieudanych zalogowań,
  • PASSWORD_GRACE_TIME – maksymalny czas życia hasła, w dniach,
  • PASSWORD_VERIFY_FUNCTION – skrypt weryfikujący poprawność hasła, co ciekawe można tu umieścić każdy program napisany w języku PL/SQL, a to daje ogromne możliwości weryfikacji. Przykładowe scenariusze „użytkownik może się zalogować tylko od godziny 8 – 16”, lub „jeżeli login użytkownika jest inny niż Bartek to zwróć losowy wyjątek i przerwij sesje”;
Profil DEFAULT
Każda baza ma profil o nazwie DEFAULT jest on domyślnie powiązany z każdym użytkownikiem. Każdy kolejny profil dziedziczy z profilu DEFAULT. Np. jeżeli nowy profil nie ma zdefiniowanego parametru IDLE_TIME, to przyjmuje wartość UNLIMITED z profilu DEFAULT. Profil DEFAULT każdej regule przypisuje wartość UNLIMITED, co oznacza parametr niezdefiniowany, czyli barak ograniczeń. Profil DEFAULT jest domyślnie przydzielany każdemu użytkownikowi. Dlatego obowiązkiem administratora jest odpowiednie skonfigurowanie nowego profilu. Polecenie zwracające listę profilów zainstalowanych w bazie danych Oracle wygląda niestepująco:
SELECT * FROM DBA_PROFILES;
Tworzenie profili
Profil może być utworzony, powiązany z użytkownikiem, jak i odebrany użytkownikowi w dowolnej chwili. Zmienione lub nowe profile obowiązują od chwili nawiązania nowej sesji. Przykładowa komenda tworzaca nowy profil o nazwie „prof1” wygląda następująco:
CREATE PROFILE prof1 LIMIT
CPU_PER_CALL 3000
CONNECT_TIME 45;
Po stworzeniu profilu można go powiązać z użytkownikiem, a będzie on obowiązywać po rozpoczęciu nowej sesji. Użytkownik w danej chwili może mieć przypisany tylko jeden profil. Każdy kolejny nadpisuje poprzedni. Poniżej przedstawiono komendę, która przypisuje profil użytkownikowi:
ALTER USER <użytkownik> PROFILE <nazwa_profilu>;
Zmiana profilu
Chcąc zmienić profil o nazwie prof1, można posłużyć się komendą:
ALTER PROFILE prof1 LIMIT CONNECT_TIME 100;
Zmienia ona maksymalny czas długości sesji na 100 minut. Zmiana będzie obowiązywać po nawiązaniu nowej sesji prze użytkownika. Warto zmienić parametry profilu DEFAULT na bardziej rygorystyczne.
Usuwanie profilu
Profil można usunąć (pod warunkiem, że nie jest powiązany z użytkownikiem), za pomocą komendy:
DROP PROFILE <nazwa_profilu>;
Chcąc usunąć profil powiązany z użytkownikiem należy dodać opcję CASCADE:
DROP PROFILE <nazwa_profilu> CASCADE;
Po odebraniu użytkownikowi profilu, np. przez jego usuniecie, automatycznie przydzielony mu zostaje profil DEFAULT, który zacznie obowiązywać po ustanowieniu nowej sesji. Profilu DEFAULT nie można usunąć.
Literatura