powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запретить юзерам доступ не из конкр.программы
7 сообщений из 7, страница 1 из 1
запретить юзерам доступ не из конкр.программы
    #32033817
kri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
kri
Гость
Подскажите, пожалуйста, есть ли способ сделать так, чтобы пользователи могли иметь доступ к базе только из конкретной программы и не могли коннектиться (или читать) из SQL*Plus, SQL Navigator и пр.?
(сервер 7.3)
...
Рейтинг: 0 / 0
запретить юзерам доступ не из конкр.программы
    #32033822
user1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
способ 1
Пароль им не говорить, а прога сама должна коннектиться к базе :)

способ №2 (Оракловый пароль по-прежнему не сообщаем)

Мы завели свою таблицу юзеров и паролей к ним, и соответственно в трех программах наших они вводят свои пароли, а наши проги уже соединяються с базой под одним и тем же паролем и пользователем(Оракловым), показывая в зависимости от прав пользователей (наших собственных хитрых прав из нашей собственной тиблицы юзеров) те или иные пункты меню нашей программы (Delphi 5)

p.s. Естественно пароль из нашей собственной таблицы наших собственных пользователей пользователю надо сообщить, правда эти пользователи все обменялись своими паролями, чтобы не ходить за правами к админу программы :)

Но мы поставили аудит и если что, то знаем кому стучать по голове.
...
Рейтинг: 0 / 0
запретить юзерам доступ не из конкр.программы
    #32033824
kri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
kri
Гость
Спасибо за идею, а нет ли такого способа, чтобы не переписывать софт, т.е. можно ли делать проверку на сервере?
...
Рейтинг: 0 / 0
запретить юзерам доступ не из конкр.программы
    #32033833
олег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
c 8i можно делать триггеры на LOGON
в 7 наверное нужно из приложения процедуру проверяющую запускать, которая например будет включать выключенную по умолчанию роль в зависимости от коннектящегося приложения.
...
Рейтинг: 0 / 0
запретить юзерам доступ не из конкр.программы
    #32033899
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея с "enable role" конечно хорошая, но у неё есть ряд недостатков. Помнится по весне (март) этот вопрос очень долго и нудно обсуждался...
...
Рейтинг: 0 / 0
запретить юзерам доступ не из конкр.программы
    #32033900
vskv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... и каждый остался при своём мнении :)
...
Рейтинг: 0 / 0
запретить юзерам доступ не из конкр.программы
    #32034064
SAA_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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;

------------------------------------------------
Остальное додумывайте сами, исправляйте, обсуждайте. Этот код не претендует на гениальность, но все же тоже способ решить проблему. В данном коде есть уязвимые места: вызывается как джоб, переодически и если другой джоб запущен от имени реально работающего пользователя, то он будет убит, если конечно ему не прописать полный доступ.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запретить юзерам доступ не из конкр.программы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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