Роли и пользователь

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
Anark1
Сообщения: 26
Зарегистрирован: 28 июн 2007, 00:52

Роли и пользователь

Сообщение Anark1 » 05 авг 2007, 13:43

У меня есть 1 пользователь (помимо PUBLIC и SYSDBA). Клиент соединяется с БД через этого пользователя, но для каждого клиента этому пользователю придаются разные роли. У разных ролей соответственно разные полномочия.
Вопрос такой.
Я не дал абсолютно никаких прав этому пользователю, рассчитывая на то, что права доступа будут определять роли. Но этого не произошло. Как разобраться с ситуацией?
Три роли. У первой - все операции над всеми таблицами, у второй - SELECT надо всеми таблицами, у третьей - SELECT над всеми и INSERT над двумя.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Роли и пользователь

Сообщение Dimitry Sibiryakov » 05 авг 2007, 17:31

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

Anark1
Сообщения: 26
Зарегистрирован: 28 июн 2007, 00:52

Сообщение Anark1 » 05 авг 2007, 17:55

Я вот не понимаю. Это сложно дать нормальный ответ, все объяснить? Меня такие люди добивают.<< Я знаю, но не скажу.>>

AnryGTR
Сообщения: 116
Зарегистрирован: 15 янв 2007, 15:58

Сообщение AnryGTR » 06 авг 2007, 09:10

2 Anark1:
поосторожнее со своими репликами!
Просто вопрос надо ставить понятно и тогда обязательно получишь ответ, мне например - данный форум не раз помогал, за что и спасибо всем кто ответил и кто его создал! 8)

Slavik
Сообщения: 115
Зарегистрирован: 17 янв 2007, 11:52

Re: Роли и пользователь

Сообщение Slavik » 06 авг 2007, 09:50

Anark1 писал(а):Я не дал абсолютно никаких прав этому пользователю, рассчитывая на то, что права доступа будут определять роли. Но этого не произошло. Как разобраться с ситуацией?
Тупой вопрос: Клиент точно указывает роль при коннекте? При коннекте под этим пользователем с ролью в IBExpert'е тоже нет прав?

Anark1
Сообщения: 26
Зарегистрирован: 28 июн 2007, 00:52

Сообщение Anark1 » 06 авг 2007, 13:49

1. Работаю с BlazeTop
2. Оболочку пишу в C++ Builder

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

Main->IBDatabase1->Params->Append("user_name=ESTAB");
        Main->IBDatabase1->Params->Append("password=estab");
        Main->IBDatabase1->Params->Append("sql_role_name="+ROLE);
        Main->IBDatabase1->Params->Append("lc_ctype=WIN1251");
        Main->IBDatabase1->Connected = true;
ROLE - "LOW"\"MED"\"HIGH"
Коннект происходит, ошибок нет. Единственное что можно еще сделать - это половить экспешины, хотя мне не понятно в чем ошибка.

P.S.
А то что Dimitry Sibiryakov посоветовал мне почитать тоерию, а затем её подправить, это вообще весело. Где мне теорию подправить? :lol:
А начитался я достаточно.

Slavik
Сообщения: 115
Зарегистрирован: 17 янв 2007, 11:52

Сообщение Slavik » 06 авг 2007, 15:16

Anark1 писал(а):1. Работаю с BlazeTop
Какая разница? Или он не позволяет приконнектиться с ролью?
Anark1 писал(а):А начитался я достаточно.
Не внимательно читаешь. Повторюсь. В IBExpert'е (или BlazeTop'е) при коннекте под пользователем "ESTAB" с ролями "LOW""MED""HIGH" тоже нет прав на на заданные действия с таблицами базы? Под отладчиком значение переменной ROLE и сформированного Params перед выполнением строки:

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

Main->IBDatabase1->Connected = true;
cмотрел?

Anark1
Сообщения: 26
Зарегистрирован: 28 июн 2007, 00:52

Сообщение Anark1 » 06 авг 2007, 16:26

1. Подскажи SQL Script для соединения с БД под ролью.
2. У переменной ROLE нужное значение.
3. В дебаге у IBDatabase->Params->Strings значение Getter:Get, Setter:Put. Очевидно, что это что то не то.

Anark1
Сообщения: 26
Зарегистрирован: 28 июн 2007, 00:52

Сообщение Anark1 » 06 авг 2007, 18:25

Посмотрел
IBDataBase->Params->Text
Все верно.

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

Сообщение Merlin » 06 авг 2007, 18:37

Anark1 писал(а): 2. У переменной ROLE нужное значение.
Поди в смысле - все три роли махом? Или таки одна, но у пользователя нет на неё прав?

Anark1
Сообщения: 26
Зарегистрирован: 28 июн 2007, 00:52

Сообщение Anark1 » 06 авг 2007, 20:10

Нет, или "LOW", или "MED", или "HIGH".
Что значит "у пользователя нет прав на роль" ?

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

Сообщение Merlin » 06 авг 2007, 20:17

Anark1 писал(а): Что значит "у пользователя нет прав на роль" ?
Это значит невнимательное чтение доки. Про то, что пользователь может входить только с теми ролями, кои ему грантованы.

Anark1
Сообщения: 26
Зарегистрирован: 28 июн 2007, 00:52

Сообщение Anark1 » 06 авг 2007, 21:14

Merlin,
огромное спасибо, моё упущение.
Странно только, что ошибки никакой не выскакивает в такой ситуации.

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

Сообщение Merlin » 06 авг 2007, 22:11

Anark1 писал(а): Странно только, что ошибки никакой не выскакивает в такой ситуации.
Не, не странно. Логика такая - чем меньше пользователь приложения знает о системе доступа, тем лучше. Ему вообще не надо знать, что существуют какие-то там роли. Скажем, полезет сильно умный интерактивным инструментом общего назначения что-нить курочить, логин-пароль ввёл, а всё равно ему облом и почему - не сказано, дабы не направлять творческую мысль.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 07 авг 2007, 15:45

Все было бы проще, если бы аффтар догадался посмотреть на результаты SELECT CURRENT_ROLE FROM RDB$DATABASE...

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

Сообщение kdv » 09 авг 2007, 08:04

все было бы проще, если бы автор внимательно читал
www.ibase.ru/devinfo/sqlroles.htm

а то вроде как читал, а получается что нет.

Ответить