Perbedaan antara pengguna dan skema di Oracle?

314

Apa perbedaan antara pengguna dan skema di Oracle?

seng
sumber
17
+1 Saya selalu bertanya-tanya tentang perbedaannya juga: - /.
sleske
9
Ada artikel yang menarik di bawah ini yang menghapus semua keraguan: http://radiofreetooting.blogspot.com/2007/02/user-schema.html
Sandeep Jindal
9
Skema Oracle seperti folder My Documents di OS Windows. Seorang pengguna dapat memberikan izin kepada pengguna lain untuk melihat sesuatu dalam skema mereka. Skema Oracle pada dasarnya adalah ruang kerja pengguna.
Tarzan

Jawaban:

136

Dari Ask Tom

Anda harus mempertimbangkan skema sebagai akun pengguna dan koleksi semua objek di dalamnya sebagai skema untuk semua maksud dan tujuan.

SCOTT adalah skema yang mencakup tabel EMP, DEPT dan BONUS dengan berbagai hibah, dan hal-hal lainnya.

SYS adalah skema yang mencakup banyak tabel, tampilan, hibah, dll. Dll.

SISTEM adalah skema .....

Secara teknis - Skema adalah himpunan metadata (kamus data) yang digunakan oleh database, biasanya dihasilkan menggunakan DDL. Skema mendefinisikan atribut dari database, seperti tabel, kolom, dan properti. Skema basis data adalah deskripsi data dalam basis data.

Mark Sherretta
sumber
47
Dari halaman yang sama: untuk semua maksud dan tujuan hanya mempertimbangkan pengguna = skema = pengguna = skema = hal yang sama.
sengs
4
Tetapi bisakah saya memiliki dua pengguna menggunakan skema yang sama?
John John Pichler
6
Jika Anda maksudkan "dapatkah objek dalam satu skema dapat 'dimiliki' oleh banyak pengguna" jawabannya adalah TIDAK. Jika Anda bermaksud "dapatkah objek dalam skema tunggal digunakan oleh banyak pengguna" jawabannya pasti Ya
Mahesh
95

Saya percaya masalahnya adalah bahwa Oracle menggunakan skema istilah yang sedikit berbeda dari apa yang secara umum berarti.

  1. Skema Oracle (seperti yang dijelaskan dalam jawaban Nebakanezer): pada dasarnya himpunan semua tabel dan objek lain yang dimiliki oleh akun pengguna, jadi kira-kira setara dengan akun pengguna
  2. Skema secara umum: Himpunan semua tabel, sprocs dll. Yang membentuk database untuk sistem / aplikasi tertentu (seperti dalam "Pengembang harus berdiskusi dengan DBA tentang skema untuk aplikasi baru kami.")

Skema dalam arti 2. mirip, tetapi tidak sama dengan skema dalam arti 1. Misalnya untuk aplikasi yang menggunakan beberapa akun DB, skema dalam arti 2 mungkin terdiri dari beberapa skema Oracle :-).

Skema plus juga dapat berarti banyak hal lain yang tidak berhubungan dalam konteks lain (misalnya dalam matematika).

Oracle seharusnya hanya menggunakan istilah seperti "userarea" atau "accountobjects", bukannya kelebihan "skema" ...

sleske
sumber
@djangofan Afaik pertanyaan ini adalah tentang Oracle, dan bukan tentang MS SQL.
peterh
62

Dari WikiAnswers :

  • Skema adalah kumpulan objek database, termasuk struktur logis seperti tabel, tampilan, urutan, prosedur tersimpan, sinonim, indeks, cluster, dan tautan basis data.
  • Seorang pengguna memiliki skema.
  • Pengguna dan skema memiliki nama yang sama.
  • Perintah CREATE USER membuat pengguna. Itu juga secara otomatis membuat skema untuk pengguna itu.
  • Perintah CREATE SCHEMA tidak membuat "skema" seperti yang tersirat, itu hanya memungkinkan Anda untuk membuat beberapa tabel dan tampilan dan melakukan beberapa hibah dalam skema Anda sendiri dalam satu transaksi.
  • Untuk semua maksud dan tujuan, Anda dapat mempertimbangkan pengguna sebagai skema dan skema sebagai pengguna.

