Різниця між користувачем і схемою в Oracle?


314

Чим відрізняється користувач від схеми в Oracle?


17
+1 Я також завжди цікавився відмінності: - /.
sleske

9
Нижче є цікава стаття, яка знімає всі сумніви: http://radiofreetooting.blogspot.com/2007/02/user-schema.html
Sandeep Jindal

9
Схеми Oracle схожі на папки "Мої документи" в ОС Windows. Користувач може надати дозволу іншим користувачам бачити речі у своїй схемі. Схема Oracle - це по суті робоча область користувача.
Тарзан

3
Крім того, обговорювалися на DBA: dba.stackexchange.com/questions/37012 / ... .

Відповіді:


136

З запитання Тома

Ви повинні розглядати схему як обліковий запис користувача та колекцію всіх об'єктів у ньому як схему для всіх намірів та цілей.

SCOTT - схема, що включає таблиці EMP, DEPT та BONUS з різними грантами та ін.

SYS - схема, яка включає в себе тонни таблиць, представлень даних, грантів тощо тощо тощо.

СИСТЕМА - схема .....

Технічно - схема - це набір метаданих (словник даних), що використовуються в базі даних, зазвичай генеруються за допомогою DDL. Схема визначає атрибути бази даних, такі як таблиці, стовпці та властивості. Схема бази даних - це опис даних у базі даних.


47
З тієї ж сторінки: для всіх намірів і цілей просто розгляньте user = schema = user = schema = те саме.
виходить

4
Але чи можу я мати двох користувачів, які використовують одну схему?
Джон Джон Піхлер

6
Якщо ви маєте на увазі "чи можуть об'єкти в одній схемі бути" власниками "декількох користувачів", відповідь - ні. Якщо ви маєте на увазі "чи можуть об'єкти в одній схемі використовувати декілька користувачів", відповідь, безумовно, так
Махеш

95

Я вважаю, що проблема полягає в тому, що Oracle використовує термін схему дещо інакше, ніж це означає.

  1. Схема Oracle (як пояснено у відповіді Nebakanezer): в основному набір усіх таблиць та інших об'єктів, що належать обліковому запису користувача, настільки еквівалентний обліковому запису користувача
  2. Схема взагалі: набір усіх таблиць, відростків тощо, які складають базу даних для даної системи / програми (як у "Розробники повинні обговорити з DBA про схему для нашої нової програми.")

Схема у значенні 2. схожа, але не така, як схема у сенсі 1. Наприклад, для програми, яка використовує кілька облікових записів БД, схема у сенсі 2 може складатися з декількох схем Oracle :-).

Плюс схема може також означати купу інших, досить непов’язаних речей в інших контекстах (наприклад, з математики).

Oracle повинен був просто використовувати такий термін, як "userarea" або "accountobjects", а не перевантажувати "схемою" ...


@djangofan Afaik це питання стосується Oracle, а не про MS SQL.
петерх

62

Від WikiAnswers :

  • Схема - це колекція об'єктів бази даних, включаючи логічні структури, такі як таблиці, представлення, послідовності, збережені процедури, синоніми, індекси, кластери та посилання на бази даних.
  • Користувачеві належить схема.
  • Користувач і схема мають одне ім’я.
  • Команда CREATE USER створює користувача. Він також автоматично створює схему для цього користувача.
  • Команда CREATE SCHEMA не створює "схеми", як це випливає, вона просто дозволяє створювати кілька таблиць і представлень та виконувати кілька грантів у вашій власній схемі за одну транзакцію.
  • Для всіх намірів і цілей ви можете вважати користувача схемою, а схемою - користувачем.

Крім того, користувач може отримати доступ до об'єктів в інших схемах, ніж їх власні, якщо він має дозвіл на це.


3
хороший пункт про СТВОРИТИ СХЕМУ - погано вибране ім’я для команди, яку я думаю!
Джеффрі Кемп

4
"Команда CREATE SCHEMA не створює" схему ", як це випливає". Я думаю, що 99% плутанини випливає з цього. І цей фрагмент речення дуже добре прояснює його. Дякую.
granadaCoder


Я думаю, що це найкраща відповідь.
Гагравал

50

