воскресенье, 7 февраля 2010 г.

Параметр OS_AUTHENT_PREFIX и подключение

Если приводить выдержку из документации:
OS_AUTHENT_PREFIX specifies a prefix that Oracle uses to authenticate users attempting to connect to the server. Oracle concatenates the value of this parameter to the beginning of the user's operating system account name and password. When a connection request is attempted, Oracle compares the prefixed username with Oracle usernames in the database.

Итак попробуем:

oracle@v-pc-dev-3:~> sqlplus /
ERROR:
ORA-01017: invalid username/password; logon denied

oracle@v-pc-dev-3:~> sqlplus / as sysdba
Connected to:
Oracle Database 10g Release 10.2.0.1.0 - Production

SQL> show parameter os_authent_prefix

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix string ops$

SQL> grant create session to ops$oracle identified by pass;
Grant succeeded.

SQL> exit
Disconnected from Oracle Database 10g Release 10.2.0.1.0 - Production

oracle@v-pc-dev-3:~> sqlplus /
Connected to:
Oracle Database 10g Release 10.2.0.1.0 - Production

SQL>
Таким образом, создав пользователя OPS$ORACLE нам удалось подключится к локальному экземпляру без пароля.

Теперь попробуем поменять значение префикса (для этого придется перезапускать экземпляр)
SQL> show parameter OS_AUTHENT_PREFIX

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix string XYZ$
SQL> grant create session to XYZ$ORACLE identified by pass;
Мы создали пользователя Oracle, соответствующего данному префиксу. Теперь подключаемся:

oracle@v-pc-dev-3:~> sqlplus /

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Feb 7 15:05:04 2010

Copyright (c) 1982, 2005, Oracle. All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied
Упс. Не получилось.
Попробуем создать пользователя не с паролем, а внешнего:

SQL> create user XYZ$ORACLE identified externally;
User created.
SQL> grant create session to XYZ$ORACLE;
Grant succeeded.
и подключаемся снова

oracle@v-pc-dev-3:~> sqlplus /
Connected to:
Oracle Database 10g Release 10.2.0.1.0 - Production

Выводы
1. При локальном подключении, если OS_AUTHENT_PREFIX отличен от OPS$, то пользователь в Oracle должен быть заведен identified externally
2. Если OS_AUTHENT_PREFIX=OPS$, то пользователь может быть заведен как внешний, так и с паролем.

Подключение по сети
А теперь попробуме подключится к серверу из вне без ввода пароля. Для этого (хоть Oracle этого так и не рекомендует, установим параметр REMOTE_OS_AUTHENT=TRUE.
Теперь попробуем варианты:
1. OS_AUTHENT_PREFIX <> OPS$, identified externally

SQL> create user "XYZ$ANDREY.ZAYTSEV" identified externally;

SQL> grant connect to "XYZ$ANDREY.ZAYTSEV";
Grant succeeded.

/>sqlplus /@v-pc-dev-3
Connected to:
Oracle Database 10g Release 10.2.0.1.0 - Production
ПОЛУЧИЛОСЬ
2. OS_AUTHENT_PREFIX <> OPS$, identified by password

SQL> create user "XYZ$ANDREY.ZAYTSEV" identified by pass;
User created.

SQL> grant connect to "XYZ$ANDREY.ZAYTSEV";
Grant succeeded.

/>sqlplus /@v-pc-dev-3
ERROR:
ORA-01017: invalid username/password; logon denied
НЕ ПОЛУЧИЛОСЬ

3. OS_AUTHENT_PREFIX = OPS$, identified by password

SQL> create user "OPS$ANDREY.ZAYTSEV" identified by pass;
User created.

SQL> grant connect to "OPS$ANDREY.ZAYTSEV";
Grant succeeded.

C:\Documents and Settings\andrey.zaytsev>sqlplus /@v-pc-dev-3
Connected to:
Oracle Database 10g Release 10.2.0.1.0 - Production
ПОЛУЧИЛОСЬ
Таким образом для внешнего подключения при REMOTE_OS_AUTHENT=TRUE поведение такое же, как и для внутреннего.

Комментариев нет: