Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Многопользовательность в БД [D7, IB6.x]


Страницы:   1 2

Inkotex ©   (2003-05-05 19:34:00) 

Может кто подскажет как реалезовать правильно(нормально) в interbase многопользовательский доступ к БД с заданием разных уровней доступа к даным?
Спасибо


Zacho   (2003-05-06 10:58:00) [1]


> Johnmen © (06.05.03 10:12)
> Правильно подмечено...:)

Еще бы не правильно :-) Явную чушь спорол :(
В общем, после подключения надо выполнить запрос:
SELECT COUNT(*) FROM RDB$USER_PRIVILEGES WHERE RDB$USER=:USER_NAME AND RDB$PRIVILEGE="M" AND RDB$RELATION_NAME=:ROLE_NAME
Если вернет 0 - значит нет у такого пользователя прав на эту роль.
Кстати, а никто не знает способ проще ?


Johnmen   (2003-05-06 10:12:00) [2]

>Zacho © (06.05.03 02:50)
>Че-то кажется я прогнал

Правильно подмечено...:)


Zacho   (2003-05-06 02:50:00) [3]


> Inkotex (06.05.03 02:30)

Может быть и не можешь еще :-)
Че-то кажется я прогнал :-( Самому спать вовремя надо было :-)
Кажется мне что при подключении ты ошибку не получишь. Придется проверять послеподключения к базе, и если надо - отключаться. В общем, проверь, а то я уже плохо соображаю, спать надо.


Inkotex   (2003-05-06 02:30:00) [4]

Большое спосибо Zacho, теперь я могу спокойно ити спать:)


Zacho   (2003-05-06 02:28:00) [5]


> Inkotex (06.05.03 02:16)

Правильно. Делаешь что-то типа:

заполнение Params
try
Database.Connect;
except
подключиться не удалось, обрабатываем ошибку подключения, выдаем сообщение и т.п.
end;


Inkotex   (2003-05-06 02:16:00) [6]

Ага я наконец понял (надеюсь)
Типа при логине указывается имя пароль роль
Например Vasya ***** God
и тогда имя и пароль провереется в IB (users)
а соответсвие имени к даной роле в конкретной БД
и типа если в базе было указано Grant god to Vasya, тогда все ок
если нет и типа вася связан с другой ролю то должна выдаватся ошибка. Я правильно понемаю?
Тогда к примеру реализуется в програме соответствующая форма (логин) к де по событию нажатию на кнопке ете даные передаються в IBDatabase и там проверяються.


Zacho   (2003-05-06 02:12:00) [7]


> Inkotex (06.05.03 02:03)

Какая-то рассинхронизация у нас между постами пошла :-)

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

Пусть сам выбирает себе роль. Если выберет роль, на которую у него нет прав - при попытке подключения получишь ошибку. Обработай ее ( try .. except .. ) и выдавай какое-либо сообщение или что-нибудь делай.
Еще можешь где-нибудь держать список пользователей и допустимых для них ролей. При выборе имени пользователя брать из этого списка роль. Но это имхо криво.


Zacho   (2003-05-06 02:05:00) [8]


> Inkotex (06.05.03 01:43)
> Как в програме при логине связываеться введеное имя >пользователя с ролю, потому что у меня не работает почемуто.

Никак. Роль указываетсяпри логине. Какую роль укажешь - с такой юзер и подключится, конечно если у него есть права на эту роль.


Inkotex   (2003-05-06 02:03:00) [9]

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


Zacho   (2003-05-06 01:53:00) [10]


> Inkotex (06.05.03 01:16)

Кажется, я понял что ты хочешь. Если что не так, поправь.
Предположим, тебе надо, чтобы было три группы юзеров. Администраторы, операторы, и, скажем гости - у каждой группы свои права. Создаешь три роли (например, administrator, operator, guest), назначаешь им нужные права. После этого при создании нового пользователя даешь ему права на одну из этих ролей (или даже на несколько ролей - вполне реальная ситуация, когда один и тот же пользователь может подключиться к БД и как админ и как оператор). В диалоге подключения (обычно он же - форма входа в программу) делаешь поля ввода для имени пользователя, пароля и комбобокс для выбора роли (можешь обозвать его "Роль" или "Группа" или "Профиль" или еще как-нибудь, главное чтобы юзеру было понятно что это такое) с тремя итемами - "Администратор", "Оператор", "Гость". В обработчике нажатия кнопки "Ok" (или где тебе там надо) подставляешь в Database.Params введенные юзером имя и пароль, и, в зависимости от того, что выбрано в комбобоксе, имя роли.
Естественно, это только довольно абстрактный пример, конкретная реализация - зависит от твоей задачи.


