powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / how to identify system related users in 11g
17 сообщений из 17, страница 1 из 1
how to identify system related users in 11g
    #39638996
mblsha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня,
предистория - создание скриптов, для автоматического применения "законов" для "CIS oracle database benchmark 11g" (#4.X.XX)
задача - как вычислить дефолтных пользователей в 11g?
в 12с есть колонка DBA_USERS.ORACLE_MAINTAINED, но в 11 ее еще нема.
Исследуя инет написал следущее:
select * from dba_users where username not in
(select SCHEMA as username from dba_registry
union
select regexp_substr(OTHER_SCHEMAS,'[^,]+', 1, level) username from dba_registry
where OTHER_SCHEMAS is not null
connect by regexp_substr(OTHER_SCHEMAS, '[^,]+', 1, level) is not null);

но результат удивил(запускал на 11.2.0.4):
MDDATA
MGMT_VIEW
APEX_PUBLIC_USER
OWBSYS_AUDIT
SPATIAL_WFS_ADMIN_USR
SPATIAL_CSW_ADMIN_USR

нашлись системные пользователи, не включенные в dba_registry....
есть идеи?

п.с. можно вписать hardcoded весь список системных пользователей, но тогда есть риск, что (допустим) была создана база без модуля SPATIAL, "злоумышленник" это узнал и создал пользователя SPATIAL_WFS_ADMIN_USR, и в там случае я об этом никогда не узнаю....(разве что искать только тех пользователей у которых статус "EXPIRED & LOCKED"?)
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39639130
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можно заглянуть в dba_users_with_defpwd и sys.default_pwd$
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39639133
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mblshaп.с. можно вписать hardcoded весь список системных пользователей, но тогда есть риск, что (допустим) была создана база без модуля SPATIAL, "злоумышленник" это узнал и создал пользователя SPATIAL_WFS_ADMIN_USR, и в там случае я об этом никогда не узнаю....(разве что искать только тех пользователей у которых статус "EXPIRED & LOCKED"?)Если у злоумышленника есть права на создание юзера, то он может его и не создавать, а просто сменить пароль уже существующего и работать под ним. Тем более после этого поменять его обратно.
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39639199
mblsha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Relic HunterЕсли у злоумышленника есть права на создание юзера, то он может его и не создавать, а просто сменить пароль уже существующего и работать под ним. Тем более после этого поменять его обратно.
согласен, но случаи то всякие бывают...

Вячеслав ЛюбомудровЕще можно заглянуть в dba_users_with_defpwd и sys.default_pwd$
Одно основа другого, но это действенно в том случае, если пароль не менялся, в большенстве так оно и есть, НО часть из требований CIS(№1.2) - select * from dba_users_with_defpwd не должен возращать результатов, тоесть все дефолтные пароли надо поменять...
исходя из того что это можно сделать и потом, попробовал на той же БД:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select * from dba_users a where username not in 
(select SCHEMA as username from dba_registry 
union 
select regexp_substr(OTHER_SCHEMAS,'[^,]+', 1, level) username from dba_registry 
where OTHER_SCHEMAS is not null 
connect by regexp_substr(OTHER_SCHEMAS, '[^,]+', 1, level) is not null)
and exists (select 1 from dba_users_with_defpwd b where a.username=b.username); 



Результат какраз те 5 юзеров. Спасибо, буду пробовать на других базах...

п.с. коллега посоветовал как вариант такую логику:
установлен модуль(SPATIAL)? > Да (select * from dba_registry) > пользователи (SPATIAL_WFS_ADMIN_USR/SPATIAL_CSW_ADMIN_USR/MDDATA/MDSYS) системные.
И так описать для всех остальных модулей....
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39639206
mblsha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл добавить - как варинт рассматриваю предложение из Doc ID 247093.1
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select unique statements from (
    select 'grant execute on '||
       referenced_name||' to '||owner||';' statements
    from dba_dependencies
               where
    referenced_owner in ('SYS','PUBLIC')     and
                     referenced_type in ('PACKAGE','SYNONYM')  and
                     referenced_name in
    ('DBMS_RANDOM','DBMS_EXPORT_EXTENSION','UTL_FILE',
     'DBMS_JOB','DBMS_LOB','UTL_SMTP','UTL_TCP','UTL_HTTP') and
                     owner <> 'SYS' and
                     owner <> 'PUBLIC')
    order by statements;


дополнить весь список системных "опасных" пакетов, дать всем кто этими пакетами пользуется доступ и забрать у PUBLIC, и не мучаться с системными пользователями, или сделать и то и другое - дать доступ и всем кто их использует и всем системным пользователям?
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39639763
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mblshaВячеслав ЛюбомудровЕще можно заглянуть в dba_users_with_defpwd и sys.default_pwd$
Одно основа другого, но это действенно в том случае, если пароль не менялся, в большенстве так оно и есть, НО часть из требований CIS(№1.2) - select * from dba_users_with_defpwd не должен возращать результатов, тоесть все дефолтные пароли надо поменять...
исходя из того что это можно сделать и потом, попробовал на той же БД:Э-ээ, вообще-то фишка именно в sys.default_pwd$ -- если юзера там нет, то это неоракловый юзер -- отсюда уже можно немного плясать

Насчет пустого dba_users_with_defpwd -- это не всегда возможно
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SQL> select * from dba_users_with_defpwd;

USERNAME
------------------------------
XS$NULL

1 row selected.

SQL> alter user XS$NULL identified by strong1234567890password;
alter user XS$NULL identified by strong1234567890password
                                 *
ERROR at line 1:
ORA-01031: insufficient privileges

SQL> sho user
USER is "SYS"

И прямое объяснение от OracleCannot Alter User XS$NULL (Doc ID 1325766.1)If you try to do this because of some security auditing requirements (which for example demand that all users should be in a certain profile) explain to the auditors that this is impossible.
mblshaп.с. коллега посоветовал как вариант такую логику:
установлен модуль(SPATIAL)? > Да (select * from dba_registry) > пользователи (SPATIAL_WFS_ADMIN_USR/SPATIAL_CSW_ADMIN_USR/MDDATA/MDSYS) системные.
И так описать для всех остальных модулей....Еще можно проверять дату создания юзера и дату установки опции (например, создание пакета/процедуры валидации, поскольку до 10g registry$log не было), но при апгрейдах все может поменяться -- пересоздана процедура валидации, добавлены юзера в OTHER_SCHEMAS
по мотивам твоего запроса
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
  1  select du.username, du.created user_created, do.created opt_created, last_mod opt_modified,
  2                  case when trunc(du.created) = trunc(do.created) then 'on CREATE'
  3                       when trunc(du.created) = trunc(dr.last_mod) then 'on UPDATE'
  4                       when trunc(du.created) > trunc(do.created)
  5                        and trunc(du.created) < trunc(dr.last_mod) then 'Between'
  6                              else '???' end "OK?"
  7  from (select schema username, to_date(modified, 'dd-mon-yyyy hh24:mi:ss') last_mod,
  8               schema owner, regexp_substr(procedure, '[^\.]*') procedure
  9        from dba_registry
 10        where status != 'REMOVED'
 11        union
 12        select regexp_substr(OTHER_SCHEMAS,'[^,]+', 1, level) username,
 13               to_date(modified, 'dd-mon-yyyy hh24:mi:ss') last_mod,
 14               schema owner, regexp_substr(procedure, '[^\.]*') procedure
 15        from dba_registry
 16        where OTHER_SCHEMAS is not null and status != 'REMOVED'
 17        connect by regexp_substr(OTHER_SCHEMAS, '[^,]+', 1, level) is not null) dr,
 18     dba_users du, dba_objects do
 19  where du.username=dr.username
 20  and do.owner=dr.owner and do.object_name=dr.procedure
 21* and object_type in ('PACKAGE', 'PROCEDURE')
ibsotst> /

USERNAME                       USER_CREATED        OPT_CREATED         OPT_MODIFIED        OK?
------------------------------ ------------------- ------------------- ------------------- ---------
SYSTEM                         19-03-2003 12:33:45 19-03-2003 12:38:51 11-11-2016 09:50:41 on CREATE
SYS                            19-03-2003 12:33:44 19-03-2003 12:38:51 11-11-2016 09:50:41 on CREATE
DBSNMP                         19-03-2003 12:56:14 19-03-2003 12:38:51 11-11-2016 09:50:41 on CREATE
WMSYS                          19-03-2003 13:09:57 08-03-2009 14:17:02 11-11-2016 09:50:41 ???
DIP                            08-03-2009 14:10:25 19-03-2003 12:38:51 11-11-2016 09:50:41 Between
OUTLN                          19-03-2003 12:34:04 19-03-2003 12:38:51 11-11-2016 09:50:41 on CREATE
ORACLE_OCM                     08-03-2009 14:15:55 19-03-2003 12:38:51 11-11-2016 09:50:41 Between
APPQOSSYS                      08-03-2013 16:03:21 19-03-2003 12:38:51 11-11-2016 09:50:41 Between

8 rows selected.

Может быть правильней смотреть, что юзер создан ДО последней операции над опцией (апгрейда) ?
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39640853
mblsha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровНасчет пустого dba_users_with_defpwd -- это не всегда возможно
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SQL> select * from dba_users_with_defpwd;

USERNAME
------------------------------
XS$NULL

1 row selected.

SQL> alter user XS$NULL identified by strong1234567890password;
alter user XS$NULL identified by strong1234567890password
                                 *
ERROR at line 1:
ORA-01031: insufficient privileges

SQL> sho user
USER is "SYS"



как не странно, но именно этот момент они учли:
Код: plsql
1.
2.
3.
SELECT USERNAME
FROM DBA_USERS_WITH_DEFPWD
WHERE USERNAME NOT LIKE '%XS$NULL%';


Источник

решил попробовать пойти сначала через dba_dependencies(доступ то у всех уже и так был, но не учитывается если был использован динамический скл), потом dba_users_with_defpwd и на закуску ваше предложение с датой создания юзера и датой установки опции.

Благодарю за участие в обсуждении.
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39640955
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mblshaдополнить весь список системных "опасных" пакетов, дать всем кто этими пакетами пользуется доступ и забрать у PUBLIC, и не мучаться с системными пользователями, или сделать и то и другое - дать доступ и всем кто их использует и всем системным пользователям?

Да зачем мне допуск к системным "опасным" пакетaм, дай мне доступ к одному oracle directory object и база будет существовать до рестарта.

SY.
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39640960
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эти рекомендации немного перебарщивают
Не знаю, чем не угодил DBMS_RANDOM, но всякие network-accessed пакеты с 11g рулятся через XDB ACL, а UTL_FILE через DIRECTORY уже давно (кроме особо упоротых -- я из таких )
Так же не очень понятны ограничения на DBMS_LOB (чтение-запись в файловую систему все равно происходит через DIRECTORY)
Но, как говорится "дура лекс" -- тут главное сначала раздать права всем страждущим по-схемно, а затем только отобрать от PUBLIC
Иначе возможны неприятности
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39640964
mblsha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровЭти рекомендации немного перебарщивают
...
Но, как говорится "дура лекс" -- тут главное сначала раздать права всем страждущим по-схемно, а затем только отобрать от PUBLIC
Иначе возможны неприятности
именно этого и пытаемся избежать...

SYДа зачем мне допуск к системным "опасным" пакетaм, дай мне доступ к одному oracle directory object и база будет существовать до рестарта.

а вот с этого места, пожалуйста по подробней, заинтриговал!
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39640966
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у меня есть право CREATE DIRECTORY, то ничто мне не помешает перезаписать, например, выполняемый файл oracle, или датафайлы
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39640969
mblsha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,

спс, понял...
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39640971
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровЕсли у меня есть право CREATE DIRECTORY, то ничто мне не помешает перезаписать, например, выполняемый файл oracle, или датафайлы

Хуже, просто дай мне READ/WRITE/EXECUTE например на DATA_PUMP_DIR и CREATE TABLE (в моей схeме).

SY.
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39640975
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Естественно, если у меня есть при этом доступ к UTL_FILE, DBMS_LOB, DBMS_FILE_TRANSFER, DBMS_DATA_PUMP, DBMS_BACKUP_RECOVERY и кучи других всяких INT[ERNAL]
В этом случае я согласен, что доступ PUBLIC к этим пакетам надо бы ограничить, хотя опять же без CREATE DIRECTORY они не выстрелят
Но вот почему мешает абсолютно безопасный DBMS_JOB, и не интересен DBMS_SCHEDULER, который позволяет запускать OS-задачи, тоже интересно. Наверное потому, что у него есть свои СИСТЕМНЫЕ права, но ведь для пользователя, владеющем правами на запуск DBMS_SCHEDULER для своих заданий никаких дополнительных прав не нужно
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39640977
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYВячеслав ЛюбомудровЕсли у меня есть право CREATE DIRECTORY, то ничто мне не помешает перезаписать, например, выполняемый файл oracle, или датафайлы

Хуже, просто дай мне READ/WRITE/EXECUTE например на DATA_PUMP_DIR и CREATE TABLE (в моей схeме).

SY.Ну, подскажи на пару минут, потом можешь стереть
Это новая дыра?
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39640979
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
external table + preprocessor

SY.
...
Рейтинг: 0 / 0
how to identify system related users in 11g
    #39640981
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм
Действительно
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / how to identify system related users in 11g
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]