Was ist der Unterschied zwischen einem Benutzer und einem Schema in Oracle?
Antworten
Zu viele Anzeigen?Von Fragen Sie Tom
Sie sollten ein Schema als das Benutzerkonto und die Sammlung aller darin enthaltenen Objekte betrachten als ein Schema für alle Zwecke.
SCOTT ist ein Schema, das die Tabellen EMP, DEPT und BONUS mit verschiedenen Zuschüssen enthält, und anderen Dingen.
SYS ist ein Schema, das eine Vielzahl von Tabellen, Ansichten, Berechtigungen usw. usw. enthält.
SYSTEM ist ein Schema.....
Technisch gesehen ist ein Schema der Satz von Metadaten (Datenwörterbuch), der von der Datenbank verwendet wird, typischerweise mit DDL erzeugt. Ein Schema definiert Attribute der Datenbank, wie z.B. Tabellen, Spalten und Eigenschaften. Ein Datenbankschema ist eine Beschreibung der Daten in einer Datenbank.
Ich glaube, das Problem ist, dass Oracle den Begriff Schema etwas anders, als es im Allgemeinen bedeutet.
- Oracles Schema (wie in der Antwort von Nebakanezer erläutert): im Grunde die Menge aller Tabellen und anderer Objekte, die einem Benutzerkonto gehören, entspricht also in etwa einem Benutzerkonto
- Schema im Allgemeinen: Die Menge aller Tabellen, Sprocs usw., aus denen die Datenbank für ein bestimmtes System/eine bestimmte Anwendung besteht (z. B. "Die Entwickler sollten mit den DBAs über das Schema für unsere neue Anwendung diskutieren.")
Schema im Sinne von 2. ist ähnlich, aber nicht dasselbe wie Schema im Sinne von 1. Für eine Anwendung, die mehrere DB-Konten verwendet, könnte ein Schema im Sinne von 2 aus mehreren Oracle-Schemata bestehen :-).
Plus Schema kann in anderen Zusammenhängen (z. B. in der Mathematik) auch eine Reihe von anderen, ziemlich unzusammenhängenden Dingen bedeuten.
Oracle hätte einfach einen Begriff wie "userarea" oder "accountobjects" verwenden sollen, anstatt "schema" zu überladen...
Von WikiAnswers :
- Ein Schema ist eine Sammlung von Datenbankobjekten, einschließlich logischer Strukturen wie Tabellen, Ansichten, Sequenzen, gespeicherten Prozeduren, Synonymen, Indizes, Clustern und Datenbankverbindungen.
- Ein Benutzer ist Eigentümer eines Schemas.
- Ein Benutzer und ein Schema haben den gleichen Namen.
- Mit dem Befehl CREATE USER wird ein Benutzer angelegt. Es wird auch automatisch ein Schema für diesen Benutzer erstellt.
- Der CREATE SCHEMA-Befehl erstellt kein "Schema", wie er impliziert, sondern ermöglicht es Ihnen lediglich, in einer einzigen Transaktion mehrere Tabellen und Ansichten zu erstellen und mehrere Zuweisungen in Ihrem eigenen Schema durchzuführen.
- Im Grunde genommen kann man einen Benutzer als Schema und ein Schema als Benutzer betrachten.
Darüber hinaus kann ein Benutzer auf Objekte in anderen Schemata als seinem eigenen zugreifen, wenn er dazu berechtigt ist.
Stellen Sie sich einen Benutzer so vor, wie Sie es normalerweise tun (Benutzername/Passwort mit dem Recht, sich anzumelden und auf einige Objekte im System zuzugreifen), und ein Schema als die Datenbankversion des Heimatverzeichnisses eines Benutzers. Der Benutzer "foo" erstellt im Allgemeinen Dinge unter dem Schema "foo". Wenn der Benutzer "foo" beispielsweise die Tabelle "bar" erstellt oder sich darauf bezieht, nimmt Oracle an, dass der Benutzer "foo.bar" meint.
In dieser Antwort wird der Unterschied zwischen einem Eigentümer und einem Schema nicht definiert, aber ich denke, sie trägt zur Diskussion bei.
In meiner kleinen Welt des Denkens:
Ich habe mit der Idee gekämpft, dass ich N Anzahl von Benutzern erstellen, wo ich möchte, dass jeder dieser Benutzer zu "konsumieren" (aka, verwenden) ein einzelnes Schema.
Tim auf oracle-base.com zeigt, wie man das macht (Sie haben N Benutzer und jeder dieser Benutzer wird an ein einzelnes Schema "umgeleitet".
Er hat einen zweiten "synonymen" Ansatz (hier nicht aufgeführt). Ich zitiere hier nur die CURRENT_SCHEMA-Version (einer seiner Ansätze):
CURRENT_SCHEMA
NäherungDiese Methode verwendet die
CURRENT_SCHEMA
s Anwendungsbenutzer auf das richtige Schema zu verweisen.Zunächst erstellen wir den Schemaeigentümer und einen Anwendungsbenutzer.
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;
Beachten Sie, dass der Benutzer der Anwendung die Möglichkeit hat Tablespace-Quotas oder Berechtigungen zum Erstellen von Objekten hat.
Als nächstes erstellen wir einige Rollen, um Lese- und Schreibzugriff zu ermöglichen.
CREATE ROLE schema_rw_role; CREATE ROLE schema_ro_role;
Wir wollen unserer Anwendung Benutzer-Lesezugriff geben. Objekte geben, also gewähren wir die entsprechende Rolle.
GRANT schema_rw_role TO app_user;
W auf den Schemaeigentümer verweist, also erstellen wir einen AFTER LOGON-Trigger, der dies für uns zu tun.
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; /
Jetzt können wir ein Objekt im Schemaeigentümer erstellen.
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;
Beachten Sie, wie die Berechtigungen den entsprechenden Rollen zugewiesen werden. Ohne wären die Objekte für den Anwendungsbenutzer nicht sichtbar. Wir haben jetzt einen funktionierenden Schemaeigentümer und Anwendungsbenutzer.
SQL> CONN app_user/password Connected. SQL> DESC test_tab Name Null? Type ----------------------------------------------------- -------- ------------------------------------ ID NOT NULL NUMBER DESCRIPTION VARCHAR2(50) SQL>
Diese Methode ist ideal, wenn die Anwendung alternativer Einstiegspunkt zum Hauptschema ist und keine eigenen Objekte benötigt eigene Objekte benötigt.
- See previous answers
- Weitere Antworten anzeigen