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.
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.
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.
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
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” ...
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.
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.
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”.
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.
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.DROPUSER schema_owner CASCADE;DROPUSER app_user CASCADE;DROP ROLE schema_rw_role;DROP ROLE schema_ro_role;-- Schema owner.CREATEUSER schema_owner IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;GRANTCONNECT,CREATETABLETO schema_owner;-- Application user.CREATEUSER app_user IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;GRANTCONNECTTO 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.
CREATEOR REPLACE TRIGGER app_user.after_logon_trg
AFTER LOGON ON app_user.SCHEMABEGIN
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
CREATETABLE test_tab (
id NUMBER,
description VARCHAR2(50),CONSTRAINT test_tab_pk PRIMARYKEY(id));GRANTSELECTON test_tab TO schema_ro_role;GRANTSELECT,INSERT,UPDATE,DELETEON 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 NOTNULL 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.
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.
IfUSER has OBJECTS
then call it SCHEMAelse
call it USERendif;
Użytkownik może uzyskać dostęp do obiektów schematu należących do różnych użytkowników.
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.
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.
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ć.
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.
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.
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.
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.
źródło
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” ...
źródło
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.
źródło
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”.
źródło
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:
źródło
To jest bardzo proste.
Użytkownik może uzyskać dostęp do obiektów schematu należących do różnych użytkowników.
źródło
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.
źródło
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.
źródło
- 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.
źródło
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ń.
źródło
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.
źródło
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.
Spójrz tutaj po szczegóły
źródło
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.
źródło
Schemat to kontener obiektów. Jest własnością użytkownika.
źródło
A
może mieć pełne uprawnienia administratora do schematuB
, ten drugi zawsze będzie własnością użytkownikaB
, 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.
źródło