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

Когда пользователь подключается к БД, он подключается используя пользовательский аккаунт (user account) указывая имя аккаунта и метод аутентификации. Пользовательский аккаунт определяет первоначальные права доступа и атрибуты сессии. С пользовательским аккаунтам свзязывается схема (schema). Термины пользователь, пользовательский аккаунт и схема часто используется вместо друг друга в окружении Oracle, но это не одно и тоже. Пользователь – это человек который подключается к пользовательскому аккаунту устанавливая сессию к экземпляру БД и авторизуется используя имя аккаунта. Схема – это набор объектов принадлежащих пользовательскому аккаунту и мы рассмотрим детальнее в следующей главе. В зависимости от того как создался аккаунт будут установлены определнные аттрибуты для сесиий, некоторые из которых могут быть изменены позднее, во время существования сессии. Некоторые аккаунты создаются во время создания БД и DBA затем создаёт остальные аккаунты.

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

Аттрибуты пользовательского аккаунта

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

  • Имя
  • Метод аутентификации
  • Табличное пространство по умолчанию
  • Лимит табличного пространтсва
  • Временное табличное пространство
  • Статус

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

Имя аккаунта

Имя аккаунта должно быть уникальным для всей БД и соблюдать определенные правила. Имя аккаунта должно начинаться с буквы, длина не более 30 символов и может состоять только из букв, цифр, знака $ и символа подчёркивания. Также именем аккаунта не может быть зарезервированное слово. Символы чувствительны к регистру но будут автоматически преобразованы к верхнему регистру. Все эти правила (за исключением длинны) можно обойти если использовать имя внутри двойных кавычек, как показано на рисунке 6-1.

51

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

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

Табличные пространтсва по умолчанию и лимиты

У каждого аккаунта есть табличное пространство по умолчанию. Это табличное пространство где создаются объекты схемы (такие как таблицы, индексы) создаваемые этим аккаунтом. Аккаунт может создать объекты (быть владельцем) во всех табличных пространствах к которым у него есть  лимит (квота), но если явно не указывать табличное пространтсво при создании объекта – будет использователья табличное пространство аккаунта по умолчанию.

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

 

ALTER DATABASE DEFAULT TABLESPACE tablespace_name ;

 

Если у БД нет табличного пространства по умолчанию – используется SYSTEM.

Лимит (quota)  — это размер пространства которое объекты схемы аккаунта могут использовать. Вы можете создавать объекты и выделять экстенты пока не достигните лимита. Если у вас нет квоты для табличного пространтсва – вы не можете создавать объекты. Квоты можно изменять в любое время если у вас есть права для этого. Если квота пользователя была изменена в меньшую сторону, а объекты уже занимают больше места – то существующие объекты можно будет использовать,но нельзя добавить элементы или создать новые объекты.

На рисунке 6-2 отображено как проверять и устанавливать лимиты

52

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

Две команды ALTER USER позволяют аккаунту JOHN использовать 10 МБ пространтсва в табличном пространстве USERS и неограниченный доступ к пространтсву EXAMPLE. Запрос к DBA_TS_QUOTAS отображает затем эту информацию. -1 обозначает неограниченный лимит. Во время выполнения запроса у аккаунта JOHN нет созданных объектов, и поэтому BYTES=0, что значит пространство ещё не используется.

 

EXAM TIP

Before you can create a table, you must have both permission to

execute CREATE TABLE and quota on a tablespace in which to create it.

 

TIP

Most users will not need any quotas, because they will never create

objects. They will only have permissions against objects owned by other

schemas. The few object-owning schemas will probably have QUOTA

UNLIMITED on the tablespaces where their objects reside.

Временное табличное пространтсво

Постоянные объекты (такие как таблицы) хранятся в постоянных табличных пространствах; временные объекты хранятся во временном табличном пространстве. Сессии нужно место во временном табличном пространстве если будет использоваться места больше чем доступно в PGA сессии. Операции которым нужно временное место (в памяти если хватает PGA или во временном таблично пространтсве) включают в себя: сортировку строк, объекдинение таблиц, построение индексов и использование временных таблиц. Каждому аккаунту выделяется временное табличное пространство и все пользовательские сессии подключенные к аккаунту будут использовать одно и тоже временное табличное пространство.

Запрос к представлению DBA_USERS на рисунке 6-2 показывает временное пространство пользователя JOHN, которое также является временным табличным простратсвном по умолчанию для БД.

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

 

EXAM TIP

Users do not need a quota on their temporary tablespace.

 

Для изменения временного пространства польователя (что затронет все сессии которые подключается в будущем используя этот аккаунт) используйте команду ALTER USER

 

ALTER USER username TEMPORARY TABLESPACE tablespace_name;

 

TIP

If many users are logging on to the same user account, they will share the

use of one temporary tablespace. This can be a performance bottleneck, which

may be avoided by using temporary tablespace groups.

Профили

Пользовательские профили управляют настройками паролей и позволяют контролировать использование ресурсов. Более детально профили рассмотрим чуть ниже.

Профили полезны для управления паролями и ресурсами но могут использоваться только в среде где у каждого пользователя свой аккаунт. Если много пользователей подключаются к БД под одним аккаунтом, вы не захотите чтобы аккаунт блокировался если ввёл пароль несколько раз один пользователь, потому что этим вы заблокируете доступ всем остальным пользователям. Так же и использование ресурсов часто лучше управлять на уровне сессии а не на уровне аккаунта в целом.

Статус аккаунта

Каждый аккаунт имеет определённый статус, и значение можно увидеть в столбце ACCOUNT_STATUS представления DBA_USERS. Всего существует 9  статусов

  • OPEN – аккаунт готов к использованию
  • LOCKED – DBA заблокировал аккаунт, пользовтель не можед подключиться используя заблокированный аккаунт
  • EXPIRED – Пароль может иметь ограниченное время действия. В данном статусе время действия пароля истекло. Пользователь не может подключиться к аккаунта пока пароль не будет восстановлен
  • EXPIRED & LOCKED – Аккаунт заблокирован и время действия пароля истекло
  • EXPIRED (GRACE) – Пароль можно настроить таким образом чтобы он не становился EXPIRED сразу, а ещё был так называемый grace период, во время которого можно подключиться и изменить пароль
  • LOCKED (TIMED) – это обозначает что аккаунт заблокирвоан в связи с неудачными попытками подключения. Аккаунт можно настроить на автоматическую блокировку на какое-то время после определённого количества неудачных попыток подключения
  • EXPIRED & LOCKED (TIMED)
  • EXPIRED (GRACE) & LOCKED
  • EXPIRED (GRACE) & LOCKED (TIMED)

Для блокировки или разблокирования аккаунта используются команды

ALTER USER username ACCOUNT LOCK;

ALTER USER username ACCOUNT UNLOCK;

Для запроса изменения пароля пользователем при подключении можно выполнить команду

ALTER USER username PASSWORD EXPIRE;

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

Методы аутентификации

Аккаунт должен иметь определённый метод аутентификации: что-то что позволяет определить БД есть ли у пользователя пытающегося создать сессию доступ к аккаунту. Самый простой метод это использование пароля который совпадает с паролем хранящемся в БД, но есть и альтернативы. Возможнные варианты это

  • Аутентификация ОС
  • Аутентификация с помощью файла паролей
  • Аутентификация паролем
  • Внешняя аутентификация
  • Глобальная аутентификация

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

Аутентификация ОС и файлом паролей

Для разрешения аккаунту использования этих методов аутентификации (эти два типа используется вместе) необходимо назначить аккаунта расширенные права SYSDBA или SYSOPER

 

GRANT [sysdba|sysoprt] TO username;

 

Назначение этих прав скопирует пароль аккаунта из словаря данных во внешний файл паролей, откуда он может быть считан экземпляром даже если БД ещё не открыта. Это также позволит экземпляру аутентифицировать пользователей путём проверки принадлежит ли пользователь группе-владельцу программ Oracle. После установки БД единственный аккаунт с этими правами – это SYS.

Для использования файла паролей можно использоуть следующий синтаксис

 

CONNECT username/password[@db_alias] AS [SYSOPER|SYSDBA];

 

Аутентификация с помощью файла паролей можно использовать для подключения к удалённой БД используя Oracle Net

Чтобы использовать авторизацию ОС пользователсь должен быть авторизован ОС с доступом к исполняемым файлам Oracle и затем можно выполнить команду

 

CONNECT / AS [SYSOPER|SYSDBA]

 

Пароли ОС не хранятся Oracle и поэтому не может быть проблем со сменой пароля.

Эквивалентом этой команды может быть подключения через Database Control при выбранном значении SYSDBA в списке Connect As. Для определения у кого есть пава SYSDBA и SYSOPER можно выполнить запрос к представлению V$PWFILE_USERS. Подключение с использованием аутентифкации файлом паролей или ОС всегда доступно вне зависимости от состояния экземпляра и БД и такой вид подключения необходим для выполнения команд STARTUP и SHUTDOWN.

Третий вид привилегий SYSASM но это выходит за рамки этого курса.

Аутентификация паролем

Синтаксис для подключения используя аутентификацию паролем используя SQL *Plus

 

CONNECT username/password[@db_alias];

 

Или в Database Control выбрать NORMAL в списке Connect As. Когда подключение происходит используя аутентифкацию паролем, экземпляр проверит пароль в строке подключения с паролем который хранится для этого аккаунта в словаре данных. Для того чтобы был доступен такой метод аутентификации БД должна быть открыта; и используя этот метод невозможно выполнять команды STARTUP и SHUTDOWN.Пользователь SYS не имеет прав подключения используя аутентификацию паролем – только через файл паролей, аутентификацию ОС или LDAP.

Начиная с версии 11g пароли чувствительны к регистру. Пароль хранится именно так как был введён без всяких преобразований регистра.

Когда подключение происходит по сети, 11g всегда использует шифрование перед передачей данных. Для шифрованя данных между пользовательским процессом и серверным процессом необходимо Advanced Security Option, но шифрование пароля включено по умолчанию.

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

 

