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


314

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


17
+1 Меня всегда интересовало и это различие: - /.
Слеск

9
Ниже приведена интересная статья, которая проясняет все сомнения: http://radiofreetooting.blogspot.com/2007/02/user-schema.html
Сандип Джиндал

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

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

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

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


@djangofan Afaik этот вопрос касается Oracle, а не MS SQL.
peterh - Восстановить Монику

62

От WikiAnswers :

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

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


3
Хорошая точка зрения CREATE SCHEMA - плохо выбранное имя для команды, я думаю!
Джеффри Кемп

4
Msgstr "Команда CREATE SCHEMA не создает" схему ", как это подразумевается". Я думаю, что 99% путаницы происходит от этого. И этот фрагмент предложения проясняет это очень хорошо. Спасибо.
granadaCoder


Я думаю, что это лучший ответ.
hagrawal

50

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


2
аккуратное описание, но почему вы использовали «foo» как для пользователя, так и для схемы ?! Должны ли они быть одинаковыми?
JonnyRaa

В Oracle USER - это имя учетной записи, SCHEMA - набор объектов, принадлежащих этому пользователю. Несмотря на то, что Oracle создает объект SCHEMA как часть оператора CREATE USER, а SCHEMA имеет то же имя, что и USER, но они отмечают одно и то же. Конечно, путаница отчасти связана с тем фактом, что между ПОЛЬЗОВАТЕЛЕМ и SCHEMA существует взаимно-однозначное соответствие, и схема пользователя разделяет свое имя.
Махеш

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;

Нам нужно убедиться, что у пользователя приложения есть схема по умолчанию, указывающая на владельца схемы, поэтому мы создадим триггер 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>

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


1
Обратите внимание, что использование ролей может не решить проблемы с разрешениями для кода PL / SQL. Предоставление ролям объектов не передается интуитивно понятным образом при запуске хранимых процедур. Тем не менее, я проголосовал за этот ответ, потому что этот подход действительно хорош, но он малоизвестен и редко используется, насколько я могу судить.
Эндрю Вульф

15

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

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

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


1
На самом деле, путаница возникает, когда люди звонят - Пользователь - это Схема. Как пользователь не может быть схема, как вы объяснили. Пользователь может просто быть пользователем, получающим доступ к схеме другого пользователя.
Сандип Джиндал

3

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


1

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

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


1

--USER и SCHEMA

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

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

--Schema

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

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

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

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

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

Спасибо.


0

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


0

Судя по моим небольшим знаниям об Oracle ... ПОЛЬЗОВАТЕЛЬ и СХЕМА несколько похожи. Но есть и большая разница. ПОЛЬЗОВАТЕЛЬ может называться СХЕМОЙ, если «ПОЛЬЗОВАТЕЛЬ» владеет каким-либо объектом, в противном случае ... он останется только «ПОЛЬЗОВАТЕЛЕМ». Если ПОЛЬЗОВАТЕЛЬ владеет хотя бы одним объектом, в силу всех приведенных выше определений ... ПОЛЬЗОВАТЕЛЬ теперь можно назвать СХЕМОЙ.


0

Пользователь: доступ к ресурсу базы данных. Как ключ, чтобы войти в дом.

Схема: Сбор информации об объектах базы данных. Как индекс в вашей книге, которая содержит краткую информацию о главе.

Смотрите здесь для деталей


0

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

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


-1

Схема - это контейнер объектов. Он принадлежит пользователю.


1
Это означает, что пользователь может иметь несколько схем. Я не верю, что это возможно (в Oracle); хотя пользователь Aможет иметь полные права администратора для схемы B, последняя всегда будет принадлежать пользователю B, даже если никто не войдет в систему с таким именем пользователя.

-1

Ну, я где-то читал, что если у пользователя вашей базы данных есть привилегии DDL, то это схема, иначе это пользователь.


Это на самом деле полезное различие - пользователи с привилегиями CREATE отличаются от тех, у кого нет привилегий CREATE
Эндрю Вулф,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.