Разница между пользователем и схемой в Oracle? - PullRequest
296 голосов
/ 19 мая 2009

В чем разница между пользователем и схемой в Oracle?

Ответы [ 15 ]

126 голосов
/ 19 мая 2009

С Спроси Тома

Вы должны рассматривать схему как учетную запись пользователя и совокупность всех объектов в ней. как схема для всех намерений и целей.

SCOTT - это схема, включающая таблицы EMP, DEPT и BONUS с различными разрешениями, и другие вещи.

SYS - это схема, которая включает в себя множество таблиц, представлений, грантов и т. Д. И т. Д. И т. П.

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

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

93 голосов
/ 10 декабря 2009

Я считаю, что проблема в том, что Oracle использует термин схема немного по-другому, чем обычно.

  1. Схема Oracle (как объяснено в ответе Небаканезера): в основном набор всех таблиц и других объектов, принадлежащих учетной записи пользователя, поэтому примерно эквивалентен учетной записи пользователя
  2. Схема в целом: набор всех таблиц, sprocs и т. Д., Которые составляют базу данных для данной системы / приложения (как в «Разработчикам следует обсудить с администраторами баз данных схему для нашего нового приложения».)

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

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

Oracle должен был просто использовать термин "userarea" или "accountobjects" вместо перегрузки в "schema" ...

58 голосов
/ 19 мая 2009

От WikiAnswers :

  • Схема - это набор объектов базы данных, включая логические структуры, такие как таблицы, представления, последовательности, хранимые процедуры, синонимы, индексы, кластеры и ссылки на базы данных.
  • Пользователь владеет схемой.
  • Пользователь и схема имеют одно и то же имя.
  • Команда CREATE USER создает пользователя. Он также автоматически создает схему для этого пользователя.
  • Команда CREATE SCHEMA не создает «схему», как это подразумевается, она просто позволяет вам создавать несколько таблиц и представлений и выполнять несколько грантов в собственной схеме в одной транзакции.
  • Для всех намерений и целей вы можете считать пользователя схемой, а схему - пользователем.

Кроме того, пользователь может получить доступ к объектам в схемах, отличных от их собственной, если у него есть разрешение на это.

49 голосов
/ 19 мая 2009

Думайте о пользователе так, как вы это обычно делаете (имя пользователя / пароль с доступом для входа в систему и доступа к некоторым объектам в системе), а схему - как версию базы данных домашнего каталога пользователя. Пользователь "foo" обычно создает вещи по схеме "foo", например, если пользователь "foo" создает таблицу или ссылается на таблицу "bar", то Oracle будет считать, что пользователь имеет в виду "foo.bar".

17 голосов
/ 01 августа 2012

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

В моем маленьком мире мышления:

Я боролся с идеей, что я создаю 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;

Нам нужно убедиться, что у пользователя приложения есть схема по умолчанию указывая на владельца схемы, поэтому мы создаем триггер AFTER LOGON для сделай это для нас.

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>

Этот метод идеален, когда пользователь приложения просто альтернативная точка входа в основную схему, не требующая объектов свой.

14 голосов
/ 12 сентября 2012

Это очень просто.

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

Пользователю может быть предоставлен доступ к объектам схемы, принадлежащим разным пользователям.

3 голосов
/ 16 января 2014

Схема - это инкапсуляция объектов DB.object, связанных с идеей / областью интересов, и принадлежит ОДНОМУ пользователю. Затем он будет доступен другим пользователям / приложениям с подавленными ролями. Таким образом, пользователям не нужно владеть схемой, но у схемы должен быть владелец.

1 голос
/ 07 ноября 2016

- ПОЛЬЗОВАТЕЛЬ и СХЕМА

Оба слова пользователь и схема взаимозаменяемы, поэтому большинство людей путают эти слова ниже, я объяснил разницу между ними

- Пользователь Пользователь - это учетная запись для подключения к базе данных (Сервер). мы можем создать пользователя, используя CREATE USER имя_пользователя IDENTIFIED BY пароль.

- схема

На самом деле база данных Oracle содержит логические и физические структуры для обработки данных. Схема также логическая структура для обработки данных в базе данных (компонент памяти). Он создается автоматически oracle при создании пользователя. Содержит все объекты, созданные пользователем, связанным с этой схемой. Например, если я создал пользователя с именем santhosh, то oracle создает схему под названием santhosh, oracle сохраняет все объекты, созданные пользователем santhosh, в santhosh. схема.

Мы можем создать схему с помощью оператора CREATE SCHEMA, но Oracle автоматически создаст пользователя для этой схемы.

Мы можем отбросить схему, используя инструкцию RESTRICT DROP SCHEMA schama_name, но она не может удалить схему, содержащую объекты, поэтому для удаления схемы она должна быть пустой. Здесь ограничительное слово принудительно указывает эту схему без объектов.

Если мы пытаемся удалить пользователя, содержащего объекты в его схеме, мы должны указать слово CASCADE, потому что oracle не позволяет вам удалять объекты, содержащие пользователя. DROP USER user_name CASCADE поэтому oracle удаляет объекты в схеме, а затем автоматически удаляет пользователя. Объекты, на которые ссылаются объекты этой схемы из других схем, таких как представления и частные синонимы, переходят в недопустимое состояние.

Я надеюсь, что теперь у вас есть разница между ними, если у вас есть какие-либо сомнения по этой теме, пожалуйста, не стесняйтесь спрашивать.

Спасибо.

0 голосов
/ 26 апреля 2018

Для большинства людей, которые более знакомы с MariaDB или MySQL, это немного сбивает с толку, потому что в MariaDB или MySQL у них разные схемы (которые включают в себя разные таблицы, представление, блоки PLSQL, объекты БД и т. Д.), А пользователи - это учетные записи, которые может получить доступ к этим схемам. Поэтому ни один конкретный пользователь не может принадлежать какой-либо конкретной схеме. Разрешение должно быть дано этой Схеме, чтобы пользователь мог получить к ней доступ. Пользователи и схема разделены в базах данных, таких как MySQL и MariaDB.

В Oracle схемы и пользователи практически рассматриваются как одинаковые. Для работы с этой схемой вам нужно иметь разрешение, в котором вы почувствуете, что имя схемы - это не что иное, как имя пользователя. Разрешения могут быть предоставлены различным схемам для доступа к различным объектам базы данных из другой схемы. В Oracle можно сказать, что пользователь владеет схемой, потому что, когда вы создаете пользователя, вы создаете для него объекты БД и наоборот.

0 голосов
/ 21 июня 2016

Учетная запись пользователя похожа на родственников, у которых есть ключ от вашего дома, но ничего не принадлежит, т. Е. Учетная запись пользователя не владеет ни одним объектом базы данных ... нет словаря данных ...

Принимая во внимание, что схема - это инкапсуляция объектов базы данных. Это похоже на владельца дома, который владеет всем в вашем доме, и учетная запись пользователя сможет получить доступ к товарам дома только тогда, когда владелец, т. Е. Схема, предоставит ему необходимые гранты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...