Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Вниз

(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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.047 c
2-1155864068
Wood
2006-08-18 05:21
2006.09.10
Сохранить в INI стиль шрифта.


2-1155782970
Broz
2006-08-17 06:49
2006.09.10
Поиск


15-1155632808
StriderMan
2006-08-15 13:06
2006.09.10
Отличие делфишного CASE от сишного SWITCH


3-1152171333
Maverick
2006-07-06 11:35
2006.09.10
TADOQuery+output параметры


15-1155810587
besevl
2006-08-17 14:29
2006.09.10
Прошу совета





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский