По Role подскажите, плиз

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

По Role подскажите, плиз

Сообщение Kotъ-Begemotъ » 12 фев 2008, 19:39

Что-то я не понял - вот есть у меня пользователь, есть роль, мне же надо явно указать что данный пользователь ИМЕЕТ ПРАВО подключения с этой ролью? А допустим забыл я это сделать, при попытке подключения этого пользователя с этой ролью, разве ошибка не должна возникать? А не возникает... Всё гладко проходит. Я так и не понял что в этом случае происходит? Пользователь просто под своим именем подключается, так же как если бы он вообще роль при коннекте не указал?

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 12 фев 2008, 19:48

Гм... Вроде разобрался. Действительно не ругалась прога просто потому, что ничего не открывалось - никаких таблиц :) А как только попытался открыть таблицу на которую у пользователя прав нет, а у роли есть, тут и получил ошибку...
Хотя странно... По идее ведь ошибка должна возникать при попытке логина с незаданной пользователю ролью? Как считаете?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 фев 2008, 00:45

По идее ведь ошибка должна возникать при попытке логина с незаданной пользователю ролью? Как считаете?
да тут и считать нехрен, достаточно прочитать
www.ibase.ru/devinfo/sqlroles.htm
или описание ролей в доке. тем более, что роли в IB еще с версии 5.0.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 13 фев 2008, 01:47

kdv писал(а):
По идее ведь ошибка должна возникать при попытке логина с незаданной пользователю ролью? Как считаете?
да тут и считать нехрен, достаточно прочитать
www.ibase.ru/devinfo/sqlroles.htm
или описание ролей в доке. тем более, что роли в IB еще с версии 5.0.
Перечитал всё по ролям. Нигде явно не указывается что при попытке юзера подключиться с указанием роли, которая ему не была грантована, не должно возникать ошибки... ИМХО, как-то не очень очевидно. Вот скажем, DBA ревокнул у этого юзера данную роль. А юзер, получается будет логиниться как обычно, указывать роль, и чесать репу - почему не получается проапдейтить/удалить скажем... Ведь при логине он никакого сообщения не получал!!! А просто втихаря залогинился как если бы без указания роли...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 13 фев 2008, 03:35

не должно возникать ошибки...
а где написано, что ошибка должна возникать?
!!! А просто втихаря залогинился как если бы без указания роли...
ну и нормально. роль отобрана, юзер прав роли лишился.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 13 фев 2008, 03:38

kdv писал(а):
не должно возникать ошибки...
а где написано, что ошибка должна возникать?
!!! А просто втихаря залогинился как если бы без указания роли...
ну и нормально. роль отобрана, юзер прав роли лишился.
Только он-то об этом не знает! Хорошо если у него без роли вообще прав никаких, даже на select - тогда он при попытке первый же датасет отлуп получит... А если разница только в 2-3 табличках на которые у юзера нет INSERT и DELETE а у роли есть? Человек будет работать в системе некоторое время как бы и успешно, а потом откуда ни возьмись появляется... ошибачга!!
"Предупреждать надо!" ©

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 13 фев 2008, 10:48

ну а ошибку то зачем ? ошибок быть не долно, ручками проверяй и будет тебе счастье, после подключения проверяешь

Код: Выделить всё

select current_role from rdb$database
и если не соответсвует предупреждаешь юзвера

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 13 фев 2008, 13:14

Kotъ-Begemotъ писал(а): "Предупреждать надо!" ©
Щазз, только шнурки отпарим. В общем случае пользователь даже слова "роль" знать не должен, чтоб не хитрил и не пытался лазать мимо приложения. Не получается - и всё. Почему - потому что нех.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 13 фев 2008, 16:27

Merlin писал(а):
Kotъ-Begemotъ писал(а): "Предупреждать надо!" ©
Щазз, только шнурки отпарим. В общем случае пользователь даже слова "роль" знать не должен, чтоб не хитрил и не пытался лазать мимо приложения. Не получается - и всё. Почему - потому что нех.
Ну я и не имел в виду ему технческие сообщения выдавать об отсутствии гранта на роль :))) Просто обрабатывать такие ситуации разработчику, имхо, всё равно придётся, а то некрасиво может получиться... В принципе через CURRENT_ROLE попробую...

Vit
Сообщения: 19
Зарегистрирован: 05 ноя 2005, 03:22

Сообщение Vit » 16 фев 2008, 18:47

Kotъ-Begemotъ писал(а):
kdv писал(а):
не должно возникать ошибки...
а где написано, что ошибка должна возникать?
!!! А просто втихаря залогинился как если бы без указания роли...
ну и нормально. роль отобрана, юзер прав роли лишился.
Только он-то об этом не знает! Хорошо если у него без роли вообще прав никаких, даже на select - тогда он при попытке первый же датасет отлуп получит... А если разница только в 2-3 табличках на которые у юзера нет INSERT и DELETE а у роли есть? Человек будет работать в системе некоторое время как бы и успешно, а потом откуда ни возьмись появляется... ошибачга!!
"Предупреждать надо!" ©
Ну так и сделай чтоб у юзера без роли прав не было даже на Select, а раздачу прав осуществлять на уровне ролей, соответственно все permissions на объекты базы присваивать не пользователям а ролям. Если есть права и у пользователей и у ролей то ИМХО это неправильно построенная система безопасности. Оправдано присваивать права пользователю, а не роли, только если под этой ролью предполагается всегда только один пользователь и лень задавать для него отдельную роль. Например, пользователь IB_Bashi :lol: :lol: :lol: .

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 17 фев 2008, 01:42

Vit писал(а):Ну так и сделай чтоб у юзера без роли прав не было даже на Select, а раздачу прав осуществлять на уровне ролей, соответственно все permissions на объекты базы присваивать не пользователям а ролям. Если есть права и у пользователей и у ролей то ИМХО это неправильно построенная система безопасности. Оправдано присваивать права пользователю, а не роли, только если под этой ролью предполагается всегда только один пользователь и лень задавать для него отдельную роль. Например, пользователь IB_Bashi :lol: :lol: :lol: .
У меня так и сделано. У Public доступ на SELECT к единственной таблице - таблице пользователей, поскольку мне надо кое-что оттуда вытаскивать... А уж когда юзер найден в этой таблице, и сделаны необходимые дополнительные проверки, он и коннектится с нужной ролью... Вопрос возник потому, что непонятно откуда возникла ошибка, а анализ показал, что я просто забыл для одного юзера грантовать эту роль... В результате логин проходил нормально, но при попытке открыть рабочие таблицы возникала ошибка, так как без роли у юзера нет прав даже на SELET... Теперь придётся вводить дополнительную проверку на CURRENT_ROLE чтобы гарантировать, что всё прошло как надо... Мало ли.

Ответить