Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 ORA-01989  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
MacDuck
Member

Откуда: Москва-Подольск
Сообщений: 6387
modeus

в ОС добавлял роль: roleadd -G dba select_catalog role


Не путайте роли в Solaris и роли в Oracle.
12 сен 07, 13:46    [4656017]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
modeus
Member

Откуда:
Сообщений: 18
MacDuck
Не путайте роли в Solaris и роли в Oracle.


А как роль Oracle авторизовать в Solaris
12 сен 07, 13:58    [4656134]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
modeus
Member

Откуда:
Сообщений: 18
никто не знает ???(
12 сен 07, 14:32    [4656467]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
M _ I _ N
Member

Откуда: P a h a b i n o
Сообщений: 29
Тут
12 сен 07, 14:44    [4656597]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
MacDuck
Member

Откуда: Москва-Подольск
Сообщений: 6387
modeus
никто не знает ???(

ALTER ROLE .... IDENTIFIED EXTERNALLY;

а в Init OS_AUTHENT_PREFIX=OPS$ или что там
12 сен 07, 14:45    [4656608]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
modeus
Member

Откуда:
Сообщений: 18
M _ I _ N
я правильно понял:

значит в init.ora пишем OS_ROLES = TRUE, рестартуем экземпляр с новыми параметрами.

в Solaris'е идентифицировать роль надо по следующему формату: ora_ID_ROLE[_[d][a]].
вот ток я не понял как ее в Solaris добавить, как группу?? (т.е. groupadd ora_ID_ROLE)

так?? я правильно понял??
12 сен 07, 14:54    [4656681]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
modeus
Member

Откуда:
Сообщений: 18
MacDuck

ALTER ROLE .... IDENTIFIED EXTERNALLY;


а в Init OS_AUTHENT_PREFIX=OPS$ или что там



делал, не получается.
12 сен 07, 14:57    [4656712]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
MacDuck
Member

Откуда: Москва-Подольск
Сообщений: 6387
modeus


так?? я правильно понял??


По идее, группу.
12 сен 07, 15:02    [4656758]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
modeus
Member

Откуда:
Сообщений: 18
чет не получается с группами
12 сен 07, 15:53    [4657353]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
MacDuck
Member

Откуда: Москва-Подольск
Сообщений: 6387
modeus
чет не получается с группами


Показывай как именно делал.
12 сен 07, 16:38    [4657845]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
modeus
Member

Откуда:
Сообщений: 18
M _ I _ N

попробовал, тоже самое

$ 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]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
modeus
Member

Откуда:
Сообщений: 18
M _ I _ N


Имя в Solaris должно иметь длину от 2 до 8 символов и содержать только латинские буквы и цифры.


очч интересно получается: ora_ID_ уже 7 символов. интересно что остается на имя роли ???
13 сен 07, 13:45    [4662517]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: ORA-01989  [new]
M _ I _ N
Member

Откуда: P a h a b i n o
Сообщений: 29
modeus


Имя в Solaris должно иметь длину от 2 до 8 символов и содержать только латинские буквы и цифры.

очч интересно получается: ora_ID_ уже 7 символов. интересно что остается на имя роли ???


Имя пользователя и имя группы в Solaris имеют разные "ограничители" по длине (переменные ядра LOGNAME_MAX и MAXGLEN). Если внимательно ознакомиться с синтаксисом groupadd (), то там можно прочитать, что при создании группы выдается всего лишь предупреждающее сообщение, и сама группа создается (см. выше посты автора в этом топике).

Т.к. есть подозрения, что Автор выполнил некорректно или не все рекомендации, ему еще раз предлагается:

1. Оставить в покое пользователя "oracle", параметры ядра не изменять (пока).
2. Создать в Solaris и в БД нового пользователя, не входящего в группу DBA и не имеющего SYSDBA соответственно, например, с именем test_01989, и выполнить действия в той последовательности, в которой я приводил чуть выше в этом топике .

Результаты - в студию.
18 сен 07, 19:22    [4685272]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить