Отправляет email-рассылки с помощью сервиса Sendsay

СУБД Oracle "с нуля"

  Все выпуски  

Управление пользователями и ролями.


Информационный Канал Subscribe.Ru

Выпуск 19

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

А мы с вами сегодня познакомимся с не менее важной темой – администрирование пользователей СУБД Oracle. Это не сложная тема, но важна как воздух. Oracle предоставляет развитые средства управления безопасностью, что позволяет нам не беспокоиться о потенциальных хакерах и нарушителях спокойствия. Но прежде, чем заняться этим, давайте вспомним, что же мы уже знаем. Итак, несколько вопросов по предыдущим выпускам.

  1. Если возникла необходимость загрузить данные из excel-таблицы в БД Oracle, как это сделать проще всего?
  2. Какие инструменты позволяют осуществить дефрагментацию файлов данных и избавиться от деградации данных?
  3. Какая структура (механизм) реализует концепцию согласованности чтения?
  4. Может ли один пользователь просматривать таблицу, которую активно изменяют 1000 других пользователей?
  5. Какие файлы используются для регистрации всех транзакций?

Думаю, для постоянных читателей рассылки эти вопросы покажутся очень простыми. Но если вы сомневаетесь, заходите на сайт oranet.ru и читайте архив статей.

Управление пользовательскими аккаунтами

Создание пользовательских аккаунтов, или, попросту, регистрация пользователей осуществляется либо через Enterprise Manager, либо с помощью SQL-команды CREATE USER. Чем бы вы не пользовались – результат будет один. Зарегистрированный пользователь будет одновременно точкой доступа к БД и владельцем своей одноименной схемы данных. Причем, для своей схемы данных, пользователи являются администраторами, т.е. могут делать со своими объектами все что угодно, а также давать права на доступ другим пользователям.

Замечание: Для создания пользователя, необходимо обладать системной привилегией CREATE USER.

Для создания пользователя с помощью Enterprise Manager, надо открыть ветку необходимой базы данных, затем Security. Среди открытых веток, надо найти Users. Кликнув правой кнопкой мыши по этой ветке, Вы увидите выпадающее контекстное меню, в котором присутствует команда CREAT . После ее нажатия появится форма создания нового пользователя. Заполнив необходимые поля, надо нажать кнопку APPLY, и новый пользователь будет создан. Но если перед нажатием кнопки APPLY Вы нажмете кнопку "Show SQL", то увидите альтернативную SQL-команду создания нового пользователя.

Для создания пользователя, необходимо указать, как минимум, его имя. Имя должно быть уникальным. В дополнение к имени можно сразу указать пароль, профиль (если он отличен от DEFAULT), табличное пространство и временное табличное пространство. Кроме этого, пользователь может быть включен (unlocked) и заблокирован (locked). Заблокированные пользователи не могут производить никаких действий с БД.

Если Вы хотите добавить пользователя по аналогии с другим, уже существующим в БД, то можете создать аккаунт копированием. Для этого надо раскрыть ветку Users, найти необходимого пользователя и щелкнуть по нему правой кнопкой мыши. В выпадающем меню выбрать команду CREATE LIKE.

Если Вы не хотите пользоваться Enterprise Manager, или не имеете такой возможности, то можно создать пользовательский аккаунт с помощью языка SQL. Простейший вариант создания пользователя, это следующая команда:

CREATE USER имя_пользователя IDENTIFIED BY пароль_пользователя;

Синтаксис команды CREATE USER следующий:

CREATE USER имя_пользователя
IDENTIFIED BY пароль 
     или IDENTIFIED EXTERNALLY 
     или IDENTIFIED GLOBALLY 
AS `CN=user'
[ DEFAULT TABLESPACE имя_табличного_пространства ]
[ TEMPORARY TABLESPACE имя_табличного_пространства ]
[ QUOTA [ число K или M или UNLIMITED ] ON имя_таблчиного_пространства ]
[, QUOTA [ число K или M или UNLIMITED ] ON имя_табличного_пространства ]
[ PROFILE наименование_профиля ]
[ PASSWORD EXPIRE ]
[ ACCOUNT LOCK или ACCOUNT UNLOCK ]

Вот что означают параметры этой команды:

  • CREATE USER имя_пользователя – имя создаваемого пользовательского аккаунта, обязательное поле.
  • IDENTIFIED BY пароль – Oracle самостоятельно будет идентифицировать пользователя по паролю. Это первоначальный пароль, который со временем можно изменить.
  • IDENTIFIED EXTERNALL – Пользователь будет идентифицироваться средствами операционной системы. Имя пользователя должно быть идентичным тому, что используется операционной системой.
  • IDENTIFIED GLOBALLY AS ` CN = user ' – Имя пользователя будет идентифицироваться службой каталогов (enterprise directory service) Oracle .

