Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

(InterBase)Многопользовательский доступ к БД разных пользователей   Найти похожие ветки 

 
DmitrichJ   (2006-06-30 00:06) [0]

Вот такой вот вопрос: Есть БД (InterBase 6) на сервере в которой есть список пользователей. Например Петров,Сидоров и т.д. Господин Сидоров запускает программу (подключается БД) выбирает себя из списка (к этому можно добавить пароль и т.п.) и начинает работу с данными. Всё хорошо. Господин Петров у себя запускает программу и...
1. Не мог бы зайти под именем Сидорова т.к. он сейчас работает с данными
2. Войдя под собой мог бы видеть кто сейчас работает с БД.

Заранее благодарю, уважаемые коллеги=) Вопрос очень важный!


 
DrPass ©   (2006-06-30 00:23) [1]

Список активных пользователей в базе данных можно получить, например, через TIBDatabaseInfo.UserNames. Естественно, уже только после подключения к базе данных. Т.е. в твоем случае приложение сначала должно войти в базу под каким-нибудь технологическим логином, раздобыть список активных пользователей, соответственно подкорректировать господину Петрову его списочек, и дать ему войти под собой


 
Fay ©   (2006-06-30 00:39) [2]

2 DmitrichJ   (30.06.06 0:06)
Такие вещи лучше всего лечатся многозвенкой


 
DmitrichJ   (2006-06-30 00:59) [3]

Запуск программы уже подразумевает подключение к БД и получению списка пользователей. Что значит "технологическим логином"? Можно пару слов об этом?

Для меня это новое. Опробую и обращусь, скорей, всего ещё раз.


 
DmitrichJ   (2006-06-30 01:51) [4]

var
 s:tstringlist;
begin
 s:=TIBDatabaseInfo.UserNames;

говорит мол что нет такого метода. что не так?


 
Desdechado ©   (2006-06-30 10:32) [5]

DmitrichJ   (30.06.06 00:59) [3]
Чтобы прочитать список пользователей, нужно подключиться к БД. А чтобы подключиться к БД, нужно спросить логин-пароль. Если пользователь не вводит, а выбирает, значит, программа должна подключиться к БД заранее с каким-то специальным аккаунтом ("технологическим логином").

> подкорректировать господину Петрову его списочек
Это значит - "убрать из полного списка пользователей тех, кто уже подключен", чтобы "1. Не мог бы зайти под именем Сидорова т.к. он сейчас работает с данными".

Детально по IB читать на русском ibase.ru


 
DrPass ©   (2006-06-30 10:47) [6]


DmitrichJ   (30.06.06 01:51) [4]
>  s:=TIBDatabaseInfo.UserNames;
>
> говорит мол что нет такого метода. что не так?

Вероятно, у тебя старая версия компонент IBX, скачай обновление


 
Sergey13 ©   (2006-06-30 10:48) [7]

2[0] DmitrichJ   (30.06.06 00:06)
>Вопрос очень важный!
Согласен. Но вопрос не из области программирования, ИМХО. Сидоров, как и Петров, не говоря уже об Иванове должны знать только свои логины/пароли. При этом им должно быть фиолетово кто сейчас работает в БД одновременно с ним.


 
PEAKTOP ©   (2006-06-30 11:49) [8]


> Desdechado ©   (30.06.06 10:32) [5]
>
> DmitrichJ   (30.06.06 00:59) [3]
> Чтобы прочитать список пользователей, нужно подключиться
> к БД. А чтобы подключиться к БД, нужно спросить логин-пароль.
>  Если пользователь не вводит, а выбирает, значит, программа
> должна подключиться к БД заранее с каким-то специальным
> аккаунтом ("технологическим логином").
>


Т.е. ты хочешь сказать, что прога будет коннектиться с каким либо аккаунтом к security.fdb (isc4.gdb)с правами на чтение списка пользователей. А как она его знает ? Хранит в файле, реестре и т.д. ? Тоды на фиг вообще авторизация, коннекться под sysdba-masterkey, создай таблицу  tb_users прямо в базе и храни там пароли, русские имена пользователей можно запихнуть...

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


 
Desdechado ©   (2006-06-30 12:09) [9]

> прога будет коннектиться с каким либо аккаунтом к security.fdb
Я такого не говорил. Это служебная БД и к ней цепляться - дурной тон. Тем паче к ней в FB2 вообще запретили коннект.
А технологический логин может где-то храниться в зашифрованном виде.

