Oracle как создать пользователя hr

Обновлено: 04.07.2024

При установке Oracle по умолчанию создаются два пользователя/схемы - SYS и SYSTEM. Я написал "пользователя/схемы" потому, что при создании нового пользователя для него создается одноименная схема. Не сразу понятно чем понятие "пользователь" отличается от понятия "схема". Чтобы понять представьте пользователя Windows (Unix). Пользователь имеет имя ИмяПользователя и принадлежащую ему папку - C:\Users\ИмяПользователя ( /home/ИмяПользователя ). Так вот пользователь Oracle аналогичен пользователю Windows, а схема - аналогична папке пользователя. Точно так же как у пользователя Windows, у пользователя Oracle есть набор прав. Так же как папка пользователя Windows содержит различные файлы, также и схема Oracle содержит различные объекты - таблицы, последовательности, триггеры и др. Если продолжать аналогию, то пользователей SYS и SYSTEM можно считать Администратором Windows или root-пользователем Unix. Они имеют неограниченные права. И работать под ними не рекомендуется. По-этому сначала нужно создать еще одного пользователя.

1. Создание пользователя и предоставление ему прав


Создадим пользователя, например fiftin :
Мы создали пользователя fiftin с паролем 123456 . Он не имеет абсолютно никаких прав. Вы даже не сможете под ним зайти:
Для наделения пользователя правами существует команда GRANT . Например дадим права пользователю fiftin на вход:
Если теперь вы попробуете подключиться как пользователь fiftin у вас это получится. Но это все что разрешено пользователю fiftin. Наделим пользователя правами администратора:
Теперь вы можете подцепиться к БД под fiftin'ом как админ:
Создадим таблицу:
Вставим данные:

2. Права на создание таблиц