ALTER USER username IDENTIFIED BY password;

Внешняя аутентификация

Если аккаунт был создан с директивой внешней аутентификации, Oracle делегирует аутентифкацию внешнему сервису; т.е. не будет запрошен пароль. Если куплена Advanced Security Option, то внешним сервисом может быть сервер Kerberos, сервер RADIUS или сервис аутентификации Windows. Когда пользователь пытается подключиться к аккаунту, вместо аутентификации пользователя, БД будет разрешать (или не разрешать) подключение в зависимости от того авторизован или пользователь во внешнем сервисе. Например если используется Kerberos – БД проверит существует ли у пользователя валидный Kerberos токен. Без Advanced Security Option – единственно доступной формой внешней аутентификации будет аутентификация ОС. Это требует прав SYSDBA или SYSOPER (как описано выше) но может быть использовано и для обычных аккаунтов. Необходимо создать пользователя Oracle с таким же именем как и аккаунт ОС с префиксом указанном в параметре OS_AUTHENT_PREFIX. По умолчанию значение OPS$. Для проверки значения можно использовать запрос

 

select value from v$parameter where name=’os_authent_prefix’

 

В Linux/Unix внешняя аутентификация ОС работает очень просто. Предполагая что значение OS_AUTHENT_PREFIX осталось по умолчанию и есть пользователь ОС с именем jwatson, можно создать пользователя Oracle и дать права подключения следующим образом

create user ops$jwatson identified externally;

grant create session to ops$jwatson;

 

Пользователь подключенный к ОС как jwatson сможет подключиться к БД выполнив команду

sqlplus /

из командной строки ОС и будет подключен к БД как пользователь ops$jwatson.

В Windows обычно используется домен и тогда команда создания пользователя будет вида

 

create user «OPS$JWACER\JOHN WATSON» identified externally;

 

TIP

Using external authentication can be very useful, but only if the users

actually log on to the machine hosting the database. Users will rarely do this,

so the technique is more likely to be of value for accounts used for running

maintenance or batch jobs.

Глобальная аутентификация

Стандартом для управления идентификацией признано использование LDAP серверов. Под глобальным пользователем (global user) подразумевается пользователь определённый в LDAP директории, и глобальная аутентификация (global authentification) значит делегирование аутентификации пользователя серверам LDAP.

Существует два метода для глобальной аутентификации

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

Если всё настроено как надо подключение будет создано без запроса пароля.

Создание аккаунтов

У команды CREATE USER всего два обязательных параметра: имя  и метод аутентификации. Дополнительно, можно указать табличное пространство по умолчанию и временное табличное пространство, лимиты, профили и команды блокировки аккаута и управления паролем. Пример команды (номера строк добавлены для удобства)

 

1 create user scott identified by tiger

2 default tablespace users temporary tablespace temp

3 quota 100m on users, quota unlimited on example

4 profile developer_profile

5 password expire

6 account unlock;

 

Только первая строка обязательна – существуют значения по умолчанию для всего остального. Рассмотрим пример построчно

  • Имя и пароль для аутентификации паролем
  • Табличное пространство по умолчанию и временное табличное пространство
  • Лимиты
  • Профиль для управления паролем и ресурсами
  • Принудительное изменение пароля при первом подключении
  • Аккаунт готов к использованию (команда по умолчанию)

 

Каждый параметр может быть изменён командой ALTER USER кроме имени. Для смены пароля выполните команду

alter user scott identified by lion;

Смена табличных пространств

alter user scott default tablespace store_data temporary tablespace temp;

Смена лимитов

alter user scott quota unlimited on store_data, quota 0 on users;

Смена профиля

alter user scott profile prod_profile;

Бывает необходимо удалить аккаунт, используется команда

drop user scott;

Эта команда будет выполнена успешно только если у аккаунта нет объектов: схема пуста. Если вы не хотите вначале удалять все объекты пользователя, можно использовать директиву CASCADE

drop user scott cascade;

Для управления пользователя в Database Control из домашней страницы перейдите на вкладку Server и перейдите по ссылке Users в секции Security. В новом окне отобразятся все пользователи остортированные по дате создания. Для сортировки по какому либо столбцу нажмите на заголовок столбца. На рисунке 6-3 отображается окно Database Control

рисунок 6-3 Окно управления пользователя в Database Control
рисунок 6-3 Окно управления пользователя в Database Control

Первый аккаунт на рисунке – PUBLIC. Это формальный пользователь которому необходимо назначить права для применения прав ко всем пользователям.  Кнопки CREATE и DELETE позволяют создавать и удалять пользователей.

Для изменения аттрибутов аккаунта можно выделить пользователя и нажать EDIT. Октроется окно Edit User, показанное на рисунке 6-4. Это окно можно использовать для изменения аттрибутов кроме лимитов табличных пространств. Для этого есть отдельное окно. Также здесь можно назначать и удалять права и роли.

Рисунок 6-4 Редактирование аккаунта
Рисунок 6-4 Редактирование аккаунта

Добавить комментарий