Примечание: Должен использоваться один и только один способ идентификации пользователя.

  • DEFAULT TABLESPACE имя_табличного_пространства – Табличное пространство по-умолчанию, к которому будет прикреплен пользователь. Если его не указать, то будет использоваться табличное пространство SYSTEM.
  • TEMPORARY TABLESPACE имя_табличного_пространства – временное табличное пространств для пользователя. По-умолчанию будет использоваться SYSTEM.
  • QUOTA число K или M ON имя_табличного_пространства – Определяет квоту (т.е. ограничение) на использование указанного табличного пространства в К (килобайтах) или М (мегабайтах).
  • QUOTA UNLIMITED ON имя_табличного_пространства – для указанного табличного пространства будет установлена неограниченная квота.
  • PROFILE имя_профиля – пользователю будет присвоен определенный профиль.
  • PASSWORD EXPIRE – Паролю немедленно будет присвоен статус устаревшего. Пользователю придется сменить пароль перед первым использованием своей учетной записи (аккаунта).
  • ACCOUNT LOCK – аккаунт будет заблокирован сразу после его создания.
  • ACCOUNT UNLOCK – аккаунтом можно пользоваться сразу после создания.

Изменение пользовательских аккаунтов

Для того чтобы изменить параметры пользовательской учетной записи можно опять же воспользоваться Enterprise Manager-ом, или выполнить соответствующую SQL-команду.

В Enterprise Manager надо найти ветку искомого пользователя, и в контекстном меню выбрать команду EDIT . В открывшейся экранной форме можно произвести все необходимые изменения, и сохранить их нажатием кнопки APPLY (применить).

SQL -команда изменения пользователя имеет следующий синтаксис:

