Role to zbiory uprawnień, które można grupowo nadawać lub odbierać użytkownikom. Istnieją 2 typy ról na poziomie bazy danych: stałe role bazy danych, które są predefiniowane w bazie danych, oraz role elastyczne, które użytkownik sam może stworzyć.
Najważniejsze predefiniowane role:
- DBA – użytkownik, który ma tą rolę posiada wszystkie podstawowe uprawnienia niezbędne do administrowania bazą danych.
- PUBLIC - rola nadawana domyślnie wszystkim użytkownikom systemu. Nadanie uprawnienia tej roli spowoduje, iż otrzymają ją wszyscy.
- CONNECT, RESOURCE - pozwalają na połączenie się z bazą danych (CONNECT), oraz tworzenie obiektów w obrębie swojego schematu. Są one zwykle nadawane użytkownikom po ich stworzeniu.
Własne role – oprócz predefiniowanych istnieje możliwość nadawania ról własnych, stworzonych przez różnych użytkowników.
Role są tworzone poleceniem: CREATE ROLE nazwa_roli;
Role nie zabezpieczone hasłem są domyślne i zaczynają działać od razu po nadaniu ich użytkownikowi. Oznacza to, iż użytkownik po zalogowaniu będzie miał do niej dostęp bez jej włączania. Jednak nadanie roli dla użytkownika podczas sesji spowoduje, iż będzie on mógł posłużyć się uprawnieniami przydzielonymi danej roli dopiero po przelogowaniu się.
Rola może być zabezpieczona hasłem: CREATE ROLE nazwa_roli IDENTIFIED BY haslo;
Dana rola nie jest wówczas włączona domyślnie i użytkownik musi ją włączyć ręcznie. Nie może on korzystać ze związanych z rolą uprawnień póki nie poda do niej hasła.
Usuwanie roli odbywa się za pomocą polecenia: DROP ROLE nazwa_roli;
Do roli mogą zostać przypisane zarówno polecenia systemowe i obiektowe, jak i inne role.
Nadawanie uprawnień dla roli odbywa się poprzez polecenie :
GRANT uprawnienie TO nazwa_roli; => GRANT CREATE TABLE TO nazwa_roli;
Aby cofnąć nadanie pewnego uprawnienia dla danej roli można skorzystać z następującego polecenia: REVOKE uprawnienie FROM nazwa_roli;
Przypisanie roli do użytkownika wygląda następująco: GRANT nazwa_roli TO uzytkownik;
Odebranie użytkownikowi przypisanej roli odbywa się przy użyciu polecenia: REVOKE nazwa_roli FROM uzytkownik;
Sprawdzanie przyznanych roli i uprawnień roli:
Sprawdzenie posiadanych przez siebie ról można dokonać przy odwołaniu się do słownika user_role_privs: SELECT * FROM USER_ROLE_PRIVS;
Użytkownik SYS może sprawdzić jakie role zostały przydzielone wszystkim użytkownikom:
SELECT * FROM DBA_ROLE_PRIVS;
Można również sprawdzić role przypisane dla konkretnego użytkownika. Z łatwością da się poznać, jakie zostały przypisane roli uprawnienia systemowe: SELECT * FROM ROLE_SYS_PRIVS;
W tym widoku poznać można jedynie uprawnienia systemowe. Uprawnienia obiektowe, można otrzymać korzystając ze słownika ROLE_TAB_PRIVS: SELECT * FROM ROLE_TAB_PRIVS;
Przykład:
Aby lepiej zobrazować zastosowania ról, posłużmy się następującym przykładem. Na początku stworzymy użytkownika i 3 role, z których jedna jest zabezpieczona hasłem. Następnie nadamy stworzonym rolom różne uprawnienia.
CREATE USER uzytkownik IDENITFIED BY haslo;
GRANT CONNECT, RESOURCE TO uzytkownik;
CREATE ROLE rola_1;
CREATE ROLE rola_2;
CREATE ROLE uprawniona_rola IDENTIFIED BY haslo_roli;
GRANT SELECT ON t.autor TO rola_1;
GRANT SELECT ON t.ksiazka TO rola_2;
GRANT SELECT ON dba_audit_trail TO uprawniona_rola;
GRANT rola_1,rola_2, uprawniona_rola TO uzytkownik;
Powyższa rola rola_1 może odczytywać wartości z tabeli autor, zaś rola_2 z tabeli ksiazka. Użytkownik będzie mógł korzystać z uprawnień przypisanych danej roli już po zalogowaniu się. Uprawniona_rola z hasłem pozwala sprawdzić, co robią inni użytkownicy.
Aby ustawić rola_1 i rola_2 jako domyślne, zaś uprawniona_rola udostępnić po podaniu hasła, należy użyć poniższego polecenia:
ALTER USER uzytkownik DEFAULT ROLE ALL EXCEPT uprawniona_rola;
Od tej chwili role rola_1 i rola_2 są dostępne domyślnie. Aby zacząć korzystać z przywilejów roli uprawniona_rola, użytkownik musi wykorzystać polecenie:
SET ROLE uprawniona_rola IDENTIFIED BY haslo_roli;
W podobny sposób można ustalić wybrane role jako domyślne:
ALTER USER uzytkownik DEFAULT ROLE rola_1;
Aby uzytkownik mógł korzystać z roli, będzie musiał wpisać komendę: SET ROLE rola_2;
Włączenie roli przez użytkownika obejmuje jedynie czas trwania obecnej sesji. Można rownież wyłączyć korzystanie z wszystkich ról poprzez polecenie: SET ROLE NONE;