powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / настройка прав для выполнения процедуры
21 сообщений из 21, страница 1 из 1
настройка прав для выполнения процедуры
    #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
настройка прав для выполнения процедуры
    #37363057
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LudeV,

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

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

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

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

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

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

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

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

ни dbaccess,ни server studio..Как можно запустить informix,чтобы перекомпиллять процедуру обратно?
Установить переменную окружения IFX_NODBPROC в любое значение, например 1
...
Рейтинг: 0 / 0
настройка прав для выполнения процедуры
    #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
настройка прав для выполнения процедуры
    #37365305
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LudeVDrGonzo,
дал права public на все базы,поменял процедуру sysdbopen() и теперь не могу никем приконнектиться(
логичней было бы сделать процедуру, от пользователя информикс и дать грант execute on this_procedure to public, и ее уже вызывать из public.sysdbopen()

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

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

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

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

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

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

всем спасибочего чего ? Код в студию
...
Рейтинг: 0 / 0
настройка прав для выполнения процедуры
    #37365736
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Дениса вообще текст процедуры вызывает вопросы, нафига временная таблица?????
Наверное чтобы с циклом не заморачиваться....
Но что больше всего смущает - зачем при коннекте каждого пользователя, отключать трейс всем пользователям...
...
Рейтинг: 0 / 0
настройка прав для выполнения процедуры
    #37365745
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойЖуравлев Дениса вообще текст процедуры вызывает вопросы, нафига временная таблица?????
Наверное чтобы с циклом не заморачиваться....
Но что больше всего смущает - зачем при коннекте каждого пользователя, отключать трейс всем пользователям...
сорри, точнее зачем при коннекте пользователя отключать этой сессии трейс столько раз подряд, сколько описано пользователей в БД...[/quot]
...
Рейтинг: 0 / 0
настройка прав для выполнения процедуры
    #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
настройка прав для выполнения процедуры
    #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
настройка прав для выполнения процедуры
    #37366821
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев Денис,

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

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


спасибо
...
Рейтинг: 0 / 0
настройка прав для выполнения процедуры
    #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
настройка прав для выполнения процедуры
    #37366845
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев Денис,

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

спасибо
...
Рейтинг: 0 / 0
настройка прав для выполнения процедуры
    #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
настройка прав для выполнения процедуры
    #37366880
LudeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев Денис,

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


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