Czym jest schema, a czym user

Aby wyjaśnić Wam czym jest schemat (schema), a czym użytkownik (user) mógłbym podesłać link do wikipedii i na tym zakończyć ten wpis. Ale nie to jest moją intencją. Sam bez pomocy, przez długi czas nie potrafiłem poukładać sobie charakterystyki tych dwóch pojęć i dlatego na przykładach utworzę i przedstawię i jedno i drugie.

Tworzenie usera

Na przykładach uczy się najlepiej, dlatego stworzymy sobie użytkownika finanse poleceniami tak jak poniżej:

/*
Utworzenie usera
*/
CREATE USER finanse IDENTIFIED BY fin123
/

/*
Mozliwosc zalogowania sie userem finanse do bazy danych
*/
GRANT CONNECT TO finanse
/

/*
Utworzenie nieograniczonej przestrzeni tabel dla usera finanse
*/
GRANT UNLIMITED TABLESPACE TO finanse
/

/*
Uprawnienia do tworzenia tabel na userze finanse
*/
GRANT CREATE TABLE to finanse
/

Po wykonaniu i zalogowaniu na użytkownika finanse, jego zawartość przedstawia się następująco. Z oczywistych powodów nic tutaj nie ma, bo i skąd ma być.

Zawartość user finanse
Zawartość usera finanse
Tworzenie tabeli income

Utwórzmy zatem tabelę income, która będzie przechowywała informacje o przychodach. Na tym etapie nie skupiamy się na strukturze tabeli income, tylko na stworzeniu obiektu bazy danych.

/*
Tworzenie tabeli income
*/
CREATE TABLE income(inc_id NUMBER NOT NULL, inc_date DATE, inc_value NUMBER(10,2))
/

/*
Przykladowe inserty
*/
INSERT INTO income VALUES (1, SYSDATE, 100)
/
INSERT INTO income VALUES (2, SYSDATE, 100)
/
INSERT INTO income VALUES (3, SYSDATE, 100)
/

COMMIT
/

I tak po wykonaniu powyższych instrukcji, będzie wyglądała zawartość schematu finanse.

Zawartość schematu finanse po utworzeniu tabeli income
Zawartość schematu finanse po utworzeniu tabeli income

Ale, ale czekaj. Był użytkownik finanse, a teraz nazywasz to samo schematem, jak to? A tak to. W przypadku kiedy na użytkowniku tworzone są obiekty, w nomenklaturze Oracle zmienia się również jego nazewnictwo właśnie na schemat (schema). Nie oznacza to wcale, że coś się zmieniło. Wszystko zostaje po staremu, tylko zmieniło się nazewnictwo i przeznaczenie usera.

Tworzenie usera ADAM.KOWALSKI

Jeżeli nie jest to jeszcze jasne, to stwórzmy sobie użytkownika ADAM.KOWALSKI, który będzie posiadał uprawnienia tylko do odczytu do tabeli income w schemacie finanse.

/*
Utworzenie usera
*/
CREATE USER "ADAM.KOWALSKI" IDENTIFIED BY kowal123
/

/*
Mozliwosc zalogowania sie userem ADAM.KOWALSKI do bazy danych
*/
GRANT CONNECT TO "ADAM.KOWALSKI"
/

/*
Uprawnienia do podgladu zawartosci tabeli income na schemacie finanse
*/
GRANT SELECT ON finanse.income to "ADAM.KOWALSKI"
/

Taki użytkownik będzie mógł łączyć się z bazą danych i wykonywać tylko zapytania na tabeli income w schemacie finanse. Sam użytkownik ADAM.KOWALSKI nie będzie posiadał żadnych procedur, funkcji, tabel czy innych obiektów, ani uprawnień do ich zakładania.

Takim małym podsumowaniem na wzór tego, że kwadrat to taki prostokąt, będzie stwierdzenie, że schema to taki user. Cieszę się, że pomogłem 😀

Pliki do pobrania:

///