В чем разница между пользователем и схемой в Oracle?
В чем разница между пользователем и схемой в Oracle?
Ответы:
От Спроси Тома
Вы должны рассматривать схему как учетную запись пользователя, а совокупность всех объектов в ней - как схему для всех намерений и целей.
SCOTT - это схема, которая включает в себя таблицы EMP, DEPT и BONUS с различными грантами и другие вещи.
SYS - это схема, которая включает в себя множество таблиц, представлений, грантов и т. Д. И т. Д. И т. Д.
СИСТЕМА это схема .....
Технически - схема - это набор метаданных (словарь данных), используемых базой данных, обычно генерируемых с использованием DDL. Схема определяет атрибуты базы данных, такие как таблицы, столбцы и свойства. Схема базы данных - это описание данных в базе данных.
Я считаю, что проблема заключается в том, что Oracle использует термин « схема» несколько иначе, чем он обычно означает.
Схема в смысле 2. похожа, но не совпадает со схемой в смысле 1. Например, для приложения, использующего несколько учетных записей БД, схема в смысле 2 может состоять из нескольких схем Oracle :-).
Плюс схема может также означать кучу других, довольно не связанных между собой вещей в других контекстах (например, в математике).
Oracle должен был просто использовать термин «userarea» или «accountobjects» вместо перегрузки в «schema» ...
От WikiAnswers :
Кроме того, пользователь может получить доступ к объектам в схемах, отличных от их собственных, если у него есть разрешение на это.
Думайте о пользователе так, как вы это обычно делаете (имя пользователя / пароль с доступом для входа в систему и доступа к некоторым объектам в системе), а схема - как версия базы данных домашнего каталога пользователя. Пользователь "foo" обычно создает вещи по схеме "foo", например, если пользователь "foo" создает таблицу или ссылается на таблицу "bar", то Oracle будет считать, что пользователь имеет в виду "foo.bar".
Этот ответ не определяет разницу между владельцем и схемой, но я думаю, что он добавляет к обсуждению.
В моем маленьком мире мышления:
Я боролся с идеей, что я создаю 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>
Этот метод идеален, когда пользователь приложения является просто альтернативной точкой входа в основную схему, не требующей собственных объектов.
Это очень просто.
If USER has OBJECTS
then call it SCHEMA
else
call it USER
end if;
Пользователю может быть предоставлен доступ к объектам схемы, принадлежащим разным пользователям.
Схема - это инкапсуляция объектов DB.object, связанных с идеей / областью интересов и принадлежащих ОДНОМУ пользователю. Затем он будет доступен другим пользователям / приложениям с подавленными ролями. Таким образом, пользователям не нужно владеть схемой, но у схемы должен быть владелец.
Учетная запись пользователя похожа на родственников, которые владеют ключом от вашего дома, но ничего не владеют, т. Е. Учетная запись пользователя не владеет ни одним объектом базы данных ... нет словаря данных ...
В то время как схема представляет собой инкапсуляцию объектов базы данных. Это похоже на владельца дома, который владеет всем в вашем доме, и учетная запись пользователя сможет получить доступ к товарам дома только тогда, когда владелец, т. Е. Схема, предоставит ему необходимые гранты.
--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 удаляет объекты в схеме, а затем автоматически удаляет пользователя. Объекты, на которые ссылается эта схема, из других схем, таких как представления и частные синонимы, переходят в недопустимое состояние.
Я надеюсь, что теперь у вас есть разница между ними, если у вас есть какие-либо сомнения по этой теме, пожалуйста, не стесняйтесь спрашивать.
Спасибо.
Пользователи схемы и базы данных одинаковы, но если у схемы есть собственные объекты базы данных, и они могут делать с объектами все что угодно, но пользователь просто получает доступ к объектам, они не могут выполнять никаких операций DDL, пока пользователь схемы не предоставит вам надлежащие привилегии.
Судя по моим небольшим знаниям об Oracle ... ПОЛЬЗОВАТЕЛЬ и СХЕМА несколько похожи. Но есть и большая разница. ПОЛЬЗОВАТЕЛЬ может называться СХЕМОЙ, если «ПОЛЬЗОВАТЕЛЬ» владеет каким-либо объектом, в противном случае ... он останется только «ПОЛЬЗОВАТЕЛЕМ». Если ПОЛЬЗОВАТЕЛЬ владеет хотя бы одним объектом, в силу всех приведенных выше определений ... ПОЛЬЗОВАТЕЛЬ теперь можно назвать СХЕМОЙ.
Пользователь: доступ к ресурсу базы данных. Как ключ, чтобы войти в дом.
Схема: Сбор информации об объектах базы данных. Как индекс в вашей книге, которая содержит краткую информацию о главе.
Для большинства людей, которые более знакомы с MariaDB или MySQL, это кажется немного запутанным, потому что в MariaDB или MySQL у них разные схемы (которые включают разные таблицы, представление, блоки PLSQL, объекты БД и т. Д.), А ПОЛЬЗОВАТЕЛИ - это учетные записи, которые могут получить доступ к этим схемы. Поэтому ни один конкретный пользователь не может принадлежать какой-либо конкретной схеме. Разрешение должно быть дано этой Схеме, чтобы пользователь мог получить к ней доступ. Пользователи и схема разделены в базах данных, таких как MySQL и MariaDB.
В Oracle схема и пользователи практически рассматриваются как одинаковые. Для работы с этой схемой вам нужно иметь разрешение, в котором вы почувствуете, что имя схемы - это не что иное, как имя пользователя. Разрешения могут быть предоставлены различным схемам для доступа к различным объектам базы данных из другой схемы. В оракуле мы можем сказать, что пользователь владеет схемой, потому что, когда вы создаете пользователя, вы создаете для него объекты БД и наоборот.
Схема - это контейнер объектов. Он принадлежит пользователю.
Ну, я где-то читал, что если у пользователя вашей базы данных есть привилегии DDL, то это схема, иначе это пользователь.