> А если безопасность не по барабану
То лучше, чтоб юзеры не знали своих настоящих логинов-паролей в БД, а то особо вумные смогут посторонними средствами ходить в БД. Видел я такое.


 
PEAKTOP ©   (2006-06-30 13:29) [10]


> То лучше, чтоб юзеры не знали своих настоящих логинов-паролей в БД...

Тогды в чем вопрос ? коннекться под sysdba ( А технологический логин может где-то храниться в зашифрованном виде) к базе, создай там таблицу пользователей TB_USR, в которой можно будет хранить и русские имена пользователей, а также таблицу блокировок TB_LOCK, чтобы нельзя было подконнектиться дважды под одним аккаунтом.
TB_LOCK будет хранить дату последнего обращения, а клиентская прога по таймеру пусть туда пишет записи, и при коннекте проверяй дату последнего обращения к базе. Если она больше интревала таймера умноженного на два - пускай в базу.
Почему нельзя просто писать в какое либо поле подключен/неподключен при коннекте/дисконнекте -  юзверь може прибить прогу через диспетчер задач и тогда больше никода в базу не попадет.


 
PEAKTOP ©   (2006-06-30 13:33) [11]


> 2. Войдя под собой мог бы видеть кто сейчас работает с БД.

Ну а это через селект из TB_LOCK, где дата последнего обращения больше "текущая дата" минус ("интервала таймера" умнож. на два).


 
Desdechado ©   (2006-06-30 13:56) [12]

PEAKTOP ©   (30.06.06 13:29) [10]
> коннекться под sysdba
Глупо. Ибо эта учетная запись имеет все права, а технологическому логину можно дать очень ограниченные. Да и пароль все равно где-то хранить надо, так лучше хранить ограниченный.

> Почему нельзя просто писать в какое либо поле подключен/неподключен
Именно поэтому лучше так не делать. Достаточно хранить имена пользователей и их логины. А проверить подключенность логина можно через специальные средства IB API, а не самопальщиной.


 
DmitrichJ   (2006-06-30 19:38) [13]


> Т.е. ты хочешь сказать, что прога будет коннектиться с каким
> либо аккаунтом к security.fdb (isc4.gdb)с правами на чтение
> списка пользователей. А как она его знает ? Хранит в файле,
>  реестре и т.д. ? Тоды на фиг вообще авторизация, коннекться
> под sysdba-masterkey, создай таблицу  tb_users прямо в базе
> и храни там пароли, русские имена пользователей можно запихнуть.
> ..

Вообщето я это и имел ввиду, что список будет в самой базе, но чтобы начать работать с остальными данными, ножино типа зарегистрироваться. И есть ещё один интересный ньюанс. Допустим Петров взял запись на редактирование, и пока он изменяет данные в форме, Сидоров не мог бы редактировать эту запись.

сижу блин и голову ломаю...


 
DmitrichJ   (2006-06-30 19:43) [14]


> Тогды в чем вопрос ? коннекться под sysdba ( А технологический
> логин может где-то храниться в зашифрованном виде) к базе,
>  создай там таблицу пользователей TB_USR, в которой можно
> будет хранить и русские имена пользователей, а также таблицу
> блокировок TB_LOCK, чтобы нельзя было подконнектиться дважды
> под одним аккаунтом.
> TB_LOCK будет хранить дату последнего обращения, а клиентская
> прога по таймеру пусть туда пишет записи, и при коннекте
> проверяй дату последнего обращения к базе. Если она больше
> интревала таймера умноженного на два - пускай в базу.
> Почему нельзя просто писать в какое либо поле подключен/неподключен
> при коннекте/дисконнекте -  юзверь може прибить прогу через
> диспетчер задач и тогда больше никода в базу не попадет.
>


Вот именно так и я сразу решил сделать. Но думаю насколько хорошо будет запускать запросы на запись с 15 компов постоянно. И что делать если юзер неккоректно выйдет из проги. Как записать в поле что он отключён???


 
DmitrichJ   (2006-06-30 19:45) [15]

И объясните мне, про технологический логин. Как физически писать прогу?


 
Виталий Панасенко   (2006-06-30 22:47) [16]


> DmitrichJ   (30.06.06 19:45) [15]
> И объясните мне, про технологический логин. Как физически
> писать прогу?

За тебя написать не нужно ?


 
DrPass ©   (2006-07-01 01:41) [17]


> И что делать если юзер неккоректно выйдет из проги. Как
> записать в поле что он отключён???

Вот в частности поэтому и не придумывай никакой ерунды, а делай стандартными средствами, которые уже подсказали.

