Apa perbedaan antara pengguna dan skema di Oracle?
Apa perbedaan antara pengguna dan skema di Oracle?
Jawaban:
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.
Saya percaya masalahnya adalah bahwa Oracle menggunakan skema istilah yang sedikit berbeda dari apa yang secara umum berarti.
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" ...
Dari WikiAnswers :
Selain itu, pengguna dapat mengakses objek dalam skema selain milik mereka, jika mereka memiliki izin untuk melakukannya.
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".
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
PendekatanMetode 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.
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.
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.
--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.
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.
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.
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.
Skema adalah wadah benda. Dimiliki oleh pengguna.
A
mungkin 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.
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.