Создадим еще одного пользователя - test:
Дадим ему права:
Теперь пользователь test может подключаться и создавать таблицы. Попробуем создать таблицу (не забудьте зайти под test'ом):
Получаем ошибку:
Почему так? Оказывается для того чтобы обычный пользователь (не админ) мог что-либо создать в БД, ему нужно выделить для этого место. Зайдем снова под fiftin'ом и выполним команду:
Этой командой мы выделяем пользователю test 50Мб под его нужды. Попробуйте теперь зайти под пользователем test и создать таблицу и у вас получится.

Думаю, настало время разобраться с тем как же создаются "схемы" в БД Oracle. Под понятием схема имеется ввиду сам созданный аккаунт или говоря прямо - пользователь БД! Целью создания пользователя как раз и является получение схемы БД, с определенными правами и привилегиями. Создание пользователя в БД Oracle достаточно не сложный, но в тоже время довольно концептуальный момент. Для создания пользователя (схемы), применяется команда DDL - CREATE USER. Она имеет следующий синтаксис:

  • [пользователь] [Username] - Имя пользователя (название схемы).
  • [пароль] [Password] - Пароль для учетной записи.
  • DEFAULT TABLESPACE - Табличное пространство в котором будут находиться создаваемые в данной схеме объекты. Эта настройка не дает пользователю права создавать объекты - здесь устанавливается только значение по умолчанию.
  • TEMPORARY TABLESPACE - Табличное пространство, в котором находятся временные сегменты, используемые в процессе сортировки транзакций.
  • QUOTA - Позволяет пользователю сохранять объекты в указанном табличном пространстве, занимая там место вплоть до определенного в квоте общего размера.

К слову сказать, в чем мы далее и убедимся. Для того, чтобы запросы пользователей могли создавать временные сегменты в табличном пространстве TEMP, им не нужны квоты на дисковое пространство. Попробуем создать пользователя! Запускайте SQL*Plus с пользователем SYS или SYSTEM пароли администраторов смотрите в шаге 5! Из всего выше сказанного, запишем вот такую конструкцию:

Здесь мы создаем пользователя (схему) DUMMY с паролем DUMB и позволяем ему резвится на 100 Мб пространства USERS и еще немного выделяем из пространства TEMP. Получаем в результате:

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

Именное такой синтаксис подключения можно использовать, он еще называется строка коннекта и расписывается вот так:

Опа! Не повезло! Создание пользователя - это еще не все! Теперь ему нужно разрешить самое основное - создавать сессию с сервером. Сделать это можно командой GRANT. Она достаточно объемная и мы ей займемся чуть позже, а пока восстановим подключение:

Даем пользователю право создавать сессию с сервером:

Вот теперь можно немного перевести дух. Итак, мы создали пользователя, определили ему табличные пространства, назначили квоты на них. И даже позволили создавать сессию с сервером. Давайте убедимся, что пользователь создан и чувствует себя нормально. Производим переконнект на админа БД:

Дадим такой запрос к представлению DBA_USERS:

Кто знаком с криптографией, может на досуге раскусить - E888ADB4D5FFE1B2 или хотя бы провести аналогию с DUMB! Итак, все с нашей схемой в порядке! Осталось только разрешить пользователю создавать объекты БД.

Да, так как оператор GRANT это DDL, то COMMIT вызывается не явно! В данном случае мы разрешили пользователю, создавать такие основные объекты БД как - TABLE, PROCEDURE, TRIGGER, VIEW, SEQUENCE. Для начала этого достаточно. А что делать, если пользователю будет необходимо изменять эти объекты? Тогда нужно добавить еще немного прав, на изменение (ALTER) вот так:

Вот теперь он может не только создавать эти объекты, но и изменять их! А, что если пользователю необходимо будет удалить какой-либо объект или удалить записи из таблиц? Тогда нужно добавить права на удаление объектов БД вот так:

Уфф! Ну вот теперь кажется все! Пользователь действительно полноценный и может работать! Помните в шаге 6 мы с вами это уже проделывали, но тогда я не вдавался в подробности, так как было не до того! А, вот теперь давайте разберемся более детально и продолжим далее.

Мы будем использовать для примеров две схемы. Встроенную схему HR, которая представляет из себя пример приложения для управления человеческими ресурсами и схема WEBSTORE – пример приложения для обработки заказов. Схема HR может быть создана при создании базы данных либо быть создана позднее выполнив скрипты из Oracle Home.

Схемы HR и WEBSTORE

Схема HR состоит из семи таблиц, связанных первичными и внешними ключами. На рисунке 9-3 отображены отношения между таблицами как на диаграмме сущность-связь.

Два из отношений на рисунке 9-3 могут быть сразу не совсем понятны. Первое, это отношение один-ко-многим таблицы EMPLOYEE к таблице EMPLOYEE. Это self-referencing внешний ключ. Это значит что много сотрудников может быть связано с одним сотрудником, и это основано на том факте что у многих сотрудников может быть один менеджер, но менеджер это также сотрудник. Эта связь реализована за счёт столбца внешнего ключа manager_id и первичного ключа employee_id.

Вторая связь которая возможно требует дополнительного пояснения это двунаправленная связь между DEPARTMENTS и EMPLOYEES. Многие сотрудники могут работать в одном департаменте, и один сотрудник может быть менеджером многих департаментов.

1

Таблицы в схеме

REGIONS содержит строки для георафических областей

COUNTRIES содержит строки для каждой страны, которые могут закрепляться за регионом

LOCATIONS содержат адреса, которые могут принадлежать стране

DEPARTAMENTS хранит информацию об отделах, с необязательным адресом и необязательным полем менеджера (менеджер должен существовать как сотрудник)

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

JOBS содержит информацию о должностях в компании. Много сотрудников могут иметь одинаковую должность

JOB_HISTORY хранит информацию о предыдущих должностях сотрудника, уникально определяемую полями employee_id и start_date; сотруднику не может быть назначено несколько должностей в один момент времени. Каждая запись в истории ссылается на сотрудника с одной должностью в определённый момент и возможной принадлежности какому-либо отделу. Мы будем использовать HR схему для примеров и упражнений, так что она должна быть создана.

2

Схема WEBSTORE уже была создана если вы выполняли лабораторные работы. Если нет, мы определим отношения и связи и создадим схему и необходимые объекты. Схема WEBSTORE состоит из четырёх таблиц, связанных первичными и внешними ключами. На рисунке 9-4 покаданы связи между таблицами, как диаграмма сущность-связь.

3

Магазин управляет продуктами, покупателями и заказами в соответсвенно названных таблицах. Каждый заказ может состоять из нескольких продуктов с разным количеством – эти данные хранятся в таблице ORDER_ITEMS. Столбец order_item_id хранит номер для каждого уникального продукта в каждом заказе. Каждый заказ связан с одной или несколькими строками таблицы ORDER_ITEMS .

Таблицы схемы WEBSTORE

PRODUCTS хранит информацию о продуктах: описание, цена, статус и доступное количество.

CUSTOMERS содержит информацию о покупателях

ORDERS хранит информацию о заказах. Один покупатель может совершить много заказов. Заказ не может быть создан без существующего покупателя.

ORDER_ITEMS хранит детальную информацию какие продукты были заказаны в каком заказе.

Создание демонстрационных схем

Если вы создавали БД используя лабораторное пособие то схема HR уже создана. Доступна опция создания демонстрационной схемы при создании базы с помощью DBCA.

Если схема не была создана в момент создания БД вы можете создать её выполнив скрипт установленный в домашнюю директорию БД. Этот скрип необходимо выполнить используя SQL *Plus иди SQL Developer с правами пользователя SYSDBA. Во время выполнения будут запрошены некоторые значения. Например в среде Linux вначале запустим SQL *Plus из командной строки ОС

root@> sqlplus / as sysdba

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

Затем выполните команду в SQL *Plus

Символ “?” это переменная которую SQL *Plus заменит на путь к домашней директории Oracle. Выведется запрос на пароль пользователя HR, табличное и временное пространство, пароль аккаунта SYS и путь куда записывать лог о выполнении скрипта. Обычно значения табличного пространства по умолчанию и временного пространтсва это USERS и TEMP, но они должны быть созданы перед запуском скрипта. После выполнения скрипта вы будете подключены к БД как пользователь HR. Чтобы убедиться в этом выполните команду

Вы увидите что подключен аккаунт HR; затем выполните

select table_name from user_tables;

И вы увидите семть таблиц схемы HR.

Для создания схемы WEBSTORE (если она не создана в процессе выполнения лабораторных работ) выполните следующие запросы для создания необходимых объектов и добавления данных которые будут использоваться далее.

root@> sqlplus / as sysdba

SQL> create user webstore identified by oracle default tablespace users temporary tablespace temp quota unlimited on users;

SQL> grant create session, create table, create sequence to webstore;

SQL> ALTER SYSTEM SET DEFERRED_SEGMENT_CREATION=FALSE;

SQL> connect webstore/oracle

SQL> create table customers(

customer_id number(8) not null constraint pk_customer_id primary key,

join_date date default sysdate not null,

customer_status varchar2(8) not null, customer_name varchar2(20) not null,

creditrating varchar2(10) not null, email varchar2(50) not null);

SQL> create table products(

product_id number(8) not null constraint pk_product_id primary key,

product_description varchar2(20) not null,

product_status varchar2(8) not null, price number(10,2) not null,

price_date date not null, stock_count number(8) not null);

SQL> create table orders(

order_id number(8) not null constraint pk_order_id primary key,

order_date date not null, order_status varchar2(8) not null,

order_amount number(10,2) not null,

customer_id number(8) constraint fk_customer_id references customers (customer_id));

SQL> create table order_items(

order_item_id number(8) not null,

order_id number(8) constraint fk_order_id references orders(order_id),

product_id number(8) constraint fk_prod_id references products(product_id),

SQL> create sequence cust_seq;

SQL> create sequence order_seq;

SQL> create sequence prod_seq;

После того как объекты созданы используйте следующие запросы которые запросят ввод данных для добавления строк в таблице, основываясь на данных в таблице 9-2.

insert into customers (customer_id, customer_status, customer_name, creditrating, email)

insert into products(product_id, product_description, product_status, price, price_date, stock_count)

insert into orders(order_id, order_date, order_status, order_amount, customer_id)

insert into order_items values (&item_id, &order_id, &product_id, &quantity);

Создание схемы в Oracle, поначалу может показаться немного запутанной. Вы можете подумать, что оператор CREATE SCHEMA создаст вашу схему, но это не так. Оператор CREATE SCHEMA используется только для создания объектов (т.е. таблиц, представлений и т.д.) в вашей схеме в одном SQL - предложении, но фактически не создает саму схему.

Чтобы создать схему в Oracle, вам необходимо выполнить следующие действия:

1. Создать нового пользователя в Oracle.

По сути, схема создается в Oracle при создании пользователя. (Изучите синтаксис оператора CREATE USER).

Мы можем создать нового пользователя с оператором CREATE USER следующим образом:

Этот оператор CREATE USER создаст нового пользователя samvel в базе данных Oracle, чей пароль pass4samvel , табличное пространство по умолчанию будет tbs_01 с квотой в 20 МБ, а временным табличным пространством будет tbs_01 .

2. Назначение привилегий SYSTEM новому пользователю в Oracle

Следующим шагом в настройке вашей схемы является назначение «системных привилегий» новому пользователю samvel .

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

Эти новые привилегии теперь предоставляются пользователю, называемому samvel .

3. Создание объектов в схеме

Теперь, когда схема (называемая samvel ) была создана с необходимыми привилегиями, вы можете создавать объекты в схеме. Это можно сделать одним из двух способов:

  • Выполнение отдельных операторов SQL для создания каждого объекта. Это будет сделано с помощью операторов CREATE TABLE и CREATE VIEW.
  • Выполнение оператора CREATE SCHEMA для создания нескольких объектов в одном выражении SQL.

4. Привилегии Grant объекта

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

5. Создание синонимов для объектов

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

Например, если бы вы были другим пользователем с именем samvel и хотели выбрать из таблицы suppliers в схеме new_schema , вам нужно было бы запустить следующий оператор SELECT (до создания любых синонимов):

Читайте также: