Oracle'da bir kullanıcı ile bir şema arasındaki fark nedir?
Oracle'da bir kullanıcı ile bir şema arasındaki fark nedir?
Yanıtlar:
Gönderen Tom sor
Bir şemayı, kullanıcı hesabı ve buradaki tüm nesnelerin toplanması, tüm amaç ve amaçlar için bir şema olarak düşünmelisiniz.
SCOTT, çeşitli hibelerle EMP, DEPT ve BONUS tablolarını ve diğer şeyleri içeren bir şemadır.
SYS, tonlarca tablo, görünüm, hibe vb. İçeren bir şemadır.
SİSTEM bir şemadır .....
Teknik olarak - Şema, veritabanı tarafından kullanılan ve genellikle DDL kullanılarak oluşturulan meta veri kümesidir (veri sözlüğü). Şema, veritabanının tablolar, sütunlar ve özellikler gibi niteliklerini tanımlar. Veritabanı şeması, veritabanındaki verilerin açıklamasıdır.
Sorun, Oracle'ın şema terimini genel olarak ne anlama geldiğinden biraz farklı kullandığına inanıyorum .
2. anlamda şema benzerdir, ancak 1. anlamda şema ile aynı değildir. Örneğin, birkaç DB hesabı kullanan bir uygulama için, 2. anlamda bir şema birkaç Oracle şemasından oluşabilir :-).
Ayrıca şema , diğer bağlamlarda (örn. Matematikte) bir sürü başka, ilgisiz şey anlamına da gelebilir.
Oracle, "şema" ya aşırı yüklenmek yerine "userarea" ya da "accountobjects" gibi bir terim kullanmış olmalı ...
Gönderen WikiAnswers :
Ayrıca, bir kullanıcı izinleri varsa kendi şemalarındaki nesnelere erişebilir.
Bir kullanıcıyı normalde yaptığınız gibi (sistemde oturum açmak ve sistemdeki bazı nesnelere erişime sahip kullanıcı adı / parola) ve şemayı kullanıcının ana dizininin veritabanı sürümü olarak düşünün. "Foo" kullanıcısı genellikle "foo" şeması altında bir şeyler oluşturur, örneğin "foo" kullanıcısı "bar" tablosunu oluşturuyor veya bu tabloya başvuruyorsa Oracle, kullanıcının "foo.bar" anlamına geldiğini varsayacaktır.
Bu cevap, bir sahip ve şema arasındaki farkı tanımlamıyor, ancak tartışmaya katkıda bulunduğunu düşünüyorum.
Benim küçük dünyamda:
Bu kullanıcıların her birinin tek bir şemayı "tüketmesini" (yani, kullanmasını) istediğim N sayıda kullanıcı oluşturduğum düşüncesi ile mücadele ettim.
Oracle-base.com'da Tim bunun nasıl yapılacağını gösterir (N kullanıcı sayısı vardır ve bu kullanıcıların her biri tek bir şemaya "yeniden yönlendirilecektir".
İkinci bir "eş anlamlı" yaklaşımı vardır (burada listelenmemiştir). Burada sadece CURRENT_SCHEMA sürümünü (yaklaşımlarından biri) alıntı yapıyorum:
CURRENT_SCHEMA
YaklaşmakBu yöntem,
CURRENT_SCHEMA
uygulama kullanıcılarını otomatik olarak doğru şemaya yönlendirmek için session özniteliğini kullanır .İlk olarak, şema sahibini ve bir uygulama kullanıcısını yaratırız.
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;
Uygulama kullanıcısının bağlanabildiğine, ancak nesne oluşturmak için herhangi bir tablo alanı kotasına veya ayrıcalığına sahip olmadığına dikkat edin.
Ardından, okuma-yazma ve salt okunur erişime izin vermek için bazı roller oluşturuyoruz.
CREATE ROLE schema_rw_role; CREATE ROLE schema_ro_role;
Uygulama kullanıcısına şema nesnelerine okuma-yazma erişimi vermek istiyoruz, bu nedenle ilgili rolü veriyoruz.
GRANT schema_rw_role TO app_user;
Uygulama kullanıcısının varsayılan şemasının şema sahibine işaret ettiğinden emin olmamız gerekir, bu nedenle bunu bizim için yapmak için AFTER LOGON tetikleyici oluştururuz.
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; /
Şimdi şema sahibinde bir nesne oluşturmaya hazırız.
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;
Ayrıcalıkların ilgili rollere nasıl verildiğine dikkat edin. Bu olmadan, nesneler uygulama kullanıcısı tarafından görülemez. Artık çalışan bir şema sahibimiz ve uygulama kullanıcısı var.
SQL> CONN app_user/password Connected. SQL> DESC test_tab Name Null? Type ----------------------------------------------------- -------- ------------------------------------ ID NOT NULL NUMBER DESCRIPTION VARCHAR2(50) SQL>
Bu yöntem, uygulama kullanıcısının ana şemaya basit bir alternatif giriş noktası olması ve kendi nesnesi gerektirmediği durumlarda idealdir.
Çok basit.
If USER has OBJECTS
then call it SCHEMA
else
call it USER
end if;
Bir kullanıcıya farklı Kullanıcılara ait şema nesnelerine erişim izni verilebilir.
Şema, bir fikir / etki alanı hakkında DB.objects'in kapsüllenmesidir ve bir kullanıcıya aittir. Daha sonra, bastırılmış rolleri olan diğer kullanıcılar / uygulamalar tarafından paylaşılacaktır. Bu nedenle kullanıcıların bir şemaya sahip olması gerekmez, ancak şemanın bir sahibi olması gerekir.
Bir kullanıcı hesabı, evinizin anahtarını tutan ancak hiçbir şeye sahip olmayan akrabalar gibidir, yani bir kullanıcı hesabının herhangi bir veritabanı nesnesi yok ... veri sözlüğü yok ...
Oysa bir şema veritabanı nesnelerinin kapsüllenmesidir. Evinizdeki her şeye sahip olan evin sahibi gibi ve bir kullanıcı hesabı evde mallara sadece sahibi yani şema gerekli hibeleri verdiğinde erişebilecektir.
--KULLANICI ve ŞEMA
Her iki kelime ve şema birbirinin yerine kullanılabilir, bu yüzden çoğu insan aşağıdaki bu kelimeler hakkında kafa karışıklığına neden oluyor
- Kullanıcı Kullanıcı veritabanı (Sunucu) bağlamak için bir hesaptır. CREATE USER kullanıcı_adı IDENTIFIED BY parolasını kullanarak kullanıcı oluşturabiliriz.
--Şema
Aslında Oracle Database, verileri işlemek için mantıksal ve fiziksel bir yapı içerir. Kullanıcı oluşturulduğunda oracle tarafından otomatik olarak oluşturulur. O şema ile ilişkili kullanıcı tarafından oluşturulan tüm nesneleri içerir. Örneğin santhosh adında bir kullanıcı oluşturduysam oracle santhosh adlı bir şema oluşturur, oracle santhosh kullanıcı santhosh tarafından oluşturulan tüm nesneleri depolar şema.
CREATE SCHEMA deyimiyle şema oluşturabiliriz, ancak Oracle Bu şema için otomatik olarak bir kullanıcı oluşturur.
DROP SCHEMA schama_name RESTRICT deyimini kullanarak şemayı Bırakabiliriz, ancak scehema nesneleri içerir, bu nedenle şemayı bırakmak için boş olmalıdır. Kısıtlama sözcüğü, şemayı dışarıdaki nesnelerle önceden belirtin.
Şemasında bir kullanıcı içeren nesneler bırakmaya çalışırsak, oracle kullanıcı içeren nesneleri silmenize izin vermediğinden CASCADE kelimesini belirtmeliyiz. DROP USER kullanıcı_adı CASCADE, böylece oracle şemadaki nesneleri siler ve daha sonra kullanıcıyı otomatik olarak düşürür, görünümler ve özel eşanlamlılar gibi diğer şemalardan bu şema nesnelerine atıfta bulunulan nesneler geçersiz duruma geçer.
Umarım şimdi aralarında bir fark vardır, bu konuda herhangi bir şüpheniz varsa, lütfen sormaya çekinmeyin.
Teşekkür ederim.
Oracle hakkındaki küçük bilgilerime dayanarak ... bir KULLANICI ve bir SCHEMA biraz benzer. Ama aynı zamanda büyük bir fark var. "KULLANICI" herhangi bir nesneye sahipse, KULLANICI SCHEMA olarak adlandırılabilir, aksi takdirde ... yalnızca "KULLANICI" olarak kalır. KULLANICI en az bir nesneye sahip olduktan sonra yukarıdaki tüm tanımlarınız sayesinde .... KULLANICI artık SCHEMA olarak adlandırılabilir.
Kullanıcı: Veritabanının kaynağına erişim. Bir eve girmek için bir anahtar gibi.
Şema: Veritabanı nesneleri hakkında bilgi toplama. Kitabınızdaki Bölümle ilgili kısa bilgileri içeren Dizin gibi.
MariaDB veya MySQL'e daha aşina olan çoğu insan için bu biraz kafa karıştırıcı görünüyor çünkü MariaDB veya MySQL'de farklı şemalara sahipler (farklı tablolar, görünüm, PLSQL blokları ve DB nesneleri vb.) Ve KULLANICILAR bunlara erişebilen hesaplardır şema. Bu nedenle, belirli bir kullanıcı belirli bir şemaya ait olamaz. Bu Şemaya izin verilmelidir, daha sonra kullanıcı buna erişebilir. Kullanıcılar ve Şema, MySQL ve MariaDB gibi veritabanlarında ayrılır.
Oracle şemasında ve kullanıcılara neredeyse aynı muamele edilir. Bu şema ile çalışmak için, şema adının kullanıcı adından başka bir şey olmadığını hissedeceğiniz izne sahip olmanız gerekir. Şemalar arasında, farklı şemadaki farklı veritabanı nesnelerine erişmek için izin verilebilir. Oracle içinde bir kullanıcının bir şemaya sahip olduğunu söyleyebiliriz çünkü bir kullanıcı oluşturduğunuzda bunun için DB nesneleri yaratırsınız ve bunun tersi de geçerlidir.
Şema bir nesne kabıdır. Bir kullanıcıya aittir.
Eh, bir yerde veritabanı kullanıcı DDL ayrıcalıkları varsa o zaman bu bir şema, başka bir kullanıcı okudum.