ALTER USER имя_пользователя
IDENTIFIED BY пароль 
     или IDENTIFIED EXTERNALLY или IDENTIFIED GLOBALLY AS `CN=user'
[ DEFAULT TABLESPACE имя_табличного_пространства ]
[ TEMPORARY TABLESPACE имя_табличного_пространства ]
[ QUOTA [ число K или M или UNLIMITED ] ON имя_табличного_пространства ]
[, QUOTA [ number K or M or UNLIMITED ] ON имя_табличного_пространства ]
[ PROFILE наименования_профиля ]
[ PASSWORD EXPIRE ]
[ ACCOUNT LOCK или ACCOUNT UNLOCK ]
[ DEFAULT ROLE имя_роли [, имя_роли ] 
     или [ DEFAULT ROLE ALL [ EXCEPT имя_роли [, имя_роли ] ] ] или [ DEFAULT ROLE NONE ]

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

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

Роль – это набор (или, иными словами, группа) системных и объектных привилегий. А привилегия – это право на исполнение определенной SQL -команды или на доступ к определенному объекту. Например, системная привилегия SELECT ANY TABLE разрешает выполнить оператор SELECT для любой таблицы. Если мы эту привилегию присвоим роли SOME _ ROLE , а затем эту роль предоставим некоторому пользователю, то этот пользователь также получит привилегию SELECT ANY TABLE . Роли можно присваивать и другим ролям.

Тут Вы можете спросить, зачем же нужны роли, если мы и так можем присвоить все необходимые привилегии выбранному пользователю? Так вот, роли значительно упрощают управление привилегиями. Представьте, что у Вас 100 пользователей, и каждому из них надо присвоить массу привилегий. Вы же замучаетесь их присваивать и рано или поздно допустите ошибку. Используя роли можно добиться того же результата гораздо эффективнее. Кроме того, Вы можете включить и выключить любую роль.

Также есть механизм присваивания пароля для роли, при этом ролью могут воспользоваться лишь те пользователи, которые знают пароль. Все пользователи, которым применена роль по умолчанию, могут пользоваться всеми привилегиями такой роли, без необходимости вводить пароль. Но, обратите внимание, что даже если у пользователя есть роль по-умолчанию ( DEFAULT ROLE ), то он может ей пользоваться только в случае, когда она ему непосредственно присвоена до этого. Иными словами, прежде чем указать роль по-умолчанию, эта роль должна быть назначена пользователю.

Сразу после создания пользовательского аккаунта, для него назначаются все роли по-умолчанию (DEFAULT ROLE ALL). Если какие либо роли исключаются из DEFAULT, то пользователь не сможет воспользоваться соответствующими правами, пока не включит роль командой SET ROLE ИМЯ_РОЛИ.

Теперь о назначении последних опций:

  • DEFAULT ROLE имя_роли – роль, назначаемая пользователю сразу после открытия сессии (без необходимости вводить пароль такой роли);
  • DEFAULT ROLE ALL – пользователю назначаются все, присвоенные ему роли, за исключением тех, которые указаны после предложения EXCEPT;
  • DEFAULT ROLE NONE – все роли, назначенные пользователю, будут отключены после открытия сессии.

Управление ролями

Конечно же, роль можно создать с помощью Enterprise Manager (думаю, Вы без труда справитесь с такой задачей самостоятельно), а сейчас рассмотрим команду создания роли с помощью SQL:

CREATE ROLE имя_роли
NOT IDENTIFIED
или IDENTIFIED BY пароль
или IDENTIFIED EXTERNALLY
или IDENTIFIED GLOBALLY

Это довольно простая команда. Единственными опциями которой являются методы обеспечения безопасности (т.е. методы идентификации ролей). Команда изменения роли полностью аналогична команде создания (ALTER ROLE). Т.е. при изменении роли можно лишь модифицировать метод обеспечения безопасности или сменить пароль.

Для удаления роли существует команда DROP ROLE имя_роли.

Команды GRANT и REVOKE

Как я уже говорил, роль можно назначить любому пользователю или другой роли, точно так же как привилегию. Для этого используется команда GRANT (разрешить). Эта команда должна соответствовать следующему синтаксису:

GRANT имя_роли или имя_привилегии [, имя_роли или имя_привилегии ]
TO пользователь или имя_роли или PUBLIC [, пользователь или имя_роли ]
[ WITH ADMIN OPTION ]
[ WITH GRANT OPTION ]

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

Опция WITH ADMIN OPTION разрешает передавать полученные привилегии другим ролям и пользователям. Будьте внимательны, опция ADMIN разрешает изменить или удалить полученную роль! Чтобы разрешить только передачу роли, используйте опцию WITH GRANT OPTION.

Команда REVOKE (отнять, аннулировать) противоположна по действию команде GRANT. Т.е. отнимает у пользователя или роли назначенные ранее роли и привилегии. Имеет похожий синтаксис:

REVOKE имя_роли или имя_привилегии [, имя_роли или имя_привилегии ]
FROM пользователь или имя_роли или PUBLIC [, пользователь или имя_роли ]

Давайте, теперь рассмотрим несколько примеров:

GRANT new_dba TO michael WITH ADMIN OPTION; - этой командой пользователю michael назначается роль new_dba. При этом пользователь michael получает право назначить полученную роль любому другому пользователю, а также изменить и удалить эту роль.

GRANT ALL ON salary TO jfee ; - этой командой пользователю jfee предоставляются все объектные привилегии на представление salary.

GRANT SELECT ON hr . employees TO blake WITH GRANT OPTION ; - пользователь blake получает привилегию просмотра таблицы hr.employees с возможностью разрешить такой просмотр любому другому пользователю системы.

REVOKE CREATE TABLE , accts_rec FROM tsmith ; - пользователь tsmith больше не сможет создавать таблицы и теряет права роли accts_rec .

Подводя итоги

Сегодня мы узнали как создавать и изменять пользователей, как назначать им роли и привилегии. Рассмотрели примеры создания, изменения, удаления и назначения ролей. Это наиболее частые задачи администрирования пользователей СУБД Oracle .

Роли – это очень важная часть обеспечения безопасности работы сервера. Я советую подробно документировать создаваемые роли для того, чтобы четко представлять какие из них должны быть назначены новым пользователям системы.

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

Что дальше?

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

Вопросы – Ответы

Вопрос: Какая разница между привилегией и ролью?
Ответ: Привилегия – это право выполнить некое действие или команду. Роль – это набор привилегий и других ролей.

Вопрос: ли пользователь иметь более одной роли?
Ответ: Конечно же. Пользователю могут быть присвоены множество ролей в зависимости от его нужд и обязанностей.

На этом я завершаю этот выпуск.
Всего наилучшего, Lemon .

Злыгостев А.А. – lemon@oranet.ru или zlygostev@gmail.com


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.db.oraclefromzero
Отписаться
Вспомнить пароль

В избранное