> И объясните мне, про технологический логин. Как физически
> писать прогу?

Что непонятно? Как залогиниться, получить список пользователей, отключиться и снова залогиниться под другим логином, что ли?


 
ЮЮ ©   (2006-07-01 06:30) [18]


> Допустим Петров взял запись на редактирование, и пока он
> изменяет данные в форме, Сидоров не мог бы редактировать
> эту запись.
>
> сижу блин и голову ломаю...


Cмотри
http://delphimaster.net/view/3-1151493853/
и ссылки


 
Андрей Пазик   (2006-07-02 23:04) [19]

DmitrichJ   (30.06.06 0:06)
Есть БД (InterBase 6)

Шел 2006 год, а партизаны все продолжали пускать под откос фашистские поезда. В какой глухомани вы живете?


 
DrPass ©   (2006-07-03 01:48) [20]


> Андрей Пазик   (02.07.06 23:04) [19]

Ты состоишь в секте противников Interbase 6?


 
atruhin ©   (2006-07-04 08:07) [21]

> Ты состоишь в секте противников Interbase 6?

А зачем состоять? Самая глючная версия.


 
Desdechado ©   (2006-07-04 10:52) [22]

> Самая глючная версия.
это 5.5
а шестерка нормальная


 
Андрей Пазик   (2006-07-04 17:34) [23]

> это 5.5
> а шестерка нормальная

Ты только никому этого не говори :)
Количество багов, поправленных разработчиками Firebird в коде IB 6.0 исчисляется сотнями.
На sql.ru за использование IB 6.0 пожизненный растрел через повешение.


 
DrPass ©   (2006-07-04 18:20) [24]


> Андрей Пазик   (04.07.06 17:34) [23]

Баги там, может, и есть... но я, как запустил в 2002 году бек-офис в одной конторе на IB6, так он с тех пор и работает в режиме 24*7 и никаких ошибок, кроме сдохшего однажды винта. В любом случае, глюки СУБД - штука оччень специфическая, на них еще надо постараться попасть


 
Андрей Пазик   (2006-07-05 10:39) [25]

Не, конечно если тупые запросы типа select * from aaa, то и IB 6.0 пойдет.
Однако в этого чуда огромные косяки с дедлоками, неоднозначности в результатах запросов и т.д. и т.п.


 
DrPass ©   (2006-07-05 11:10) [26]

Тупые запросы на выборку (пусть даже не из aaa, а из десятка таблиц с разнообразными объединениями) - это в большинстве приложений 90% их работы. А до

> огромных косяков с дедлоками

дело не доходит. Ты же знаешь типичную схему работы с Interbase - одна постоянно открытая read-only транзакция и кратковременные транзакции записи. Приложения на ней обычно строятся так, что там просто нечему конфликтовать.


 
Desdechado ©   (2006-07-05 11:29) [27]

Андрей Пазик   (04.07.06 17:34) [23]
> Ты только никому этого не говори :)
Уверяю тебя, в любом софте есть ошибки. И то, что в IB6 нашли и исправили что-то в FB, это нормально. Причем эти "сотни" тянутся в большинстве своем еще с версии 5.0.
Да и в самом FB их не меньше.
Просто есть версии стабильные, а есть не очень. Так вот IB6, IB5.6 - стабильные, IB5.5 - совсем не очень.
А ошибка ошибке рознь. На некоторые ты за всю свою жизнь не наскочишь.
Я, например, гоняю сервера в очень разнообразных режимах. И (карма у меня такая) вечно ловлю какие-то глюки в любом софте. Так вот в IB я поймал только однажды некоторую недоработку, устранявшуюся через backup-restore. А в оракле, например, каждый месяц по глюку, который устаняется только очередным патчем. Один до сих пор с завидной регулярностью хватаю (всеми любимый ORA-600 - ошибка ядра).



Страницы: 1 вся ветка

Текущий архив: 2006.09.10;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.049 c
15-1150837157
Strate
2006-06-21 00:59
2006.09.10
Opera 9 Final!!!


15-1155342176
belly_tiamat
2006-08-12 04:22
2006.09.10
Протокол HILTI дальномер PD28


1-1154181099
Destroyer
2006-07-29 17:51
2006.09.10
Строковый тип и nil


2-1156254920
GeLLeR
2006-08-22 17:55
2006.09.10
Вопросик по ShellApi


15-1155715787
Furyz
2006-08-16 12:09
2006.09.10
Борьба со спамом