|
запретить юзерам доступ не из конкр.программы
|
|||
---|---|---|---|
#18+
Подскажите, пожалуйста, есть ли способ сделать так, чтобы пользователи могли иметь доступ к базе только из конкретной программы и не могли коннектиться (или читать) из SQL*Plus, SQL Navigator и пр.? (сервер 7.3) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2002, 15:09 |
|
запретить юзерам доступ не из конкр.программы
|
|||
---|---|---|---|
#18+
способ 1 Пароль им не говорить, а прога сама должна коннектиться к базе :) способ №2 (Оракловый пароль по-прежнему не сообщаем) Мы завели свою таблицу юзеров и паролей к ним, и соответственно в трех программах наших они вводят свои пароли, а наши проги уже соединяються с базой под одним и тем же паролем и пользователем(Оракловым), показывая в зависимости от прав пользователей (наших собственных хитрых прав из нашей собственной тиблицы юзеров) те или иные пункты меню нашей программы (Delphi 5) p.s. Естественно пароль из нашей собственной таблицы наших собственных пользователей пользователю надо сообщить, правда эти пользователи все обменялись своими паролями, чтобы не ходить за правами к админу программы :) Но мы поставили аудит и если что, то знаем кому стучать по голове. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2002, 15:23 |
|
запретить юзерам доступ не из конкр.программы
|
|||
---|---|---|---|
#18+
Спасибо за идею, а нет ли такого способа, чтобы не переписывать софт, т.е. можно ли делать проверку на сервере? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2002, 15:38 |
|
запретить юзерам доступ не из конкр.программы
|
|||
---|---|---|---|
#18+
c 8i можно делать триггеры на LOGON в 7 наверное нужно из приложения процедуру проверяющую запускать, которая например будет включать выключенную по умолчанию роль в зависимости от коннектящегося приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2002, 16:10 |
|
запретить юзерам доступ не из конкр.программы
|
|||
---|---|---|---|
#18+
Идея с "enable role" конечно хорошая, но у неё есть ряд недостатков. Помнится по весне (март) этот вопрос очень долго и нудно обсуждался... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2002, 02:30 |
|
запретить юзерам доступ не из конкр.программы
|
|||
---|---|---|---|
#18+
... и каждый остался при своём мнении :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2002, 02:31 |
|
запретить юзерам доступ не из конкр.программы
|
|||
---|---|---|---|
#18+
CREATE OR REPLACE VIEW ISMV_SESSION_RESTRICT ( USERID, USERNAME, RESTRICT, RESTRICT_NO, SID, SERIAL# ) AS select userid, username, restrict, min(restrict_no), sid, serial# from ( (select t1.userid, t3.username, 'A' restrict, nvl(t2.restrict_no, 998) restrict_no, t3.sid, t3.serial# from ism_user t1, ism_active_task_restrict t2, sys.v_$session t3 where t2.userid(+) = t1.userid and t3.username = t1.username(+) and t3.status <> 'KILLED' and nvl(t1.status, 'A') = 'A' and nvl(nvl(t2.osuser, t3.osuser), 'X') = nvl(t3.osuser, 'X') and nvl(nvl(t2.terminal, t3.terminal), 'X') = nvl(t3.terminal, 'X') and nvl(substr(t3.machine, 1, length(t3.machine) - 1), 'X') = nvl(nvl(t2.machine, substr(t3.machine, 1, length(t3.machine) - 1)), 'X') and upper(nvl(nvl(t2.program, t3.program), 'X')) like '%' || upper(nvl(t3.program, 'X')) || '%' and 86400 * (sysdate - trunc(sysdate)) >= nvl(t2.from_dt, 0) and 86400 * (sysdate - trunc(sysdate)) <= nvl(t2.to_dt, 86401) and 86400 * (sysdate - t3.logon_time) <= nvl(t2.idle_time, 86400 * (sysdate - t3.logon_time)) ) union ( select t1.userid, t3.username, 'D' restrict, nvl(t2.restrict_no, 999) restrict_no, t3.sid, t3.serial# from ism_user t1, ism_active_task_restrict t2, sys.v_$session t3 where t2.userid(+) = t1.userid and t3.username = t1.username(+) and t3.status <> 'KILLED' and ( nvl(t1.status, 'A') <> 'A' or nvl(nvl(t2.osuser, t3.osuser), 'X') <> nvl(t3.osuser, 'X') or nvl(nvl(t2.terminal, t3.terminal), 'X') <> nvl(t3.terminal, 'X') or nvl(substr(t3.machine, 1, length(t3.machine) - 1), 'X') <> nvl(nvl(t2.machine, substr(t3.machine, 1, length(t3.machine) - 1)), 'X') or upper(nvl(nvl(t2.program, t3.program), 'X')) not like '%' || upper(nvl(t3.program, 'X')) || '%' or 86400 * (sysdate - trunc(sysdate)) < nvl(t2.from_dt, 0) or 86400 * (sysdate - trunc(sysdate)) > nvl(t2.to_dt, 86401) or 86400 * (sysdate - t3.logon_time) > nvl(t2.idle_time, 86400 * (sysdate - t3.logon_time)) ) ) ) restr1 group by userid, username, restrict, sid, serial# CREATE TABLE ISM_ACTIVE_TASK_RESTRICT ( USERID NUMBER (6) NOT NULL, RESTRICT_NO NUMBER (3) NOT NULL, OSUSER VARCHAR2 (30), MACHINE VARCHAR2 (64), TERMINAL VARCHAR2 (16), PROGRAM VARCHAR2 (64), FROM_DT NUMBER (10), TO_DT NUMBER (10), IDLE_TIME NUMBER (10) ) ; procedure j_restrict_task_kill as cursor c_drop is select t1.*, t2.terminal, t2.machine, t2.osuser from ismv_session_restrict t1, sys.v_$session t2 where t1.restrict = 'D' and t2.sid = t1.sid and t2.serial# = t1.serial# and t2.username = t1.username; v_permit ismv_session_restrict%rowtype; v_flag boolean; v_text varchar2(2000); v_session sys.v_$session%rowtype; v_cursor number; v_prom number; begin begin select distinct username into v_text from ismv_session_restrict where username = 'ISM_RESTRICT_STOP' and restrict = 'A'; aum.p_syslog_module('BTBJ0001', 'ISM restrict connection checking is stopped by supervisor connection: ISM_RESTRICT_STOP.'); commit; exception when no_data_found then for v_drop in c_drop loop begin select * into v_permit from ismv_session_restrict where restrict = 'A' and username = v_drop.username and sid = v_drop.sid and serial# = v_drop.serial#; if v_permit.restrict_no <= v_drop.restrict_no then v_flag := false; else v_flag := true; end if; exception when no_data_found then v_flag := true; end; if v_flag then v_text := 'USER = ' || v_drop.username || ' (' || v_drop.sid || ', ' || v_drop.serial# || ') TERMINAL = <' || v_drop.terminal || '>, MACHINE = <' || v_drop.machine || '>, OSUSER = <' || v_drop.osuser || '>.'; aum.p_syslog_module('BTBJ0001', 'Not allowed connection! ' || v_text); v_text := 'ALTER SYSTEM KILL SESSION ''' || v_drop.sid || ', ' || v_drop.serial# || ''''; v_cursor := dbms_sql.open_cursor; dbms_sql.parse(v_cursor, v_text, dbms_sql.v7); aum.p_syslog_module('BTBJ0001', 'Attemt to perform SQL query: ' || v_text); commit; begin v_prom := dbms_sql.execute(v_cursor); dbms_sql.close_cursor(v_cursor); aum.p_syslog_module('BTBJ0001', 'SQL query executed: ' || v_text); commit; begin select * into v_session from sys.v_$session where sid = v_drop.sid and serial# = v_drop.serial# and username = v_drop.username; aum.p_syslog_module('BTBJ0001', 'Not allowed connection for ' || v_drop.username || ' (' || v_drop.sid || ', ' || v_drop.serial# || ') status: ' || v_session.status); commit; exception when no_data_found then aum.p_syslog_module('BTBJ0001', 'Not allowed connection for ' || v_drop.username || ' (' || v_drop.sid || ', ' || v_drop.serial# || ') status: DISCONNECTED'); commit; end; exception when others then aum.p_syslog_module('BTBJ0001', 'SQL query execution trubles! ' || sqlerrm); commit; end; end if; end loop; end; end; END ISM; ------------------------------------------------ Остальное додумывайте сами, исправляйте, обсуждайте. Этот код не претендует на гениальность, но все же тоже способ решить проблему. В данном коде есть уязвимые места: вызывается как джоб, переодически и если другой джоб запущен от имени реально работающего пользователя, то он будет убит, если конечно ему не прописать полный доступ. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.06.2002, 22:30 |
|
|
start [/forum/topic.php?fid=52&msg=32033833&tid=1993292]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 136ms |
0 / 0 |