Unterschied zwischen einem Benutzer und einem Schema in Oracle?


314

Was ist der Unterschied zwischen einem Benutzer und einem Schema in Oracle?


17
+1 Ich habe mich auch immer über die Unterscheidung gewundert: - /.
Sleske

9
Es gibt einen interessanten Artikel unten, der alle Zweifel beseitigt
Sandeep Jindal

9
Oracle-Schemas ähneln den Ordnern "Eigene Dateien" im Windows-Betriebssystem. Ein Benutzer kann anderen Benutzern die Berechtigung erteilen, Dinge in ihrem Schema anzuzeigen. Das Oracle-Schema ist im Wesentlichen der Arbeitsbereich eines Benutzers.
Tarzan

3
Auch auf DBA besprochen: dba.stackexchange.com/questions/37012/… .

Antworten:


136

Von Ask Tom

Sie sollten ein Schema als Benutzerkonto und Sammlung aller darin enthaltenen Objekte als Schema für alle Absichten und Zwecke betrachten.

SCOTT ist ein Schema, das die Tabellen EMP, DEPT und BONUS mit verschiedenen Zuschüssen und anderen Dingen enthält.

SYS ist ein Schema, das Tonnen von Tabellen, Ansichten, Zuschüssen usw. usw. usw. enthält.

SYSTEM ist ein Schema .....

Technisch - Ein Schema ist der Satz von Metadaten (Datenwörterbuch), die von der Datenbank verwendet werden und normalerweise mit DDL generiert werden. Ein Schema definiert Attribute der Datenbank, z. B. Tabellen, Spalten und Eigenschaften. Ein Datenbankschema ist eine Beschreibung der Daten in einer Datenbank.


47
Von derselben Seite: Betrachten Sie für alle Absichten und Zwecke einfach user = schema = user = schema = dasselbe.
Sengs

4
Aber kann ich zwei Benutzer haben, die dasselbe Schema verwenden?
John John Pichler

6
Wenn Sie meinen, dass "Objekte in einem einzelnen Schema mehreren Benutzern gehören", lautet die Antwort "Nein". Wenn Sie meinen, "können Objekte in einem einzelnen Schema von mehreren Benutzern verwendet werden", lautet die Antwort mit Sicherheit "Ja
Mahesh,

95

Ich glaube, das Problem ist, dass Oracle den Begriff Schema etwas anders verwendet als allgemein.

  1. Oracle-Schema (wie in der Antwort von Nebakanezer erläutert): Im Grunde genommen die Menge aller Tabellen und anderen Objekte, die einem Benutzerkonto gehören, also ungefähr einem Benutzerkonto
  2. Schema im Allgemeinen: Die Menge aller Tabellen, Sprocs usw., aus denen die Datenbank für ein bestimmtes System / eine bestimmte Anwendung besteht (wie in "Entwickler sollten mit den Datenbankadministratoren über das Schema für unsere neue Anwendung diskutieren.")

Das Schema in Sinn 2 ist ähnlich, aber nicht dasselbe wie das Schema in Sinn 1. Beispielsweise kann ein Schema in Sinn 2 für eine Anwendung, die mehrere DB-Konten verwendet, aus mehreren Oracle-Schemas bestehen :-).

Plus- Schema kann auch eine Reihe anderer, ziemlich unabhängiger Dinge in anderen Kontexten bedeuten (z. B. in der Mathematik).

Oracle hätte nur einen Begriff wie "userarea" oder "accountobjects" verwenden sollen, anstatt "schema" zu überladen ...


@djangofan Afaik Diese Frage bezieht sich auf Oracle und nicht auf MS SQL.
Peter

62

Aus WikiAnswers :

  • Ein Schema ist eine Sammlung von Datenbankobjekten, einschließlich logischer Strukturen wie Tabellen, Ansichten, Sequenzen, gespeicherten Prozeduren, Synonymen, Indizes, Clustern und Datenbankverknüpfungen.
  • Ein Benutzer besitzt ein Schema.
  • Ein Benutzer und ein Schema haben denselben Namen.
  • Der Befehl CREATE USER erstellt einen Benutzer. Außerdem wird automatisch ein Schema für diesen Benutzer erstellt.
  • Der Befehl CREATE SCHEMA erstellt kein "Schema", wie es impliziert, sondern ermöglicht es Ihnen lediglich, mehrere Tabellen und Ansichten zu erstellen und mehrere Berechtigungen in Ihrem eigenen Schema in einer einzigen Transaktion auszuführen.
  • In jeder Hinsicht können Sie einen Benutzer als Schema und ein Schema als Benutzer betrachten.

Darüber hinaus kann ein Benutzer auf Objekte in anderen als ihren eigenen Schemas zugreifen, wenn er dazu berechtigt ist.


3
guter Punkt bezüglich CREATE SCHEMA - ein schlecht gewählter Name für den Befehl, denke ich!
Jeffrey Kemp

4
"Der Befehl CREATE SCHEMA erstellt kein" Schema ", wie es impliziert". Ich denke, 99% der Verwirrung kommt davon. Und dieses Satzfragment klärt es sehr gut auf. Vielen Dank.
GranadaCoder


Ich denke, das ist die beste Antwort.
Hagrawal

50

Stellen Sie sich einen Benutzer wie gewohnt vor (Benutzername / Kennwort mit Zugriff zum Anmelden und Zugriff auf einige Objekte im System) und ein Schema als Datenbankversion des Basisverzeichnisses eines Benutzers. Der Benutzer "foo" erstellt im Allgemeinen Dinge unter dem Schema "foo". Wenn der Benutzer "foo" beispielsweise die Tabelle "bar" erstellt oder auf diese verweist, geht Oracle davon aus, dass der Benutzer "foo.bar" bedeutet.


2
ordentliche Beschreibung, aber warum haben Sie "foo" sowohl für den Benutzer als auch für das Schema verwendet?! Müssen sie gleich sein?
JonnyRaa

In Oracle ist USER der Kontoname, SCHEMA die Gruppe von Objekten, die diesem Benutzer gehören. Obwohl Oracle das SCHEMA-Objekt als Teil der CREATE USER-Anweisung erstellt und das SCHEMA denselben Namen wie das USER hat, beachten sie dasselbe. Natürlich ist die Verwirrung teilweise darauf zurückzuführen, dass zwischen USER und SCHEMA eine Eins-zu-Eins-Korrespondenz besteht und das Schema eines Benutzers seinen Namen teilt.
Mahesh

17

Diese Antwort definiert nicht den Unterschied zwischen einem Eigentümer und einem Schema, aber ich denke, sie trägt zur Diskussion bei.

In meiner kleinen Denkwelt:

Ich habe mit der Idee zu kämpfen, dass ich N Benutzernummern erstelle, bei denen jeder dieser Benutzer ein einzelnes Schema "konsumieren" (auch bekannt als "verwenden") soll.

