Гость
Форумы / Informix [игнор отключен] [закрыт для гостей] / настройка прав для выполнения процедуры / 21 сообщений из 21, страница 1 из 1
22.07.2011, 13:54
    #37363049
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
Добрый день,

создаю процедуру

CREATE PROCEDURE public.sysdbopen()
SET LOCK MODE TO WAIT 5;

select sysadmin:task("set sql user tracing off",DBINFO('sessionid')) colname from sysadmin:sysusers
into temp ttt_express with no log;
drop table ttt_express;

END PROCEDURE;

после создания данной процедуры ни 1 юзер,включая дба и informix, не может подключиться к базе.если убираю селект-все работает.Сам селект отдельно тоже работает из-под юзера,которому дал права на базу sysadmin.

Самое интересное то,что если я создаю эту же процедуру в своей схеме,то все хорошо.Как только я пишу public-я не могу приконнектится.

Куда копать,подскажите плиз?
...
Рейтинг: 0 / 0
22.07.2011, 13:58
    #37363057
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
LudeV,

да,забыл сказать.ругается он no connect permission
...
Рейтинг: 0 / 0
22.07.2011, 14:15
    #37363094
klepa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
Ну так дайте права на коннект ;-)
...
Рейтинг: 0 / 0
22.07.2011, 14:18
    #37363101
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
klepa,

права на коннект дал себе на все базы.да и создавая эту процедуру в своей схеме все работает же.
...
Рейтинг: 0 / 0
22.07.2011, 17:20
    #37363528
DrGonzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
LudeV,

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

Проблема в том что из соображений безопасности у public нет пермишена на коннект к БД sysadmin.

У меня все заработало после того как сделал GRANT CONNECT TO public; для sysadmin.
...
Рейтинг: 0 / 0
25.07.2011, 09:40
    #37365184
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
DrGonzo,