Selain itu, pengguna dapat mengakses objek dalam skema selain milik mereka, jika mereka memiliki izin untuk melakukannya.

harto
sumber
3
poin bagus buat BUAT SKEMA - nama yang salah pilih untuk perintah yang saya pikir!
Jeffrey Kemp
4
"Perintah CREATE SCHEMA tidak membuat" skema "seperti yang tersirat". Saya pikir 99% kebingungan berasal dari ini. Dan fragmen kalimat ini membersihkannya dengan sangat baik. Terima kasih.
granadaCoder
3
Catatan tentang CREATE SCHEMA: "Oracle memilikinya karena standar ANSI mengatakan harus ada di sana."
user123444555621
Saya pikir ini adalah jawaban terbaik.
hagrawal
50

Pikirkan pengguna seperti yang biasa Anda lakukan (nama pengguna / kata sandi dengan akses untuk masuk dan mengakses beberapa objek dalam sistem) dan skema sebagai versi database dari direktori home pengguna. Pengguna "foo" umumnya membuat hal-hal di bawah skema "foo" misalnya, jika pengguna "foo" membuat atau merujuk ke tabel "bar" maka Oracle akan menganggap bahwa pengguna berarti "foo.bar".

Andru Luvisi
sumber
2
deskripsi rapi tetapi mengapa Anda menggunakan "foo" untuk pengguna dan skema ?! Apakah mereka harus sama?
JonnyRaa
Di Oracle, USER adalah nama akun, SCHEMA adalah sekumpulan objek yang dimiliki oleh pengguna itu. Meskipun, Oracle menciptakan objek SCHEMA sebagai bagian dari pernyataan CREATE USER dan SCHEMA memiliki nama yang sama dengan USER tetapi mereka mencatat hal yang sama. Tentu saja, kebingungan sebagian berasal dari fakta bahwa ada korespondensi satu-ke-satu antara USER dan SCHEMA, dan skema pengguna membagikan namanya.
Mahesh
17

Jawaban ini tidak mendefinisikan perbedaan antara pemilik dan skema, tetapi saya pikir itu menambah diskusi.

Dalam dunia berpikir kecil saya:

Saya telah berjuang dengan gagasan bahwa saya membuat N jumlah pengguna di mana saya ingin masing-masing pengguna untuk "mengkonsumsi" (alias, gunakan) skema tunggal.

