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

260

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

  • 16
    +1 Меня всегда интересовало и это различие: - /.
  • 9
    Ниже приведена интересная статья, которая устраняет все сомнения: http://radiofreetooting.blogspot.com/2007/02/user-schema.html
Показать ещё 2 комментария
Теги:

14 ответов

110
Лучший ответ

Из Спросить Tom

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

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

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

SYSTEM - это схема.....

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

  • 42
    С той же страницы: для всех намерений и целей просто рассмотрите user = schema = user = schema = то же самое.
  • 1
    Но могу ли я иметь двух пользователей, использующих одну и ту же схему?
Показать ещё 1 комментарий
79

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

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

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

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

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

  • 0
    @djangofan Afaik этот вопрос касается Oracle, а не MS MS.
49

Из WikiAnswers:

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

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

  • 3
    Хорошая точка зрения CREATE SCHEMA - плохо выбранное имя для команды, я думаю!
  • 4
    Msgstr "Команда CREATE SCHEMA не создает" схему ", как это подразумевается". Я думаю, что 99% путаницы происходит от этого. И этот фрагмент предложения проясняет это очень хорошо. Спасибо.
Показать ещё 2 комментария
44

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

  • 2
    точное описание, но почему вы использовали «foo» как для пользователя, так и для схемы ?! Должны ли они быть одинаковыми?
  • 0
    В Oracle USER - это имя учетной записи, SCHEMA - это набор объектов, принадлежащих этому пользователю. Хотя Oracle создает объект SCHEMA как часть оператора CREATE USER, а SCHEMA имеет то же имя, что и пользователь USER, но они отмечают одно и то же. Конечно, путаница частично связана с тем фактом, что между ПОЛЬЗОВАТЕЛЕМ и SCHEMA существует взаимно-однозначное соответствие, и схема пользователя разделяет свое имя.
15

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

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

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

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

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

CURRENT_SCHEMA Подход

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

Сначала мы создаем владельца схемы и пользователя приложения.

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. Предоставление ролям объектов не передается интуитивно понятным образом при выполнении хранимых процедур. Однако я проголосовал за этот ответ, потому что этот подход действительно хорош, но он малоизвестен и, насколько я могу судить, редко используется.
10

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

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

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

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

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

1

- USER и SCHEMA

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

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

- Схема

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

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

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

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

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

Спасибо.

0

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

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

0

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

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

Посмотрите подробнее

0

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

0

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

-1

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

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

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

  • 0
    Это действительно полезное различие - пользователи с CREATE privs отличаются от тех, у кого нет CREATE privs

Ещё вопросы

Сообщество Overcoder
Наверх
Меню