Jaka jest różnica między użytkownikiem a schematem w Oracle?
Jaka jest różnica między użytkownikiem a schematem w Oracle?
Odpowiedzi:
Od Ask Tom
Należy rozważyć schemat jako konto użytkownika i zbiór wszystkich obiektów w nim zawartych jako schemat do wszystkich celów i celów.
SCOTT to schemat obejmujący tabele EMP, DEPT i BONUS z różnymi dotacjami i innymi rzeczami.
SYS to schemat, który zawiera mnóstwo tabel, widoków, dotacji itp. Itd.
SYSTEM jest schematem .....
Technicznie - schemat jest zbiorem metadanych (słownika danych) używanych przez bazę danych, zwykle generowanych przy użyciu DDL. Schemat definiuje atrybuty bazy danych, takie jak tabele, kolumny i właściwości. Schemat bazy danych to opis danych w bazie danych.
Uważam, że problem polega na tym, że Oracle używa terminu „ schemat” nieco inaczej niż to, co ogólnie oznacza.
Schemat w sensie 2. jest podobny, ale nie taki sam jak schemat w sensie 1. Na przykład w przypadku aplikacji korzystającej z kilku kont DB schemat w sensie 2 może składać się z kilku schematów Oracle :-).
Schemat plus może również oznaczać wiele innych, dość niezwiązanych ze sobą rzeczy w innych kontekstach (np. W matematyce).
Oracle powinien po prostu użyć terminu „userarea” lub „accountobjects”, zamiast przeciążać „schemat” ...
Z WikiAnswers :
Ponadto użytkownik może uzyskać dostęp do obiektów w schematach innych niż własne, jeśli ma na to pozwolenie.
Myśl o użytkowniku jak zwykle (nazwa użytkownika / hasło z dostępem do logowania i dostępu do niektórych obiektów w systemie) oraz schemat jako wersja bazy danych katalogu domowego użytkownika. Użytkownik „foo” generalnie tworzy rzeczy w ramach schematu „foo”, na przykład, jeśli użytkownik „foo” tworzy lub odnosi się do tabeli „bar”, wówczas Oracle zakłada, że użytkownik oznacza „foo.bar”.
Ta odpowiedź nie określa różnicy między właścicielem a schematem, ale myślę, że dodaje się do dyskusji.
W moim małym świecie myślenia:
Walczyłem z pomysłem, że tworzę N liczbę użytkowników, w których chcę, aby każdy z tych użytkowników „zużywał” (aka, używał) jednego schematu.
Tim na oracle-base.com pokazuje, jak to zrobić (ma N liczbę użytkowników, a każdy z tych użytkowników zostanie „przekierowany” do jednego schematu.
Ma drugie podejście „synonimiczne” (nie wymienione tutaj). Cytuję tylko wersję CURRENT_SCHEMA (jedno z jego podejść) tutaj:
CURRENT_SCHEMA
PodejścieTa metoda wykorzystuje
CURRENT_SCHEMA
atrybut sesji do automatycznego wskazywania użytkownikom aplikacji prawidłowego schematu.Najpierw tworzymy właściciela schematu i użytkownika aplikacji.
CONN sys/password AS SYSDBA -- Remove existing users and roles with the same names. DROP USER schema_owner CASCADE; DROP USER app_user CASCADE; DROP ROLE schema_rw_role; DROP ROLE schema_ro_role; -- Schema owner. CREATE USER schema_owner IDENTIFIED BY password DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users; GRANT CONNECT, CREATE TABLE TO schema_owner; -- Application user. CREATE USER app_user IDENTIFIED BY password DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; GRANT CONNECT TO app_user;
Zwróć uwagę, że użytkownik aplikacji może się łączyć, ale nie ma żadnych przydziałów obszaru tabel ani uprawnień do tworzenia obiektów.
Następnie tworzymy niektóre role, aby umożliwić dostęp do odczytu i zapisu oraz tylko do odczytu.
CREATE ROLE schema_rw_role; CREATE ROLE schema_ro_role;
Chcemy dać naszej aplikacji użytkownika dostęp do odczytu i zapisu do obiektów schematu, dlatego przyznajemy odpowiednią rolę.
GRANT schema_rw_role TO app_user;
Musimy upewnić się, że użytkownik aplikacji ma domyślny schemat wskazujący właściciela schematu, dlatego tworzymy wyzwalacz PO LOGO, aby to zrobić za nas.
CREATE OR REPLACE TRIGGER app_user.after_logon_trg AFTER LOGON ON app_user.SCHEMA BEGIN DBMS_APPLICATION_INFO.set_module(USER, 'Initialized'); EXECUTE IMMEDIATE 'ALTER SESSION SET current_schema=SCHEMA_OWNER'; END; /
Teraz jesteśmy gotowi do utworzenia obiektu we właścicielu schematu.
CONN schema_owner/password CREATE TABLE test_tab ( id NUMBER, description VARCHAR2(50), CONSTRAINT test_tab_pk PRIMARY KEY (id) ); GRANT SELECT ON test_tab TO schema_ro_role; GRANT SELECT, INSERT, UPDATE, DELETE ON test_tab TO schema_rw_role;
Zwróć uwagę, w jaki sposób uprawnienia są przyznawane odpowiednim rolom. Bez tego obiekty nie byłyby widoczne dla użytkownika aplikacji. Mamy teraz funkcjonującego właściciela schematu i użytkownika aplikacji.
SQL> CONN app_user/password Connected. SQL> DESC test_tab Name Null? Type ----------------------------------------------------- -------- ------------------------------------ ID NOT NULL NUMBER DESCRIPTION VARCHAR2(50) SQL>
Ta metoda jest idealna, gdy użytkownik aplikacji jest po prostu alternatywnym punktem wejścia do głównego schematu, nie wymagając własnych obiektów.
To jest bardzo proste.
If USER has OBJECTS
then call it SCHEMA
else
call it USER
end if;
Użytkownik może uzyskać dostęp do obiektów schematu należących do różnych użytkowników.
Konto użytkownika przypomina krewnych, którzy posiadają klucz do domu, ale nic nie posiadają, tzn. Konto użytkownika nie jest właścicielem żadnego obiektu bazy danych ... słownika danych ...
Podczas gdy schemat jest enkapsulacją obiektów bazy danych. To tak, jak właściciel domu, który jest właścicielem wszystkiego w domu, a konto użytkownika będzie mogło uzyskać dostęp do towarów w domu tylko wtedy, gdy właściciel, tj. Schemat, udzieli mu niezbędnych dotacji.
- USER i SCHEMA
Oba słowa „użytkownik” i „schemat” są wymienne, dlatego większość ludzi ma wątpliwości co do tych słów poniżej. Wyjaśniłem różnicę między nimi
- Użytkownik Użytkownik jest kontem do połączenia bazy danych (Serwer). możemy utworzyć użytkownika za pomocą UTWÓRZ UŻYTKOWNIKA nazwa_użytkownika IDENTYFIKOWANA PRZEZ hasło.
--Schemat
W rzeczywistości baza danych Oracle zawiera logiczną i fizyczną strukturę do przetwarzania danych. Schemat Również struktura logiczna do przetwarzania danych w bazie danych (komponent pamięci). Jest tworzony automatycznie przez Oracle podczas tworzenia przez użytkownika. Zawiera wszystkie obiekty utworzone przez użytkownika powiązanego z tym schematem. Na przykład, jeśli stworzyłem użytkownika o nazwie santhosh, wówczas Oracle tworzy schemat o nazwie santhosh, oracle przechowuje wszystkie obiekty utworzone przez użytkownika santhosh w santhosh schemat.
Możemy utworzyć schemat za pomocą instrukcji CREATE SCHEMA, ale Oracle automatycznie utworzy użytkownika dla tego schematu.
Możemy usunąć schemat, używając instrukcji DROP SCHEMA schama_name instrukcja RESTRICT, ale nie można usunąć schema zawiera obiekty, więc aby usunąć schemat, musi być pusty. Tam słowo ograniczające wymusza określenie tego schematu bez obiektów.
Jeśli spróbujemy upuścić użytkownika zawierającego obiekty w jego schemacie, musimy podać słowo KASKADA, ponieważ wyrocznia nie pozwala na usunięcie obiektów zawierających użytkownika. DROP USER nazwa_użytkownika CASCADE, więc wyrocznia usuwa obiekty ze schematu, a następnie automatycznie upuszcza użytkownika, obiekty odwołujące się do obiektów tego schematu z innych schematów, takich jak widoki i prywatne synonimy, przechodzą w stan nieprawidłowy.
Mam nadzieję, że teraz widzisz różnicę między nimi, jeśli masz jakiekolwiek wątpliwości w tym temacie, możesz zapytać.
Dziękuję Ci.
Użytkownicy schematu i bazy danych są tacy sami, ale jeśli schemat jest właścicielem obiektów bazy danych i mogą wykonywać dowolne operacje na swoim obiekcie, ale użytkownik po prostu uzyskuje dostęp do obiektów, nie mogą wykonywać żadnych operacji DDL, dopóki użytkownik schematu nie da odpowiednich uprawnień.
Opierając się na mojej małej wiedzy na temat Oracle ... USER i SCHEMA są nieco podobne. Ale jest też duża różnica. UŻYTKOWNIK może być nazywany SCHEMATEM, jeśli „UŻYTKOWNIK” jest właścicielem dowolnego obiektu, w przeciwnym razie ... pozostanie tylko „UŻYTKOWNIKIEM”. Gdy UŻYTKOWNIK będzie właścicielem co najmniej jednego obiektu, na podstawie wszystkich powyższych definicji ... UŻYTKOWNIK może zostać teraz nazwany SCHEMATEM.
Użytkownik: dostęp do zasobu bazy danych. Jak klucz do domu.
Schemat: Zbieranie informacji o obiektach bazy danych. Podobnie jak indeks w książce, która zawiera krótkie informacje o rozdziale.
Dla większości osób, które są bardziej zaznajomione z MariaDB lub MySQL, wydaje się to trochę mylące, ponieważ w MariaDB lub MySQL mają różne schematy (obejmujące różne tabele, widok, bloki PLSQL i obiekty DB itp.), A UŻYTKOWNICY to konta, które mogą uzyskać do nich dostęp schemat. Dlatego żaden konkretny użytkownik nie może należeć do żadnego konkretnego schematu. Musi zostać udzielone uprawnienie do tego schematu, aby użytkownik mógł uzyskać do niego dostęp. Użytkownicy i schemat są oddzielone w bazach danych takich jak MySQL i MariaDB.
W schemacie Oracle użytkownicy są prawie traktowani tak samo. Aby pracować z tym schematem, musisz mieć uprawnienia, dzięki którym poczujesz, że nazwa schematu jest niczym innym jak nazwą użytkownika. W ramach schematów można nadawać uprawnienia na dostęp do różnych obiektów bazy danych z różnych schematów. W wyroczni możemy powiedzieć, że użytkownik jest właścicielem schematu, ponieważ kiedy tworzysz użytkownika, tworzysz dla niego obiekty DB i odwrotnie.
Schemat to kontener obiektów. Jest własnością użytkownika.
A
może mieć pełne uprawnienia administratora do schematu B
, ten drugi zawsze będzie własnością użytkownika B
, nawet jeśli nikt nigdy się nie zaloguje przy użyciu takiej nazwy użytkownika.
Cóż, czytałem gdzieś, że jeśli użytkownik bazy danych ma uprawnienia DDL, to jest to schemat, w przeciwnym razie to użytkownik.