Tim di oracle-base.com menunjukkan cara melakukan ini (memiliki N jumlah pengguna dan masing-masing pengguna ini akan "dialihkan" ke satu skema tunggal.

Dia memiliki pendekatan "sinonim" kedua (tidak tercantum di sini). Saya hanya mengutip versi CURRENT_SCHEMA (salah satu pendekatannya) di sini:

CURRENT_SCHEMA Pendekatan

Metode ini menggunakan CURRENT_SCHEMA atribut sesi untuk secara otomatis mengarahkan pengguna aplikasi ke skema yang benar.

Pertama, kami membuat pemilik skema dan pengguna aplikasi.

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;

Perhatikan bahwa pengguna aplikasi dapat terhubung, tetapi tidak memiliki kuota tablespace atau hak istimewa untuk membuat objek.

Selanjutnya, kami membuat beberapa peran untuk memungkinkan akses baca-tulis dan baca-saja.

CREATE ROLE schema_rw_role;
CREATE ROLE schema_ro_role;

Kami ingin memberikan akses baca-tulis kepada pengguna aplikasi kami ke objek skema, jadi kami memberikan peran yang relevan.

GRANT schema_rw_role TO app_user;

Kami perlu memastikan pengguna aplikasi memiliki skema default yang menunjuk ke pemilik skema, jadi kami membuat pemicu SETELAH LOGON untuk melakukan ini untuk kami.

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;
/

Sekarang kita siap untuk membuat objek di pemilik skema.

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;

Perhatikan bagaimana hak istimewa diberikan kepada peran yang relevan. Tanpa ini, objek tidak akan terlihat oleh pengguna aplikasi. Kami sekarang memiliki pemilik skema yang berfungsi dan pengguna aplikasi.

SQL> CONN app_user/password
Connected.
SQL> DESC test_tab
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------------------------------
 ID                                                    NOT NULL NUMBER
 DESCRIPTION                                                    VARCHAR2(50)

SQL>

Metode ini sangat ideal di mana pengguna aplikasi hanyalah titik masuk alternatif ke skema utama, tidak memerlukan objek sendiri.

granadaCoder
sumber
1
Perhatikan bahwa penggunaan peran mungkin tidak menyelesaikan masalah izin untuk kode PL / SQL. Pemberian objek ke peran tidak disebarkan secara intuitif saat prosedur yang tersimpan dikompilasi dijalankan. Namun, saya memilih jawaban ini karena pendekatan ini benar-benar hebat, tetapi sedikit diketahui dan jarang digunakan sejauh yang saya tahu.
Andrew Wolfe
15

Ini sangat sederhana.

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

Seorang pengguna dapat diberikan akses ke objek skema yang dimiliki oleh Pengguna yang berbeda.

akan
sumber
1
Sebenarnya kebingungan dibuat ketika orang memanggil - Pengguna adalah Skema. Sebagai pengguna mungkin bukan skema seperti yang Anda jelaskan. Pengguna bisa saja menjadi pengguna yang mengakses beberapa Skema Pengguna lain.
Sandeep Jindal
3

Skema adalah enkapsulasi dari DB. Objek tentang ide / domain minat, dan dimiliki oleh SATU pengguna. Ini kemudian akan dibagikan oleh pengguna / aplikasi lain dengan peran yang ditekan. Jadi pengguna tidak perlu memiliki skema, tetapi skema perlu memiliki pemilik.

Sudheer
sumber
1

Akun pengguna seperti kerabat yang memegang kunci ke rumah Anda, tetapi tidak memiliki apa pun yaitu akun pengguna tidak memiliki objek basis data ... tidak ada kamus data ...

Sedangkan skema adalah enkapsulasi objek database. Ini seperti pemilik rumah yang memiliki semua yang ada di rumah Anda dan akun pengguna akan dapat mengakses barang-barang di rumah hanya ketika pemilik yaitu skema memberikan hibah yang diperlukan untuk itu.

Prashant Mishra
sumber
1

--USER dan SKEMA

Skema kata dan pengguna keduanya saling dipertukarkan, itulah sebabnya kebanyakan orang bingung dengan kata-kata di bawah ini. Saya menjelaskan perbedaan di antara mereka.

- Pengguna Pengguna adalah akun untuk menghubungkan basis data (Server). kita dapat membuat pengguna dengan menggunakan CREATE USER user_name IDENTIFIED BY password.

--Skema

Sebenarnya Oracle Database mengandung strucutre logis dan fisik untuk memproses data. Skema Juga Struktur Logis untuk memproses data dalam Database (Komponen Memori). Diciptakan secara otomatis oleh oracle ketika pengguna membuat. Ini Berisi Semua Objek yang dibuat oleh pengguna yang terkait dengan skema itu. Misalnya, jika saya membuat pengguna dengan nama santhosh maka oracle menciptakan skema yang disebut santhosh, oracle menyimpan semua objek yang dibuat oleh pengguna santhosh dalam santhosh skema.

Kita dapat membuat skema berdasarkan pernyataan CREATE SCHEMA, tetapi Oracle secara otomatis membuat pengguna untuk skema itu.

Kita dapat Drop skema dengan menggunakan DROP schema schama_name pernyataan RESTRICT tetapi tidak dapat menghapus scehema berisi objek, jadi untuk menjatuhkan skema itu harus kosong.

Jika kami mencoba menjatuhkan pengguna yang berisi objek dalam skemanya, kami harus menentukan kata CASCADE karena oracle tidak memungkinkan Anda menghapus objek yang berisi pengguna. KURANGI PENGGUNA user_name CASCADE sehingga oracle menghapus objek dalam skema dan kemudian menjatuhkan pengguna secara otomatis, Objek merujuk ke objek skema ini dari skema lain seperti tampilan dan sinonim pribadi pergi ke keadaan tidak valid.

Saya harap sekarang Anda memiliki perbedaan di antara mereka, jika Anda memiliki keraguan tentang topik ini, jangan ragu untuk bertanya.

Terima kasih.

SanthoshReddy
sumber
0

Seorang pengguna skema dan basis data sama tetapi jika skema memiliki objek basis data dan mereka dapat melakukan apa saja objek mereka tetapi pengguna hanya mengakses objek, Mereka tidak dapat MELAKUKAN operasi DDL sampai pengguna skema memberi Anda hak istimewa yang tepat.

sabari
sumber
0

Berdasarkan sedikit pengetahuan saya tentang Oracle ... USER dan SCHEMA agak mirip. Tetapi ada juga perbedaan besar. PENGGUNA dapat disebut SCHEMA jika "PENGGUNA" memiliki objek, jika tidak ... itu hanya akan tetap menjadi "PENGGUNA". Setelah PENGGUNA memiliki setidaknya satu objek maka berdasarkan semua definisi Anda di atas .... PENGGUNA sekarang dapat disebut SCHEMA.

JOHNNIE
sumber
0

Pengguna: Akses ke sumber daya database. Seperti kunci untuk memasuki rumah.

Skema: Pengumpulan informasi tentang objek basis data. Sukai Indeks dalam buku Anda yang berisi informasi singkat tentang bab ini.

Lihat di sini untuk detailnya

ENERGETIK VINOTH
sumber
0

Bagi sebagian besar orang yang lebih akrab dengan MariaDB atau MySQL, ini tampaknya sedikit membingungkan karena di MariaDB atau MySQL mereka memiliki skema yang berbeda (yang meliputi tabel yang berbeda, tampilan, blok PLSQL dan objek DB dll) dan PENGGUNA adalah akun yang dapat mengakses skema. Karena itu, tidak ada pengguna tertentu yang dapat menjadi bagian dari skema tertentu. Izin harus diberikan kepada Skema itu sehingga pengguna dapat mengaksesnya. Para Pengguna dan Skema dipisahkan dalam database seperti MySQL dan MariaDB.

Dalam skema Oracle dan pengguna hampir diperlakukan sama. Untuk bekerja dengan skema itu, Anda harus memiliki izin di mana Anda akan merasa bahwa nama skema itu tidak lain adalah nama pengguna. Izin dapat diberikan lintas skema untuk mengakses objek basis data yang berbeda dari skema berbeda. Di oracle kita dapat mengatakan bahwa pengguna memiliki skema karena ketika Anda membuat pengguna, Anda membuat objek DB untuk itu dan sebaliknya.

pritampanhale
sumber
-1

Skema adalah wadah benda. Dimiliki oleh pengguna.

Menjawab
sumber
1
Itu menyiratkan bahwa pengguna dapat memiliki beberapa skema. Saya tidak percaya itu mungkin (dalam Oracle); sementara pengguna Amungkin memiliki hak admin penuh atas skema B, yang terakhir akan selalu dimiliki oleh pengguna B, bahkan jika tidak ada yang pernah login dengan nama pengguna tersebut.
-1

Yah, saya membaca di suatu tempat bahwa jika pengguna basis data Anda memiliki hak istimewa DDL maka itu adalah skema, kalau tidak itu adalah pengguna.

Sandeep
sumber
Ini sebenarnya perbedaan yang berguna - pengguna dengan CREATE privs berbeda dari mereka yang tidak CREATE privs
Andrew Wolfe