Подумайте про користувача, як зазвичай (ім’я користувача / пароль з доступом до входу в систему та доступ до деяких об'єктів у системі) та схему як версію бази даних домашнього каталогу користувача. Користувач "foo", як правило, створює речі за схемою "foo", наприклад, якщо користувач "foo" створює або посилається на таблицю "bar", тоді Oracle вважатиме, що користувач означає "foo.bar".


2
акуратний опис, але чому ви використовували "foo" як для користувача, так і для схеми ?! Вони повинні бути однаковими?
JonnyRaa

В Oracle, USER - ім'я облікового запису, SCHEMA - це набір об'єктів, що належать цьому користувачеві. Незважаючи на те, що Oracle створює об'єкт SCHEMA як частину оператора CREATE USER, і SCHEMA має те саме ім'я, що і USER, але вони відзначають те саме. Звичайно, плутанина частково випливає з того, що між USER та SCHEMA існує відповідність один на один, і схема користувача поділяє його ім'я.
Mahesh

17

Ця відповідь не визначає різниці між власником і схемою, але я думаю, що це додає до дискусії.

У моєму маленькому світі мислення:

Я боровся з ідеєю, що я створю N кількість користувачів, де я хочу, щоб кожен із цих користувачів "споживав" (він же використовував) одну схему.

Тім на oracle-base.com показує, як це зробити (мати N кількість користувачів, і кожен з них буде "перенаправлений" на одну схему).

У нього є другий "синонімічний" підхід (тут не вказано). Я цитую лише версію CURRENT_SCHEMA (один із його підходів) тут:

CURRENT_SCHEMA Підхід

Цей метод використовує CURRENT_SCHEMAатрибут сеансу, щоб автоматично вказувати користувачів програми на правильну схему.

Спочатку ми створюємо власника схеми та користувача програми.

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;

Зауважте, що користувач програми може підключатися, але не має жодних квот або привілеїв для створення об’єктів.

Далі ми створюємо деякі ролі, щоб дозволити доступ для читання, запису та доступу лише для читання.

CREATE ROLE schema_rw_role;
CREATE ROLE schema_ro_role;

Ми хочемо надати користувачеві програми додаток для читання-запису на доступ до об'єктів схеми, тому ми надаємо відповідну роль.

GRANT schema_rw_role TO app_user;

Нам потрібно переконатися, що користувач програми має свою схему за замовчуванням, що вказує на власника схеми, тому ми створюємо ПІСЛЯ ЛОГОНУ, що робить це для нас.

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

Тепер ми готові створити об’єкт у власнику схеми.

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;

Зверніть увагу, як надаються пільги відповідним ролям. Без цього об’єкти не були б видимі користувачеві програми. Зараз у нас є діючий власник схеми та користувач програми.

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

SQL>

Цей метод ідеальний, коли користувач програми є просто альтернативною точкою входу до основної схеми, не вимагаючи власних об'єктів.


1
Зверніть увагу, що використання ролей може не вирішити проблеми з дозволом для PL / SQL-коду. Об'єктні гранти на ролі не розповсюджуються інтуїтивно зрозумілим чином при запуску збережених процедур. Однак я відповів на цю відповідь, оскільки такий підхід дійсно чудовий, але він маловідомий і використовується рідко, наскільки я можу сказати.
Ендрю Вулф

15

Це дуже просто.

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

Користувачеві може бути наданий доступ до об'єктів схеми, якими володіють різні Користувачі.


1
Насправді плутанина створюється, коли люди дзвонять - User is Schema. Оскільки у користувача може не бути схеми, як ви пояснили. Користувач може бути простим користувачем, який отримує доступ до якоїсь іншої схеми користувача.
Сандіп Джиндал

3

Схема - це інкапсуляція DB.objects про ідею / домен intrest та належить користувачеві ONE. Потім вони поділяться іншими користувачами / програмами з придушеними ролями. Таким чином, користувачам не потрібна схема, але схема повинна мати власника.


1

Обліковий запис користувача схожий на родичів, який тримає ключ від вашого будинку, але нічого не володіє, тобто обліковий запис користувача не володіє жодним об’єктом бази даних ... немає словника даних ...

Тоді як схема - це інкапсуляція об'єктів бази даних. Це як власник будинку, який володіє всім вашим будинком, і обліковий запис користувача зможе отримати доступ до товарів вдома лише тоді, коли власник, тобто схема, видасть на це необхідні гранти.


1

--USER та SCHEMA

Обидва слова користувач і схема взаємозамінні, ось чому більшість людей плутаються в цих словах нижче, і я пояснив різницю між ними

- Користувач Користувача - це обліковий запис для підключення бази даних (Сервер). ми можемо створити користувача, використовуючи CREATE USER ім'я користувача, ідентифікований паролем.

--Схема

Насправді база даних Oracle містить логічну та фізичну структуру для обробки даних. Схема також логічна структура для обробки даних у базі даних (компонент пам'яті). Його створено автоматично від oracle, коли користувач створений. Він містить усі об'єкти, створені користувачем, пов’язані з цією схемою. Наприклад, якщо я створив користувача з ім'ям santhosh, тоді oracle створює схему під назвою santhosh, oracle зберігає всі об'єкти, створені користувачем santhosh в santhosh схема.

Ми можемо створити схему за допомогою оператора CREATE SCHEMA, але Oracle автоматично створить користувача для цієї схеми.

Ми можемо відкинути схему за допомогою оператора DROP SCHEMA schama_name RESTRICT, але він не може видалити сцехему, що містить об'єкти, тому для скидання схеми вона повинна бути порожньою. Тут обмежене слово насильно вказує цю схему з об'єктами.

Якщо ми намагаємося відмовити користувачеві, що містить об'єкти у його схемі, ми повинні вказати слово CASCADE, оскільки oracle не дозволяє видалити об'єкти, що містять користувача. DROP USER ім'я користувача CASCADE, так що Oracle видаляє об'єкти в схемі, а потім автоматично відкидає користувача. Об'єкти, на які посилаються ці об’єкти схеми, з інших схем, як перегляди та приватні синоніми, переходять у недійсний стан.

Я сподіваюся, що тепер у вас є різниця між ними, якщо у вас є якісь сумніви щодо цієї теми, будь ласка, запитайте.

Дякую.


0

Користувачі схеми та бази даних однакові, але якщо схема має власні об’єкти бази даних, і вони можуть робити все, що завгодно, але користувач просто отримує доступ до об'єктів, вони не можуть робити жодних операцій DDL, поки користувач схеми не надасть належних привілеїв.


0

Виходячи з моїх незначних знань про Oracle ... користувач та SCHEMA дещо схожі. Але є і основна різниця. USER можна назвати SCHEMA, якщо "USER" володіє будь-яким об'єктом, інакше ... він залишається лише "USER". Після того, як ПОТРІБНИК володіє принаймні одним об'єктом, то в силу усіх ваших визначень вище .... ПОТРІБНИК тепер може називатися СХЕМА.


0

Користувач: доступ до ресурсу бази даних. Як ключ для входу в будинок.

Схема: Збір інформації про об’єкти бази даних. Як і індекс у вашій книзі, який містить коротку інформацію про главу.

Подивіться тут для деталей


0

Для більшості людей, які більше знайомі з MariaDB або MySQL, це здається мало заплутаним, оскільки в MariaDB або MySQL вони мають різні схеми (що включає різні таблиці, перегляд, блоки PLSQL та об'єкти DB тощо), а USERS - це акаунти, які можуть отримати доступ до цих схема. Тому жоден конкретний користувач не може належати до якоїсь конкретної схеми. Дозвіл має бути наданий цій схемі, тоді користувач може отримати доступ до неї. Користувачі та схема розділені в таких базах даних, як MySQL та MariaDB.

У схемі Oracle і користувачі майже трактуються як однакові. Для роботи з цією схемою вам потрібно мати дозвіл, де ви відчуєте, що ім'я схеми - це не що інше, як ім'я користувача. Дозволи можуть бути надані в різних схемах для доступу до різних об'єктів бази даних з різних схем. В оракулі можна сказати, що користувач має власну схему, оскільки при створенні користувача ви створюєте для нього об’єкти БД і навпаки.


-1

Схема - це контейнер з предметами. Він належить користувачеві.


1
Це означає, що користувач може володіти декількома схемами. Я не вірю, що це можливо (в Oracle); хоча користувач Aможе мати повні права адміністратора над схемою B, остання завжди буде власником користувача B, навіть якщо ніхто ніколи не входитиме з таким іменем користувача.

-1

Ну, я десь читав, що якщо користувач вашої бази даних має привілеї DDL, то це схема, інакше це користувач.


Це насправді корисна відмінність - користувачі із CREATE приватними приватними особами, відмінні від тих, у яких НЕ ТВОРЮТЬ приватні особи
Ендрю Вулф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.