дал права public на все базы,поменял процедуру sysdbopen() и теперь не могу никем приконнектиться(

ни dbaccess,ни server studio..Как можно запустить informix,чтобы перекомпиллять процедуру обратно?
...
Рейтинг: 0 / 0
25.07.2011, 10:39
    #37365275
victor16
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
LudeVDrGonzo,

дал права public на все базы,поменял процедуру sysdbopen() и теперь не могу никем приконнектиться(

ни dbaccess,ни server studio..Как можно запустить informix,чтобы перекомпиллять процедуру обратно?
Установить переменную окружения IFX_NODBPROC в любое значение, например 1
...
Рейтинг: 0 / 0
25.07.2011, 10:40
    #37365277
DrGonzo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
LudeV,

из документации:

To avoid situations in which a database cannot be opened, take the following precaution while you are writing and debugging a sysdbopen procedure:

Set the IFX_NODBPROC environment variable before you connect to the database. When IFX_NODBPROC is set, the procedure is not executed, and failures cannot prevent the database from opening. .
...
Рейтинг: 0 / 0
25.07.2011, 10:52
    #37365305
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
LudeVDrGonzo,
дал права public на все базы,поменял процедуру sysdbopen() и теперь не могу никем приконнектиться(
логичней было бы сделать процедуру, от пользователя информикс и дать грант execute on this_procedure to public, и ее уже вызывать из public.sysdbopen()

а вообще текст процедуры вызывает вопросы, нафига временная таблица?????
...
Рейтинг: 0 / 0
25.07.2011, 11:44
    #37365428
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
Журавлев Денис,

спасибо большое за мысль.все получилось.

создал процедуру informix.sysdbopen(), дал в ней права public,а из процедуры public.sysdbopen просто вызываю informix.sysdbopen, внутри которой уже вызываю task()...

всем спасибо
...
Рейтинг: 0 / 0
25.07.2011, 11:48
    #37365451
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
LudeVЖуравлев Денис,

спасибо большое за мысль.все получилось.

создал процедуру informix.sysdbopen(), дал в ней права public ,а из процедуры public.sysdbopen просто вызываю informix.sysdbopen, внутри которой уже вызываю task()...

всем спасибочего чего ? Код в студию
...
Рейтинг: 0 / 0
25.07.2011, 14:02
    #37365736
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
Журавлев Дениса вообще текст процедуры вызывает вопросы, нафига временная таблица?????
Наверное чтобы с циклом не заморачиваться....
Но что больше всего смущает - зачем при коннекте каждого пользователя, отключать трейс всем пользователям...
...
Рейтинг: 0 / 0
25.07.2011, 14:05
    #37365745
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
АнатоЛойЖуравлев Дениса вообще текст процедуры вызывает вопросы, нафига временная таблица?????
Наверное чтобы с циклом не заморачиваться....
Но что больше всего смущает - зачем при коннекте каждого пользователя, отключать трейс всем пользователям...
сорри, точнее зачем при коннекте пользователя отключать этой сессии трейс столько раз подряд, сколько описано пользователей в БД...[/quot]
...
Рейтинг: 0 / 0
25.07.2011, 18:09
    #37366284
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
вот что получилось:

Код: plaintext
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.
36.
37.
38.
39.
40.
41.
42.
DROP PROCEDURE informix.sysdbopen();

CREATE PROCEDURE informix.sysdbopen()
define fuser char( 15 );
SET LOCK MODE TO WAIT  5 ;
begin work;
delete from informix.ttt_user where  1 = 1 ;
system "/var/logs/test.sh";
commit;
select distinct name into fuser from informix.ttt_user;
if fuser in (*****) then
  select sysadmin:task("set sql user tracing on",DBINFO('sessionid')) colname from prime206:sysusers
  into temp ttt_express1 with no log;
end if;

END PROCEDURE;

-- Permissions for routine "sysdbopen"
grant execute on procedure 'informix'.sysdbopen() to 'public';
grant select on informix.ttt_user to public;
grant insert on informix.ttt_user to public;
grant delete on informix.ttt_user to public;




DROP PROCEDURE public.sysdbopen();

CREATE PROCEDURE public.sysdbopen()
execute procedure informix.sysdbopen();
end procedure;



все хорошо работает:трассируются только нужные юзеры,но у меня вопрос:можно ли как-то обойтись без создания постоянной таблицы ttt_user?

текст скрипта:
#!/bin/bash
. /usr/prime/bin/setonenv
/usr/bin/whoami > /var/logs/test.log
echo " load from /var/logs/test.log insert into informix.ttt_user" | dbaccess ****

можно ли как-то передать в переменную fuser пользователя,под которым происходит коннект, средствами базы?
может есть какая-нить табличка информиксовая?

спасибо
...
Рейтинг: 0 / 0
25.07.2011, 23:10
    #37366605
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
а по проще никак не? Как такой вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE PROCEDURE informix.sysdbopen()
SET LOCK MODE TO WAIT  5 ;
if user in (*****) then
  execute procedure sysadmin:task("set sql user tracing on",DBINFO('sessionid'));
end if;
END PROCEDURE;
...
Рейтинг: 0 / 0
26.07.2011, 09:30
    #37366821
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
Журавлев Денис,

спасибо большое за совет.да,действительно так проще,но вызывать исполнение процедуры так и не получилось.Если я пишу execute procedure sysadmin:task, то при коннекте выдает ошибку
SQL Error (-684): Function (sysadmin:informix.task) returns too many values.

Пишу свой селект из этой же функции-все норм.Как правильно вызвать процедуру в таком случае?


спасибо
...
Рейтинг: 0 / 0
26.07.2011, 09:45
    #37366839
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
LudeVЖуравлев Денис,

спасибо большое за совет.да,действительно так проще,но вызывать исполнение процедуры так и не получилось.Если я пишу execute procedure sysadmin:task, то при коннекте выдает ошибку
SQL Error (-684): Function (sysadmin:informix.task) returns too many values.

Пишу свой селект из этой же функции-все норм.Как правильно вызвать процедуру в таком случае?


спасибовы как вообще догадались вместо user использовать whoami ? Эта переменная стандартна для всех субд.

строка там возращается, ее надо куда-нибудь сложить. И неплохо бы проверить что в той строке, удалось не удалось включить трассировку, и залогировать в табличку в случае проблемы.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE PROCEDURE informix.sysdbopen()
define ret_val varchar( 255 );

if user in (*****) then
  execute procedure sysadmin:task("set sql user tracing on",DBINFO('sessionid')) into ret_val;
end if;
END PROCEDURE;
...
Рейтинг: 0 / 0
26.07.2011, 09:50
    #37366845
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
Журавлев Денис,

вчера не догадался насчет user,поэтому пришлось извращаться(((

спасибо
...
Рейтинг: 0 / 0
26.07.2011, 10:02
    #37366857
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
написав select sysadmin:task() colname from prime206:sysusers вы трассировку включили очень много раз, столько сколько пользователей в базе prime206, об этом уже выше писал Анатолий.

Если нужен аналог: select * from dual пишите либо
select * from systables where tabid=99 либо
select * from table(set{1})
...
Рейтинг: 0 / 0
26.07.2011, 10:16
    #37366880
LudeV
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
Журавлев Денис,

я понял.спасибо большое
...
Рейтинг: 0 / 0
26.07.2011, 10:17
    #37366881
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
настройка прав для выполнения процедуры
хотя да, уже
select * from sysmaster:sysdual
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / настройка прав для выполнения процедуры / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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