Inkotex   (2003-05-06 01:43:00) [11]

Да я понимаю что пользователе для всех бд на сервере
а каждая конкретная бд имеет свои роли и тд..

Я некак не могу доехать хотя понимаю что ето должно и есть очивидное.

После того как делаеш пользоватилей, роли, после того как в БД
делаеш GRANT SOME_ROLE TO SOME_USER, что дальше?

Как в програме при логине связываеться введеное имя пользователя с ролю, потому что у меня не работает почемуто.


Zacho   (2003-05-06 01:30:00) [12]


> Inkotex (06.05.03 01:21)

Правильно понимаешь. Но не только для этого.

> Inkotex (06.05.03 01:16)

В IB пользователи заводятся на сервер, т.е. общий список пользователей для всех БД на конкретном сервере. А в каждой конкретной БД можно создать свои роли дать какие-либо права на объекты именно этой БД конкретым пользователям и/или ролям.

> Тут мне не совсем понятно что дальше + юзери програми могут
> быть только те которые обявлени в IB (users)я так понемаю?

Опять же, правильно понимаешь ;-) (только не программ, а БД), а в чем затруднения ?


Inkotex   (2003-05-06 01:21:00) [13]

Давать юзерам права так намного проще но когда много юзеров будет и много таблиц, процедур + несколько юзеров с одними и теми задачами ето не выход для етого как я понимаю и есть роли.


Inkotex   (2003-05-06 01:16:00) [14]

Проблема у меня одна что в теории все понятно как надо
а на практике получается совсем не то.
Я хочу сделать например
есть база есть програма несколько пользоватилей
сделать несколько пользоватилей с полним доступом делит, инсерт
несколько пользователей с доступом только на выборку селект
+ несколько на селект но всех даных(таблиц)
В базе делаю соответствующии роли с указаниям Grant на соответствующии таблицы и процедуры
Потом через Grant в IBConsole связываю роль с юзерам GRANT SOME_ROLE TO SOME_USER
Тут мне не совсем понятно что дальше + юзери програми могут быть только те которые обявлени в IB (users)я так понемаю?


Zacho   (2003-05-06 01:08:00) [15]

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


Zacho   (2003-05-06 00:56:00) [16]


> Inkotex (06.05.03 00:50)

Да примеры у меня большие довольно. И выдирать из них нужные куски - во-первых лень, во-вторых черевато тем, что получится что-то непонятное и неработающее :-)
Лучше опиши свою проблему, может я (или кто другой) что-нибудь и посоветую.


Inkotex   (2003-05-06 00:50:00) [17]

Zacho может у тебя есть готовий пример базы + прога на Delphi?
был бы признателен так я точно пойму где ошибку делаю.


Zacho   (2003-05-06 00:37:00) [18]


> Inkotex (06.05.03 00:27)

Да можешь и понадоедать, пока я спать не лег :-)


Inkotex   (2003-05-06 00:27:00) [19]

Спасибо Zacho небуду больше надоедать как небуть уже разберусь
главное я знаю что я на правильном пути.


Zacho   (2003-05-06 00:23:00) [20]


> Inkotex (06.05.03 00:00)

Кажись, ты не догоняешь две вещи :-)
1. Вовсе не нужно делать по роли на каждого юзера. Как раз наоборот, роли нужны чтобы особенно не морочиться с раздачей прав юзерам. Принцип такой: создал роль, дал ей нужные права, потом просто даешь нужным пользователям право подключаться с этой ролью. Например GRANT SOME_ROLE TO VASYA,PETYA,KOLYA,KATYA. Если это делать без ролей, то нужно каждому юзеру давать все необходимые права, что гораздо морочнее. Кроме того, ролей может быть несколько с разными правами. И, естественно, у разных юзеров могут быть права на разные роли.
2. "Прошивать" роль в Params вовсе не обязательно, обычно делается как раз наоборот - в диалоге подключения к БД пользователь может выбрать нужную роль. Или у тебя проблемы с работой с Params в run-time ? Ну там уж совсем все просто, нужно знать азы программирования на Object Pascal и немного почитать хелп по IBX (или тем компонентам, которыми ты пользуешься)
P.S. IB Console - глюкотень еще та. Список инструментов для работы с IB есть на http://www.ibase.ru/d_tools.htm
Лично мне больше всего нравится IB Expert.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо