Qual è la differenza tra un utente e uno schema in Oracle?
Qual è la differenza tra un utente e uno schema in Oracle?
Risposte:
Dovresti considerare uno schema come l'account utente e la raccolta di tutti gli oggetti in esso come uno schema a tutti gli effetti.
SCOTT è uno schema che include le tabelle EMP, DEPT e BONUS con varie concessioni e altre cose.
SYS è uno schema che include tonnellate di tabelle, viste, sovvenzioni, ecc. Ecc. Ecc.
SYSTEM è uno schema .....
Tecnicamente: uno schema è l'insieme di metadati (dizionario dei dati) utilizzato dal database, generalmente generato utilizzando DDL. Uno schema definisce gli attributi del database, come tabelle, colonne e proprietà. Uno schema di database è una descrizione dei dati in un database.
Credo che il problema sia che Oracle usa il termine schema in modo leggermente diverso da ciò che generalmente significa.
Lo schema in senso 2 è simile, ma non è lo stesso in senso 1. Ad esempio, per un'applicazione che utilizza diversi account DB, uno schema in senso 2 potrebbe essere costituito da diversi schemi Oracle :-).
Inoltre lo schema può anche significare un sacco di altre cose abbastanza non correlate in altri contesti (ad es. In matematica).
Oracle avrebbe dovuto usare un termine come "userarea" o "accountobjects", anziché sovraccaricare "schema" ...
Da WikiAnswers :
Inoltre, un utente può accedere ad oggetti in schemi diversi dal proprio, se ha il permesso di farlo.
Pensa a un utente come fai normalmente (nome utente / password con accesso per accedere e accedere ad alcuni oggetti nel sistema) e uno schema come la versione del database della home directory di un utente. L'utente "pippo" generalmente crea cose nello schema "pippo", ad esempio, se l'utente "pippo" crea o fa riferimento alla tabella "barra", Oracle supporrà che l'utente intenda "pippo.bar".
Questa risposta non definisce la differenza tra un proprietario e uno schema, ma penso che si aggiunga alla discussione.
Nel mio piccolo mondo di pensiero:
Ho lottato con l'idea di creare un numero N di utenti in cui desidero che ciascuno di essi "consumi" (ovvero utilizzi) un singolo schema.
Tim su oracle-base.com mostra come farlo (avere N numero di utenti e ognuno di questi utenti verrà "reindirizzato" a un singolo schema.
Ha un secondo approccio "sinonimo" (non elencato qui). Sto solo citando la versione CURRENT_SCHEMA (uno dei suoi approcci) qui:
CURRENT_SCHEMA
ApproccioQuesto metodo utilizza l'
CURRENT_SCHEMA
attributo di sessione per indirizzare automaticamente gli utenti dell'applicazione allo schema corretto.Innanzitutto, creiamo il proprietario dello schema e un utente dell'applicazione.
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;
Si noti che l'utente dell'applicazione può connettersi, ma non dispone di quote o privilegi di tablespace per creare oggetti.
Successivamente, creiamo alcuni ruoli per consentire l'accesso in lettura e scrittura e in sola lettura.
CREATE ROLE schema_rw_role; CREATE ROLE schema_ro_role;
Vogliamo dare ai nostri utenti dell'applicazione l'accesso in lettura e scrittura agli oggetti dello schema, quindi garantiamo il ruolo rilevante.
GRANT schema_rw_role TO app_user;
Dobbiamo assicurarci che l'utente dell'applicazione abbia il suo schema predefinito che punta al proprietario dello schema, quindi creiamo un trigger AFTER LOGON per farlo per noi.
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; /
Ora siamo pronti per creare un oggetto nel proprietario dello schema.
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;
Notare come i privilegi vengono concessi ai ruoli pertinenti. Senza questo, gli oggetti non sarebbero visibili all'utente dell'applicazione. Ora abbiamo un proprietario dello schema e un utente dell'applicazione funzionanti.
SQL> CONN app_user/password Connected. SQL> DESC test_tab Name Null? Type ----------------------------------------------------- -------- ------------------------------------ ID NOT NULL NUMBER DESCRIPTION VARCHAR2(50) SQL>
Questo metodo è ideale laddove l'utente dell'applicazione sia semplicemente un punto di ingresso alternativo allo schema principale, che non richiede oggetti propri.
È molto semplice.
If USER has OBJECTS
then call it SCHEMA
else
call it USER
end if;
Un utente può avere accesso agli oggetti dello schema di proprietà di diversi utenti.
Un account utente è come un parente che detiene una chiave di casa, ma non possiede nulla, ovvero un account utente non possiede alcun oggetto di database ... nessun dizionario di dati ...
Considerando che uno schema è un incapsulamento di oggetti di database. È come il proprietario della casa che possiede tutto nella tua casa e un account utente sarà in grado di accedere alle merci a casa solo quando il proprietario, cioè lo schema, le concede le sovvenzioni necessarie.
--USER e SCHEMA
Sia le parole utente che lo schema sono intercambiabili, ecco perché la maggior parte delle persone confonde su queste parole di seguito ho spiegato la differenza tra loro
- L'utente è un account per la connessione al database (server). possiamo creare l'utente usando CREATE USER nome_utente IDENTIFICATO DA password.
--Schema
In realtà Oracle Database contiene una struttura logica e fisica per elaborare i dati. Lo schema inoltre la struttura logica per elaborare i dati nel database (componente di memoria). È creato automaticamente da Oracle quando creato dall'utente. Contiene tutti gli oggetti creati dall'utente associato a quello schema. Ad esempio, se ho creato un utente con il nome santhosh, Oracle crea uno schema chiamato santhosh, oracle archivia tutti gli oggetti creati dall'utente santhosh in santhosh schema.
È possibile creare uno schema mediante l'istruzione CREATE SCHEMA, ma Oracle crea automaticamente un utente per quello schema.
È possibile eliminare lo schema utilizzando l'istruzione DROP SCHEMA nome_schama RESTRICT ma non è possibile eliminare scehema contiene oggetti, quindi per eliminare lo schema deve essere vuoto.qui la parola di limitazione specifica forzatamente quello schema senza oggetti.
Se proviamo a eliminare un utente contenente oggetti nel suo schema, dobbiamo specificare la parola CASCADE perché oracle non ti consente di eliminare gli oggetti utente contenuti. DROP USER nome_utente CASCADE, quindi l'oracolo elimina gli oggetti nello schema e quindi rilascia automaticamente l'utente, gli oggetti a cui si fa riferimento a questo schema da altri schemi come visualizzazioni e sinonimi privati passano allo stato non valido.
Spero che ora tu abbia la differenza tra loro, se hai dei dubbi su questo argomento, non esitare a chiedere.
Grazie.
Gli utenti di uno schema e di un database sono uguali ma se lo schema possiede oggetti di database e possono fare qualsiasi cosa il loro oggetto ma l'utente accede semplicemente agli oggetti, non possono fare alcuna operazione DDL fino a quando l'utente dello schema non ti dà i privilegi adeguati.
Sulla base della mia scarsa conoscenza di Oracle ... un USER e uno SCHEMA sono in qualche modo simili. Ma c'è anche una grande differenza. Un UTENTE può essere chiamato SCHEMA se "UTENTE" possiede un oggetto, altrimenti ... rimarrà solo un "UTENTE". Una volta che l'UTENTE possiede almeno un oggetto, in virtù di tutte le tue definizioni sopra ... l'UTENTE può ora essere chiamato SCHEMA.
Utente: accesso alla risorsa del database. Come una chiave per entrare in una casa.
Schema: raccolta di informazioni sugli oggetti del database. Come Index nel tuo libro che contiene le brevi informazioni sul capitolo.
Per la maggior parte delle persone che hanno più familiarità con MariaDB o MySQL questo sembra poco confuso perché in MariaDB o MySQL hanno schemi diversi (che include diverse tabelle, vista, blocchi PLSQL e oggetti DB ecc.) E gli UTENTI sono gli account che possono accedere a quelli schema. Pertanto, nessun utente specifico può appartenere a uno schema particolare. L'autorizzazione deve essere data a quello schema, quindi l'utente può accedervi. Gli utenti e lo schema sono separati in database come MySQL e MariaDB.
In Oracle schema e gli utenti sono quasi trattati allo stesso modo. Per lavorare con quello schema devi avere l'autorizzazione che è dove sentirai che il nome dello schema non è altro che il nome utente. Le autorizzazioni possono essere concesse attraverso schemi per accedere a diversi oggetti di database da schemi diversi. In Oracle possiamo dire che un utente possiede uno schema perché quando crei un utente crei oggetti DB per esso e viceversa.
Lo schema è un contenitore di oggetti. È di proprietà di un utente.
Bene, ho letto da qualche parte che se l'utente del tuo database ha i privilegi DDL, allora è uno schema, altrimenti è un utente.