Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Oracle |
![]() ![]() |
modeus Member Откуда: Сообщений: 18 |
добрый день. такая задача: есть ос Solaris10, в ней установлен Оracle10. необходимо чтобы отработал следующий код: alter role SELECT_CATALOG_ROLE identified externally; connect / show user select * from SESSION_ROLES; connect sys/sys as sysdba grant SELECT_CATALOG_ROLE to oracle; connect / show user rem Для выполнения этой команды необходимо установить внешнюю авторизацию пользователей rem средствами ОС set role SELECT_CATALOG_ROLE; select * from SESSION_ROLES; connect sys/sys as sysdba revoke SELECT_CATALOG_ROLE from oracle; что сейчас получается у меня: SQL> SQL> alter role SELECT_CATALOG_ROLE identified externally; Role altered. SQL> connect / Connected. SQL> show user USER is "ORACLE" SQL> select * from SESSION_ROLES; ROLE ------------------------------ CONNECT SQL> connect sys/sys as sysdba Connected. SQL> grant SELECT_CATALOG_ROLE to oracle; Grant succeeded. SQL> connect / Connected. SQL> show user USER is "ORACLE" SQL> rem Для выполнения этой команды необходимо установить внешнюю авторизацию пользователей SQL> rem средствами ОС SQL> set role SELECT_CATALOG_ROLE; set role SELECT_CATALOG_ROLE * ERROR at line 1: ORA-01989: role 'SELECT_CATALOG_ROLE' not authorized by operating system SQL> select * from SESSION_ROLES; ROLE ------------------------------ CONNECT SELECT_CATALOG_ROLE HS_ADMIN_ROLE SQL> connect sys/sys as sysdba Connected. SQL> revoke SELECT_CATALOG_ROLE from oracle; Revoke succeeded. пользователь oracle создавался так: create user oracle identified externally; grant connect to oracle; в ОС добавлял роль: roleadd -G dba select_catalog role спасибо за любую помощь или подсказку. искал по форуму, но чет ничего не нашел. |
12 сен 07, 13:43 [4655994] Ответить | Цитировать Сообщить модератору |
MacDuck Member Откуда: Москва-Подольск Сообщений: 6387 |
Не путайте роли в Solaris и роли в Oracle. |
||
12 сен 07, 13:46 [4656017] Ответить | Цитировать Сообщить модератору |
modeus Member Откуда: Сообщений: 18 |
А как роль Oracle авторизовать в Solaris |
||
12 сен 07, 13:58 [4656134] Ответить | Цитировать Сообщить модератору |
modeus Member Откуда: Сообщений: 18 |
никто не знает ???( |
12 сен 07, 14:32 [4656467] Ответить | Цитировать Сообщить модератору |
M _ I _ N Member Откуда: P a h a b i n o Сообщений: 29 |
Тут |
12 сен 07, 14:44 [4656597] Ответить | Цитировать Сообщить модератору |
MacDuck Member Откуда: Москва-Подольск Сообщений: 6387 |
ALTER ROLE .... IDENTIFIED EXTERNALLY; а в Init OS_AUTHENT_PREFIX=OPS$ или что там |
||
12 сен 07, 14:45 [4656608] Ответить | Цитировать Сообщить модератору |
modeus Member Откуда: Сообщений: 18 |
значит в init.ora пишем OS_ROLES = TRUE, рестартуем экземпляр с новыми параметрами. в Solaris'е идентифицировать роль надо по следующему формату: ora_ID_ROLE[_[d][a]]. вот ток я не понял как ее в Solaris добавить, как группу?? (т.е. groupadd ora_ID_ROLE) так?? я правильно понял?? |
||
12 сен 07, 14:54 [4656681] Ответить | Цитировать Сообщить модератору |
modeus Member Откуда: Сообщений: 18 |
делал, не получается. |
||
12 сен 07, 14:57 [4656712] Ответить | Цитировать Сообщить модератору |
MacDuck Member Откуда: Москва-Подольск Сообщений: 6387 |
По идее, группу. |
||
12 сен 07, 15:02 [4656758] Ответить | Цитировать Сообщить модератору |
modeus Member Откуда: Сообщений: 18 |
чет не получается с группами |
12 сен 07, 15:53 [4657353] Ответить | Цитировать Сообщить модератору |
MacDuck Member Откуда: Москва-Подольск Сообщений: 6387 |
Показывай как именно делал. |
||
12 сен 07, 16:38 [4657845] Ответить | Цитировать Сообщить модератору |
modeus Member Откуда: Сообщений: 18 |
в Solaris:$ id -p uid=100(oracle) gid=100(oinstall) projid=100(oracle) # groupadd ora_100_select_catalog_role UX: groupadd: ora_100_select_catalog_role name too long. UX: groupadd: ora_100_select_catalog_role name should be all lower case or numeric. # usermod -G dba,ora_100_select_catalog_role oracle UX: usermod: oracle is currently logged in, some changes may not take effect until next login. UX: usermod: ora_100_select_catalog_role name too long. UX: usermod: ora_100_select_catalog_role name should be all lower case or numeric. # more /etc/group root::0: other::1:root bin::2:root,daemon sys::3:root,bin,adm adm::4:root,daemon uucp::5:root mail::6:root tty::7:root,adm lp::8:root,adm nuucp::9:root staff::10: daemon::12:root sysadmin::14: smmsp::25: gdm::50: webservd::80: nobody::60001: noaccess::60002: nogroup::65534: oinstall::100: dba::101:user1,oracle oper::102: ora_100_select_catalog_role::103:oracle в Init.ora добавлено: OS_AUTHENT_PREFIX=""
REMOTE_OS_AUTHENT=TRUE
OS_ROLES=TRUE
стартую экземпляр startup pfile='/Oracle/admin/oradb/pfile/init.ora'; и вот чего он мне выдает: SQL> @/test/test.sql SQL> connect sys/sys as sysdba Connected. SQL> SQL> alter role SELECT_CATALOG_ROLE identified externally; Role altered. SQL> connect / Connected. SQL> show user USER is "ORACLE" SQL> select * from SESSION_ROLES; no rows selected SQL> connect / Connected. SQL> show user USER is "ORACLE" SQL> set role SELECT_CATALOG_ROLE; set role SELECT_CATALOG_ROLE * ERROR at line 1: ORA-01924: role 'SELECT_CATALOG_ROLE' not granted or does not exist |
12 сен 07, 17:12 [4658254] Ответить | Цитировать Сообщить модератору |
M _ I _ N Member Откуда: P a h a b i n o Сообщений: 29 |
ora_100_select_catalog_role::103:oracle Замени в имени группы "100" на $ORACLE_SID - ее вычисли: $ ps -ef | grep ora_lgwr_ oracle 1392812 1 0 Sep 07 - 0:02 ora_lgwr_testdb $ echo $ORACLE_SID testdb Т.е. создай новую группу, в имени которой присутствует значение $ORACLE_SID .... и добавь туда пользователя "oracle". |
12 сен 07, 18:17 [4658834] Ответить | Цитировать Сообщить модератору |
modeus Member Откуда: Сообщений: 18 |
попробовал, тоже самое $ more /etc/group oinstall::100: dba::101:user1,oracle oper::102: ora_oradb2_select_catalog_role::103:oracle ----- SQL> set role select_catalog_role; set role select_catalog_role * ERROR at line 1: ORA-01924: role 'SELECT_CATALOG_ROLE' not granted or does not exist |
||
13 сен 07, 10:02 [4660529] Ответить | Цитировать Сообщить модератору |
M _ I _ N Member Откуда: P a h a b i n o Сообщений: 29 |
Попробуйте еще: 1. Проверьте max длину имени группы/пользователя в Solaris10, т.к. - UX: groupadd: ora_100_select_catalog_role name too long. не есть хорошо. 2. Создайте в Solaris и БД нового пользователя, не входящего в группу DBA и не имеющего SYSDBA соответственно. 3. Далее - как в документации (ссылка выше). |
13 сен 07, 12:34 [4661788] Ответить | Цитировать Сообщить модератору |
modeus Member Откуда: Сообщений: 18 |
Имя в Solaris должно иметь длину от 2 до 8 символов и содержать только латинские буквы и цифры. очч интересно получается: ora_ID_ уже 7 символов. интересно что остается на имя роли ??? |
||
13 сен 07, 13:45 [4662517] Ответить | Цитировать Сообщить модератору |
M _ I _ N Member Откуда: P a h a b i n o Сообщений: 29 |
1. Пример подключения к БД с использованием внешней авторизации ( в OS == AIX Version 5.3)SQL> SELECT * FROM v$version; BANNER ---------------------------------------------------------------- Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production PL/SQL Release 9.2.0.6.0 - Production CORE 9.2.0.6.0 Production TNS for IBM/AIX RISC System/6000: Version 9.2.0.6.0 - Production NLSRTL Version 9.2.0.6.0 - Production---- проверка установки параметров БД SQL> select name, value from v$parameter where upper(NAME) in ( 2 'OS_AUTHENT_PREFIX', 'REMOTE_OS_AUTHENT', 'OS_ROLES'); NAME VALUE ------------------------------ -------------------- os_roles TRUE remote_os_authent TRUE os_authent_prefix---- создаем в БД две роли - test1 , test2 (default) -- SQL> connect sys as sysdba --Connected. SQL> CREATE ROLE "TEST2" IDENTIFIED EXTERNALLY; Role created. SQL> GRANT create SESSION TO "TEST2"; SQL> GRANT alter SESSION TO "TEST2"; SQL> GRANT create TABLE TO "TEST2"; Grant succeeded. SQL> CREATE ROLE "TEST1" IDENTIFIED EXTERNALLY; Role created. SQL> GRANT CREATE SEQUENCE TO "TEST1"; Grant succeeded.---- создаем пользователя test01 в БД: SQL> CREATE USER "TEST01" IDENTIFIED EXTERNALLY DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" QUOTA UNLIMITED ON "USERS" ACCOUNT UNLOCK; User created. SQL> GRANT "TEST2" TO "TEST01"; GRANT "TEST2" TO "TEST01" * ERROR at line 1: ORA-01956: invalid command when OS_ROLES are being used---- находим значение $ORACLE_SID, для которой будут создаваться группы в OS $ ps -ef | grep ora_lgwr_ oracle 1450204 1 0 14:41:48 - 0:00 ora_lgwr_testdb $ echo $ORACLE_SID testdb---- Создаем в OS : 2 группы ( на примере aix5.3, в имени которых присутствует $ORACLE_SID) и пользователя test01, входящего в эти группы root@/ # mkgroup -a ora_testdb_test2_d root@/ # mkgroup -a ora_testdb_test1 root@/ # mkuser -a pgrp='ora_testdb_test1' test01 root@/ # chuser groups='ora_testdb_test1, ora_testdb_test2_d' test01---- Добавляем необходимые переменные среды для пользователя test01 (в файл /home/test01/.profile) - их можно взять у пользователя oracle ORACLE_HOME=/orasoft/app/oracle/product/92 export ORACLE_HOME export LD_LIBRARY_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/lib:$LD_LIBRARY_PATH export LIBPATH=$ORACLE_HOME/lib32:$ORACLE_HOME/lib:$LIBPATH NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251 export NLS_LANG ORACLE_SID=testdb export ORACLE_SID TNS_ADMIN=$ORACLE_HOME/network/admin export TNS_ADMIN ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export ORA_NLS33 PATH=/orasoft/app/oracle/product/92/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:$HOME/bin:/usr/bin/X11:/sbin:. export PATH LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/usr/lib export LIBPATH---- проверяем что получилось - root@/ #su - test01 $ whoami test01 $ echo $ORACLE_SID testdb $ sqlplus / Connected to: ... SQL> show user USER is "TEST01"-- у пользователя изначально активированы роли (группы OS) по маске %_d, т.е. одна группа - "ora_testdb_test2_d" и соответствующая ей роль в БД ("TEST2"): SQL> select * from SESSION_ROLES; ROLE ------------------------------ TEST2-- проверка возможности создания таблицы в соответствии с привилегией у роли "TEST2" SQL> create table abc_test01 ( id1 number, txt1 varchar2(20 char)) / 2 3 4 Table created.-- проверка возможности создания SEQ ( привилегии создания SEQ у роли "TEST2" нету -:) SQL> create sequence SeQ_test01 minvalue 1 maxvalue 999 start with 1 increment by 1 / 2 3 4 5 create sequence SeQ_test01 * ERROR at line 1: ORA-01031: insufficient privileges-- смена роли SQL> set role test1; Role set. SQL> select * from SESSION_ROLES; ROLE ------------------------------ TEST1-- проверка возможности создания SEQ в соответствии с привилегией у роли "TEST1" SQL> create sequence SeQ_test01 minvalue 1 maxvalue 999 start with 1 increment by 1 / 2 3 4 5 Sequence created.-- проверка возможности создания TABLE ( привилегии создания table у роли "TEST2" нету -:) SQL> create table def_test01 ( id2 number, txt2 varchar2(20 char)) / 2 3 4 create table def_test01 ( * ERROR at line 1: ORA-01031: insufficient privileges-- активация всех ролей у test01: SQL> set role all; Role set. SQL> select * from SESSION_ROLES; ROLE ------------------------------ TEST1 TEST2 2. Решение проблемы длинного имени пользователя/группы в AIX5.3 -- попытка создания группы с превышением длины: root@/ # mkgroup -a ora_testdb_select_catalog_role 3004-694 Error adding "ora_testdb_select_catalog_role" : Name is too long.Для AIX есть нота , с помощью которой данную проблему можно решить след образом -- проверка max длины имени пользователя/группы root@/ # lsattr -El sys0 -a max_logname max_logname 16 Maximum login name length at boot time True root@/ # getconf LOGIN_NAME_MAX 16-- установка max длины имени пользователя/группы = 33 ( >= length ('ora_testdb_select_catalog_role_ad' ) == 33 ) root@/ # chdev -l sys0 -a max_logname=33 sys0 changed root@/ # shutdown -Fr root@/ # getconf LOGIN_NAME_MAX 33 root@/ # lsattr -El sys0 -a max_logname max_logname 33 Maximum login name length at boot time True-- Создаем в OS группу "ora_testdb_select_catalog_role_ad" - данная роль будет активироваться as default role : root@/ # mkgroup -a ora_testdb_select_catalog_role_ad -- включаем пользователя test01 в группу "ora_testdb_select_catalog_role_ad"root@/ # chuser groups='ora_testdb_test1, ora_testdb_test2_d, ora_testdb_select_catalog_role_ad' test01 -- проверка (роль БД select_catalog_role включает обьектную привилегию SELECT ON SYS.V_$DATABASE )root@/ # su - test01 $ sqlplus / SQL> select * from SESSION_ROLES; ROLE ------------------------------ TEST2 SELECT_CATALOG_ROLE HS_ADMIN_ROLE SQL> set role all; Role set. SQL> select * from SESSION_ROLES; ROLE ------------------------------ TEST1 TEST2 SELECT_CATALOG_ROLE HS_ADMIN_ROLE SQL> select name from SYS.V_$DATABASE; NAME --------- TESTDB 3. Возможное решение проблемы длинного имени пользователя/группы в Solaris ( возможно ли это ? - > к админу по Solaris, т.к. я в Solaris не работал-:() т.к.: 1) на данный момент у меня нет возможности протестить предлагаемое в Solaris, 2) есть предположение, что в Solaris изменение параметра ядра "max_logname" аналогично такому же действию в AIX ( параметры AIX и Solaris очень похожи !) автору предлагается ( по аналогии с действиями в AIX): а) сделать бекап ядра б) проверить есть ли в списке параметров ядра max_logname ( или LOGNAME_MAX ) : root@/ # lsattr -El sys0 root@/ # lsattr -El sys0 | grep LOGNAME_MAX в) если этот параметр есть, то увеличить его значение до нужного ( ~ 33) root@/ # chdev -l sys0 -a LOGNAME_MAX =33г) перегрузить ситему: root@/ # rebootд) Проверить новое значение параметра ядра max_logname, и если оно удовлетворяет, то создать нужные группы и пользователя в БД и ОС и т.д. |
17 сен 07, 20:29 [4679584] Ответить | Цитировать Сообщить модератору |
M _ I _ N Member Откуда: P a h a b i n o Сообщений: 29 |
Имя пользователя и имя группы в Solaris имеют разные "ограничители" по длине (переменные ядра LOGNAME_MAX и MAXGLEN). Если внимательно ознакомиться с синтаксисом groupadd (), то там можно прочитать, что при создании группы выдается всего лишь предупреждающее сообщение, и сама группа создается (см. выше посты автора в этом топике). Т.к. есть подозрения, что Автор выполнил некорректно или не все рекомендации, ему еще раз предлагается: 1. Оставить в покое пользователя "oracle", параметры ядра не изменять (пока). 2. Создать в Solaris и в БД нового пользователя, не входящего в группу DBA и не имеющего SYSDBA соответственно, например, с именем test_01989, и выполнить действия в той последовательности, в которой я приводил чуть выше в этом топике . Результаты - в студию. |
||
18 сен 07, 19:22 [4685272] Ответить | Цитировать Сообщить модератору |
Все форумы / Oracle | ![]() |