Różnica między użytkownikiem a schematem w Oracle?


314

Jaka jest różnica między użytkownikiem a schematem w Oracle?


17
+1 Zawsze zastanawiałem się również nad tym rozróżnieniem: - /.
sleske,

9
Poniżej znajduje się ciekawy artykuł, który rozwiewa wszystkie wątpliwości: http://radiofreetooting.blogspot.com/2007/02/user-schema.html
Sandeep Jindal

9
Schematy Oracle są jak foldery Moje dokumenty w systemie operacyjnym Windows. Użytkownik może przyznać innym użytkownikom uprawnienia do wyświetlania elementów w ich schemacie. Schemat Oracle jest zasadniczo obszarem roboczym użytkownika.
Tarzan

3
Omówiono również na DBA: dba.stackexchange.com/questions/37012/… .

Odpowiedzi:


136

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.


47
Z tej samej strony: we wszystkich zamiarach i celach weź pod uwagę user = schema = user = schema = to samo.
sengs

4
Ale czy mogę mieć dwóch użytkowników korzystających z tego samego schematu?
John John Pichler

6
Jeśli masz na myśli „czy obiekty w jednym schemacie mogą być„ własnością ”wielu użytkowników”, odpowiedź brzmi „nie”. Jeśli masz na myśli „czy obiekty w jednym schemacie mogą być używane przez wielu użytkowników” odpowiedź brzmi: tak
Mahesh

95

Uważam, że problem polega na tym, że Oracle używa terminu „ schemat” nieco inaczej niż to, co ogólnie oznacza.

  1. Schemat Oracle (jak wyjaśniono w odpowiedzi Nebakanezera): w zasadzie zestaw wszystkich tabel i innych obiektów należących do konta użytkownika, co w przybliżeniu odpowiada kontu użytkownika
  2. Schemat w ogólności: zestaw wszystkich tabel, sprocków itp., Które tworzą bazę danych dla danego systemu / aplikacji (jak w „Deweloperzy powinni omówić z DBA informacje o schemacie dla naszej nowej aplikacji”).

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” ...


@djangofan Afaik to pytanie dotyczy Oracle, a nie MS SQL.
peterh - Przywróć Monikę

62

Z WikiAnswers :

  • Schemat to zbiór obiektów bazy danych, w tym struktur logicznych, takich jak tabele, widoki, sekwencje, procedury składowane, synonimy, indeksy, klastry i łącza do baz danych.
  • Użytkownik jest właścicielem schematu.
  • Użytkownik i schemat mają tę samą nazwę.
  • Polecenie CREATE USER tworzy użytkownika. Automatycznie tworzy również schemat dla tego użytkownika.
  • Polecenie CREATE SCHEMA nie tworzy „schematu”, jak sugeruje, pozwala jedynie na tworzenie wielu tabel i widoków oraz wykonywanie wielu grantów we własnym schemacie w ramach jednej transakcji.
  • Dla wszystkich celów i celów możesz uznać użytkownika za schemat, a schemat za użytkownika.

Ponadto użytkownik może uzyskać dostęp do obiektów w schematach innych niż własne, jeśli ma na to pozwolenie.


3
dobra uwaga na temat UTWÓRZ SCHEMAT - źle wybrana nazwa dla polecenia, jak sądzę!
Jeffrey Kemp,

4
„Polecenie CREATE SCHEMA nie tworzy„ schematu ”, jak to sugeruje”. Myślę, że 99% zamieszania wynika z tego. I ten fragment zdania bardzo dobrze to wyjaśnia. Dziękuję Ci.
granadaCoder


Myślę, że to najlepsza odpowiedź.
hagrawal

50

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”.


2
fajny opis, ale dlaczego użyłeś „foo” zarówno dla użytkownika, jak i schematu ?! Czy muszą być takie same?
JonnyRaa

W Oracle USER to nazwa konta, SCHEMA to zbiór obiektów należących do tego użytkownika. Mimo że Oracle tworzy obiekt SCHEMA jako część instrukcji CREATE USER, a SCHEMA ma taką samą nazwę jak USER, ale są one takie same. Oczywiście zamieszanie wynika częściowo z faktu, że pomiędzy USER a SCHEMA istnieje bezpośrednia korespondencja, a schemat użytkownika ma tę samą nazwę.
Mahesh,

17

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ście

Ta metoda wykorzystuje CURRENT_SCHEMAatrybut 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.


1
Uwaga: użycie ról może nie rozwiązać problemów z uprawnieniami do kodu PL / SQL. Przydziały obiektów do ról nie są propagowane w intuicyjny sposób po uruchomieniu procedur przechowywanych. Jednak głosowałem za odpowiedzią na tę odpowiedź, ponieważ takie podejście jest naprawdę świetne, ale jest mało znane i rzadko stosowane, o ile wiem.
Andrew Wolfe,

15

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.


1
W rzeczywistości zamieszanie powstaje, gdy ludzie dzwonią - użytkownik jest schematem. Ponieważ użytkownik może nie być schematem, jak wyjaśniono. Użytkownik może po prostu być użytkownikiem uzyskującym dostęp do innego schematu użytkownika.
Sandeep Jindal

3

Schemat jest enkapsulacją obiektów DB.object o idei / domenie intrest i jest własnością JEDNEGO użytkownika. Następnie będą udostępniane innym użytkownikom / aplikacjom z pominiętymi rolami. Dlatego użytkownicy nie muszą mieć schematu, ale schemat musi mieć właściciela.


1

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.


1

- 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.


0

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ń.


0

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.



0

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.


-1

Schemat to kontener obiektów. Jest własnością użytkownika.


1
Oznacza to, że użytkownik może posiadać wiele schematów. Nie wierzę, że to możliwe (w Oracle); chociaż użytkownik Amoż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.

-1

Cóż, czytałem gdzieś, że jeśli użytkownik bazy danych ma uprawnienia DDL, to jest to schemat, w przeciwnym razie to użytkownik.


Właściwie jest to użyteczne rozróżnienie - użytkownikom TWORZENIE privs w odróżnieniu od tych, bez TWORZENIE privs
Andrew Wolfe
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.