Особенности создания\изменения пользователей

                   

                    Идентификация пользователей в СУБД Oracle производится на путем сопоставления значения хеш-функции, вычисляемой при соединении пользователя с БД, и значения хеш-функции, хранящейся в БД (в таблице SYS.USER$) для каждого пользователя. Соединение устанавливается при совпадении этих значений. Хеш-функция не имеет алгоритма обратного вычисления пароля. Результирующая длина значения хеш-функции всегда составляет 16 знаков. Алгоритм вычисления значения хеш-функции одинаков для всех версий Oracle, для любых операционных систем и импортируется без изменений, перезаписывая уже существующее значение при совпадении имен пользователей (при exp full=y). В файле дампа и файле лога (imp full=y log=%logfile%) значение пользовательских хеш-функций приводится в открытом читабельном виде.

                   

                    При создании (изменении) пользователя командой

SQL> create user <user_name> identified by <user_password>;

                    по определенному (неизвестному в широких кругах) алгоритму вычисляется на основании имени пользователя и его пароля значение хеш-функции, которое записывается в таблицу SYS.USER$, при этом существуют следующие особенности:

-    Длина как имени пользователя, так и пароля не может превышать 30 знаков, при этом не допускается "пустые" имя и\или пароль (без знаков).  Если длина имени или пароля превышает 30 знаков, генерируется ошибка.

-    При выборе имени и пароля пользователя могут использоваться национальные символы для тех языков, которые инсталлированы в БД, например - русский язык:

 

MODEL: SYSTEM@test-9.2.0.6.0>>create user ddd identified by ddd;

Пользователь создан.
MODEL: SYSTEM@test-9.2.0.6.0>> grant connect to ddd;

Привилегии предоставлены.

MODEL: SYSTEM@test-9.2.0.6.0>>alter user ddd identified by юзер;
Пользователь изменен.
MODEL: SYSTEM@test-9.2.0.6.0>>conn ddd/юзер@test
Соединено.
MODEL: DDD@test-9.2.0.6.0>>select sysdate from dual;
SYSDATE
--------
28.09.05

 

-    При выборе имени и пароля пользователя возможно использование знака "пробел" в любом месте как имени, так и пароля, при этом необходимо использовать двойные кавычки, например:

MODEL: SYSTEM@test-9.2.0.6.0>>сreate user "d d d" identified by "d dd";
Пользователь создан.

MODEL: SYSTEM@test-9.2.0.6.0>>grant connect to d d d;
grant connect to d d d
*
ошибка в строке 1:
ORA-00933: неверное завершение SQL-предложения
MODEL: SYSTEM@test-9.2.0.6.0>>grant connect to "d d d";
Привилегии предоставлены.
MODEL: SYSTEM@test-9.2.0.6.0>>alter user "d d d" identified by ddd;
Пользователь изменен.
MODEL: SYSTEM@test-9.2.0.6.0>>conn d d d/ddd@test
SP2-0306: Неверная опция.
Синтаксис: CONN[ECT] [регистрация] [AS {SYSDBA|SYSOPER}]
где <регистрация> ::= <username>[/<password>][@<connect_string>] | /
MODEL: SYSTEM@test-9.2.0.6.0>>conn "d d d"/ddd@test
Соединено.
MODEL: "d d d"@test-9.2.0.6.0>>show user
USER имеет значение "d d d"
MODEL: "d d d"@test-9.2.0.6.0>>alter user "d d d" identified by "ю з е р";
Пользователь изменен.
MODEL: "d d d"@test-9.2.0.6.0>>conn "d d d"/"ю з е р"@test
Соединено.
MODEL: "d d d"@test-9.2.0.6.0>>show user
USER имеет значение "d d d"

-    в качестве значения хеш-функции может быть представлено любое сочетание допустимых знаков, в том числе предопределенное (вычисленное заранее для определенного пользователя с определенным паролем) значение хеш-функции. Ее значение должно указываться в одинарных кавычках. Если используется предопределенное значение хеш-функции, то пользователь может установить соединение с предопределенным паролем, соответствующим значению хеш-функции. Если в качестве значения хеш-функции используется произвольное сочетание знаков, соединение с БД невозможно. Например:

MODEL: SYSTEM@test-9.2.0.6.0>>grant DBA to ddd;
Привилегии предоставлены.
MODEL: SYSTEM@test-9.2.0.6.0>>alter user ddd identified by pass;
Пользователь изменен.
MODEL: SYSTEM@test-9.2.0.6.0>>conn ddd/pass@test
Соединено.
MODEL: DDD@test-9.2.0.6.0>>conn system/******@test
Соединено.
MODEL: SYSTEM@test-9.2.0.6.0>>select name, password from sys.user$ where name='DDD';
NAME       PASSWORD
------------------------------ ------------------------------
DDD         D2BD31383828392E
MODEL: SYSTEM@test-9.2.0.6.0>>conn ddd/pass@test
Соединено.
MODEL: DDD@test-9.2.0.6.0>>alter user ddd identified by values 'world';
Пользователь изменен.
MODEL: DDD@test-9.2.0.6.0>>select name, password from sys.user$ where name='DDD';
NAME       PASSWORD
------------------------------ ------------------------------
DDD          world
MODEL: DDD@test-9.2.0.6.0>>conn ddd/world@test
ERROR:
ORA-01017: неверно имя пользователя/пароль; вход в систему запрещается
Предупреждение: Вы больше не соединены с ORACLE.
SP2-0640: Не соединено
nolog>>conn system/******@test
Соединено.
MODEL: SYSTEM@test-9.2.0.6.0>>alter user ddd identified by values 'D2BD31383828392E';
Пользователь изменен.
MODEL: SYSTEM@test-9.2.0.6.0>>conn ddd/pass@test
Соединено.
MODEL: DDD@test-9.2.0.6.0>>show user
USER имеет значение "DDD"

-    изменение значения хеш-функции может быть произведено с помощью внесения изменений в таблицу SYS.USER$ (при наличии привилегий SYSDBA):

MODEL: SYSTEM@test-9.2.0.6.0>>conn sys/******@test as SYSDBA
Соединено.
MODEL: SYS@test-9.2.0.6.0>>update sys.user$ set password='world' where name='DDD';
1 строка обновлена.
MODEL: SYS@test-9.2.0.6.0>>select name, password from sys.user$ where name='DDD';
NAME
       PASSWORD
------------------------------ ------------------------------
DDD
         world
MODEL: SYS@test-9.2.0.6.0>>update sys.user$ set password='D2BD31383828392E' where name='DDD';
1 строка обновлена.
MODEL: SYS@test-9.2.0.6.0>>select name, password from sys.user$ where name='DDD';
NAME
       PASSWORD
------------------------------ ------------------------------
DDD
         D2BD31383828392E
MODEL: SYS@test-9.2.0.6.0>>@conn ddd/pass@test
Соединено.
MODEL: DDD@test-9.2.0.6.0>>show user
USER имеет значение "DDD"
 

                    Значения хеш-функций пользовательских паролей могут быть получены путем запроса к таблице SYS.USER$ (например, с использованием утилит PassFinger_v101 и PassChecker_v101), путем чтения файлов экспорта и результатов журнализации выполнения команды imp, кроме того в файле %ORAHOME%/database/pwd<SID>.ora содержатся хеш-функции пользователей, имеющих привилегиею SYSDBA.


                                                                                                

Сайт создан в системе uCoz