В этой статье расскажу о создании пользователя, который аутентифицируется на уровне операционной системы и имеет парольную аутентификацию.
Параметр инициализации REMOTE_OS_AUTHENT предоставляет доверительную модель сетевой аутентификации, пользователи имеющие учетные записи операционной системы могут получать доступ к базе данных. Таким образом вся отвественность аутентификации ложиться на операционную систему, и используется удобный механизм SSO.
Параметр REMOTE_OS_AUTHENT может принимать значения типа BOOLEAN, FALSE - значение по умолчанию, которое может быть изменено командой ALTER SYSTEM. Этот параметр доступен начиная с Oracle версии 7. Начиная с 11g (11.1.0.6) считается устаревшим, и присутствует только для обратной совместимости.
OS_AUTHENT_PREFIX определяет префикс, который Oracle использует для аутентификации пользователей, пытающихся подключиться к серверу. Oracle пристыкоавывает значение этого параметра перед именем пользователя операционной системы и пароля. При запросе подключения Oracle сравнивает имя пользователя с префиксом с именем пользователя в базе данных Oracle. По умолчанию значение параметра OPS$, для обратной совместимости с предыдущими версиями. Вы можете задать его значение пустым, таким образом префикс убираетсяЮ и имена операционной системы и Oracle совпадают.
Следующий пример иллюстрирует как можно подключиться используя одну учетную запись с паролем и без пароля.
Важно: Этот пример носит учебный характер, настоятельно не рекоммендуется повторять подобное на промышленных серверах.
Выясняем значения параметров по умолчанию:
SQL> show parameter os_authent
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix STRING OPS$
remote_os_authent BOOLEAN FALSE
SQL>
REMOTE_OS_AUTHENT может быть выставлено в TRUE командой ALTER SYSTEM, но не вступит в силу до тех пор, пока экземпляр не будет перезапущен.
SQL> ALTER SYSTEM SET REMOTE_OS_AUTHENT=TRUE SCOPE=SPFILE;
System altered.
Проверяем:
SQL> show parameter os_authent
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix STRING OPS$
remote_os_authent BOOLEAN TRUE
SQL>
Теперь создадим пользователя (схему) используя обычный метод, т.е. identified by вместо identified externally.
SQL> CREATE USER OPS$ALL_ORACLE IDENTIFIED BY MYPASSWORD;
User created.
SQL> GRANT CONNECT TO OPS$ALL_ORACLE;
Grant succeeded
Подключаемся как пользователь операционной системы, вам будет позволено подключиться к базе данных без пароля, используя аутентификацию операционной системы.
$ sqlplus /@test
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Jan 12 10:23:00 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Release 10.2.0.1.0 - 64bit Production
SQL>
Проверяем текущего пользователя:
SQL> show user
USER is "OPS$ALL_ORACLE"
Теперь проверяем подключение с паролем:
SQL> connect ops$all_oracle/mypassword@test
Connected.
SQL> show user
USER is "OPS$ALL_ORACLE"