Tim auf oracle-base.com zeigt, wie das geht (N Benutzer haben und jeder dieser Benutzer wird in ein einzelnes Schema "umgeleitet".

Er hat einen zweiten "Synonym" -Ansatz (hier nicht aufgeführt). Ich zitiere hier nur die CURRENT_SCHEMA-Version (einen seiner Ansätze):

CURRENT_SCHEMA Ansatz

Diese Methode verwendet das CURRENT_SCHEMASitzungsattribut, um Anwendungsbenutzer automatisch auf das richtige Schema zu verweisen.

Zuerst erstellen wir den Schemabesitzer 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 Anwendungsbenutzer eine Verbindung herstellen kann, jedoch keine Tabellenbereichskontingente oder Berechtigungen zum Erstellen von Objekten hat.

Als Nächstes erstellen wir einige Rollen, um Lese- / Schreibzugriff und Nur-Lese-Zugriff zu ermöglichen.

CREATE ROLE schema_rw_role;
CREATE ROLE schema_ro_role;

Wir möchten unserem Anwendungsbenutzer Lese- und Schreibzugriff auf die Schemaobjekte gewähren, daher erteilen wir die entsprechende Rolle.

GRANT schema_rw_role TO app_user;

Wir müssen sicherstellen, dass der Standardschema des Anwendungsbenutzers auf den Schemabesitzer verweist. Daher erstellen wir einen AFTER LOGON-Trigger, um 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 relevanten Rollen gewährt werden. Ohne dies wären die Objekte für den Anwendungsbenutzer nicht sichtbar. Wir haben jetzt einen funktionierenden Schemabesitzer 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 der Anwendungsbenutzer lediglich ein alternativer Einstiegspunkt in das Hauptschema ist und keine eigenen Objekte benötigt.


1
Beachten Sie, dass durch die Verwendung von Rollen möglicherweise keine Berechtigungsprobleme für PL / SQL-Code behoben werden. Objektzuweisungen für Rollen werden beim Kompilieren gespeicherter Prozeduren nicht intuitiv weitergegeben. Ich habe diese Antwort jedoch positiv bewertet, da dieser Ansatz wirklich großartig ist, aber wenig bekannt ist und, soweit ich das beurteilen kann, nur selten verwendet wird.
Andrew Wolfe

15

Es ist sehr einfach.

If USER has OBJECTS
then call it SCHEMA
else
     call it USER
end if;

Ein Benutzer kann Zugriff auf Schemaobjekte erhalten, die verschiedenen Benutzern gehören.


1
Tatsächlich entsteht die Verwirrung, wenn Leute anrufen - Benutzer ist Schema. Als Benutzer kann nicht Schema sein, wie Sie erklärt haben. Ein Benutzer kann einfach ein Benutzer sein, der auf das Schema eines anderen Benutzers zugreift.
Sandeep Jindal

3

Schema ist eine Kapselung von DB-Objekten über eine Idee / Domäne von Interesse, die EINEM Benutzer gehört. Es wird dann von anderen Benutzern / Anwendungen mit unterdrückten Rollen geteilt. Benutzer müssen also kein Schema besitzen, aber ein Schema muss einen Eigentümer haben.


1

Ein Benutzerkonto ist wie ein Verwandter, der einen Schlüssel für Ihr Zuhause besitzt, aber nichts besitzt, dh ein Benutzerkonto besitzt kein Datenbankobjekt ... kein Datenwörterbuch ...

Während ein Schema eine Kapselung von Datenbankobjekten ist. Es ist so, als ob der Eigentümer des Hauses, der alles in Ihrem Haus besitzt und ein Benutzerkonto nur dann auf die Waren im Haus zugreifen kann, wenn der Eigentümer, dh das Schema, ihm die erforderlichen Zuschüsse gewährt.


1

- BENUTZER und SCHEMA

Die beiden Wörter Benutzer und Schema sind austauschbar. Deshalb sind die meisten Leute bei diesen Wörtern verwirrt. Ich habe den Unterschied zwischen ihnen erklärt

--Benutzer ist ein Konto zum Verbinden der Datenbank (Server). Wir können Benutzer erstellen, indem wir CREATE USER user_name IDENTIFIED BY password verwenden.

--Schema

Tatsächlich enthält die Oracle-Datenbank eine logische und physische Struktur zur Verarbeitung der Daten. Das Schema Auch eine logische Struktur zur Verarbeitung der Daten in der Datenbank (Speicherkomponente). Es wird automatisch von Oracle erstellt, wenn der Benutzer es erstellt hat. Es enthält alle Objekte, die von dem Benutzer erstellt wurden, der diesem Schema zugeordnet ist. Wenn ich beispielsweise einen Benutzer mit dem Namen Santhosh erstellt habe, erstellt Oracle ein Schema namens Santhosh. Oracle speichert alle vom Benutzer Santhosh erstellten Objekte in Santhosh Schema.

Wir können ein Schema mit der Anweisung CREATE SCHEMA erstellen, aber Oracle erstellt automatisch einen Benutzer für dieses Schema.

Wir können das Schema mit der Anweisung DROP SCHEMA schama_name RESTRICT löschen, aber es kann keine scehema-haltigen Objekte löschen. Um das Schema zu löschen, muss es leer sein. Hier gibt das Einschränkungswort dieses Schema ohne Objekte zwangsweise an.

Wenn wir versuchen, einen Benutzer zu löschen, der Objekte in seinem Schema enthält, müssen wir das Wort CASCADE angeben, da Oracle es Ihnen nicht erlaubt, Benutzer enthalten Objekte zu löschen. DROP USER Benutzername CASCADE, damit Oracle die Objekte im Schema löscht und den Benutzer dann automatisch löscht. Objekte, auf die auf dieses Schema verwiesen wird, Objekte aus anderen Schemata wie Ansichten und private Synonyme werden in den ungültigen Zustand versetzt.

Ich hoffe, jetzt haben Sie den Unterschied zwischen ihnen, wenn Sie irgendwelche Zweifel zu diesem Thema haben, zögern Sie nicht zu fragen.

Vielen Dank.


0

Ein Schema und Datenbankbenutzer sind identisch, aber wenn das Schema Datenbankobjekte besitzt und sie alles tun können, außer dass der Benutzer nur auf die Objekte zugreift, können sie keine DDL-Operationen ausführen, bis der Schemabenutzer Ihnen die richtigen Berechtigungen erteilt.


0

Aufgrund meiner geringen Oracle-Kenntnisse sind sich ein USER und ein SCHEMA ähnlich. Es gibt aber auch einen großen Unterschied. Ein USER kann als SCHEMA bezeichnet werden, wenn der "USER" ein Objekt besitzt, andernfalls bleibt es nur ein "USER". Sobald der BENUTZER mindestens ein Objekt besitzt, kann der BENUTZER aufgrund all Ihrer obigen Definitionen als SCHEMA bezeichnet werden.


0

Benutzer: Zugriff auf die Ressource der Datenbank. Wie ein Schlüssel, um ein Haus zu betreten.

Schema: Sammlung von Informationen zu Datenbankobjekten. Wie Index in Ihrem Buch, der die Kurzinformationen zum Kapitel enthält.

Schauen Sie hier für Details


0

Für die meisten Leute, die mit MariaDB oder MySQL besser vertraut sind, scheint dies wenig verwirrend, da sie in MariaDB oder MySQL unterschiedliche Schemata haben (einschließlich unterschiedlicher Tabellen, Ansichten, PLSQL-Blöcke und DB-Objekte usw.) und USERS die Konten sind, die auf diese zugreifen können Schema. Daher kann kein bestimmter Benutzer zu einem bestimmten Schema gehören. Die Berechtigung muss für dieses Schema erteilt werden, damit der Benutzer darauf zugreifen kann. Die Benutzer und das Schema sind in Datenbanken wie MySQL und MariaDB getrennt.

Im Oracle-Schema werden Benutzer und Benutzer fast gleich behandelt. Um mit diesem Schema arbeiten zu können, benötigen Sie die Berechtigung, mit der Sie das Gefühl haben, dass der Schemaname nichts anderes als ein Benutzername ist. Über Schemas hinweg können Berechtigungen für den Zugriff auf verschiedene Datenbankobjekte aus verschiedenen Schemata erteilt werden. In Oracle können wir sagen, dass ein Benutzer ein Schema besitzt, weil Sie beim Erstellen eines Benutzers DB-Objekte dafür erstellen und umgekehrt.


-1

Schema ist ein Container mit Objekten. Es gehört einem Benutzer.


1
Dies bedeutet, dass ein Benutzer mehrere Schemas besitzen kann. Ich glaube nicht, dass das möglich ist (in Oracle); während der Benutzer Avolle Administratorrechte über Schema haben kann B, wird dieser immer im Besitz von Benutzer B, auch wenn niemand jemals in mit einem solchen Benutzernamen anmeldet.

-1

Nun, ich habe irgendwo gelesen, dass wenn Ihr Datenbankbenutzer die DDL-Berechtigungen hat, es ein Schema ist, sonst ist es ein Benutzer.


Dies ist eigentlich eine nützliche Unterscheidung - Benutzer mit CREATE-Privilegien im Gegensatz zu denen ohne CREATE-Privilegien
Andrew Wolfe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.