Идентификация пользователя в приложении

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

Модератор: kdv

Ответить
DIC
Сообщения: 8
Зарегистрирован: 22 апр 2005, 09:36

Идентификация пользователя в приложении

Сообщение DIC » 22 апр 2005, 09:48

Каким образом лучше огранизовать идентификацию пользователя в приложении.
Вообщем необходимо сохранить РЕАЛЬНОЕ(ИВАНОВ А.Ю.) имя пользователя при изменении им записи в БД.
Помоему в FB или IB усть уже описание имен пользователей с реальными именами и т.п.
Вопрос как получить эти имена в своем приложении если известен текущий пользователь БД.
Может у кого пример или общая структура работы подобного рода есть.
Очень был бы признателен за помощь....

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

Сообщение kdv » 22 апр 2005, 10:24

у тебя база одна? создай в ней таблицу users...

DIC
Сообщения: 8
Зарегистрирован: 22 апр 2005, 09:36

Сообщение DIC » 22 апр 2005, 10:29

kdv писал(а):у тебя база одна? создай в ней таблицу users...
База одна.
Тоесть вы предлагаете создать свой список пользователей...
С нормальным описанием...
Но тогда предётся постоянно следить за соответствием моей таблици и системной Users
Хотя наверно можно и так....

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 25 апр 2005, 12:29

Можно на клиенте подозвать АПИшную функцию ГетЮзерНэйм она даст имя текущего залогиненого юзера под виндой, и это имя писать в лог. т.е. не плодить своих юзеров, а брать доменные имена.

DSKalugin
Сообщения: 212
Зарегистрирован: 27 окт 2004, 13:39

Сообщение DSKalugin » 25 апр 2005, 21:02

Ivan_Pisarevsky писал(а):Можно на клиенте подозвать АПИшную функцию ГетЮзерНэйм она даст имя текущего залогиненого юзера под виндой, и это имя писать в лог. т.е. не плодить своих юзеров, а брать доменные имена.
Совершенно верно, я тоже так делаю, но только не ЮзерНэйм, а КомпьютерНэйм. Так надежней. Думаю, объяснять не надо почему.
Вот пример как ее вызывать

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

function GetPCName:AnsiString; 
var P:array [0..MAX_COMPUTERNAME_LENGTH] of char;
    n:DWord;
begin
  GetComputerName(P,n);
  Result:=AnsiString(P);
end;

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 26 апр 2005, 08:39

Совершенно верно, я тоже так делаю, но только не ЮзерНэйм, а КомпьютерНэйм. Так надежней. Думаю, объяснять не надо почему.
Если на клиенте вин9х, то надежность все равно никакая... если клиенты НТишные, то пофигу, хоть юзернэйм, хоть КомпутерНэйм, но если на компе работает несколько юзеров с разными именами, то ЮзерНэйм поприятней будет.

Лысый
Сообщения: 177
Зарегистрирован: 08 ноя 2004, 08:20

Сообщение Лысый » 26 апр 2005, 08:40

DSKalugin писал(а):Совершенно верно, я тоже так делаю, но только не ЮзерНэйм, а КомпьютерНэйм. Так надежней. Думаю, объяснять не надо почему.
Вариант с таблицей user мне представляется предпочтительным. Нет привязки пользователя к конкретному ПК, т.е. любой пользователь м. работать с любого рабочего места.

DSKalugin
Сообщения: 212
Зарегистрирован: 27 окт 2004, 13:39

Сообщение DSKalugin » 26 апр 2005, 11:50

Ivan_Pisarevsky писал(а):Если на клиенте вин9х, то надежность все равно никакая...
Ошибаешься! Очень даже большая! Попробуй в момент авторизации на вин9х нажать ESC и посмотри что выдаст тебе GetUserName. Правильно - бред, т.к. юзер остался неопределен. А имя компьютера всегда будет постоянным и УНИКАЛЬНЫМ в пределах подсети.
А Юзер ROOT или вообще Administrator могут быть на любом ПК в сети. Отсюда отсутствие уникальности и надежности.
Ivan_Pisarevsky писал(а):но если на компе работает несколько юзеров с разными именами, то ЮзерНэйм поприятней будет.
Им влом будет переключаться, поверь. Да и время колхозов, где хозяйство было коллективным давно прошло. Сейчас у каждого своя персоналка.
Лысый писал(а):Нет привязки пользователя к конкретному ПК, т.е. любой пользователь м. работать с любого рабочего места.
Это неправильная организация рабочего процесса.
Надо привязывать иначе бардака не избежать.
Например, это отдел продаж. В конце месяца будут большие споры о том кому платить комиссионные, потому что вспомнить кто что продавал в течении месяца будет уже сложно. Менеджер Вася мог продать мерседес с Пашиного компьютера, потому что за своим ПК в тот момент сидел охранник Миша и смотрел порно по интернету. А поскольку в этот момент Пашин комп был занят Васей, ему пришлось толкнуть самокат с компа директора...
Бардак вобщем. В итоге Паше, продавшему самокат, обвалятся комиссионные с мерседеса, а Васе, продавшему мерс, будет выговор от админа за коллекцию троянов, а из денег вообще ничего не обвалится :-)) и т.д.

Лысый
Сообщения: 177
Зарегистрирован: 08 ноя 2004, 08:20

Сообщение Лысый » 26 апр 2005, 12:46

DSKalugin писал(а):
Лысый писал(а):Нет привязки пользователя к конкретному ПК, т.е. любой пользователь м. работать с любого рабочего места.
Это неправильная организация рабочего процесса.
Надо привязывать иначе бардака не избежать....
Прикольно у тебя получается :) Коммунизм какой то: "Каждому юзеру по компьютеру!". У нас, например, организованы рабочие места: человек приходит садится, проходит идентификацию на уровне приложения, а не оси, и работает себе без всяких проблем. Ушел - приложение закрыл. Ты где то видишь здесь бардак?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 26 апр 2005, 12:57

Им влом будет переключаться, поверь. Да и время колхозов, где хозяйство было коллективным давно прошло. Сейчас у каждого своя персоналка.
Как далеки они были от народа... (с) Ты когда-нидь сталкивался с таким убожеством как 1с? так вот этот зверь при приличной нагрузке может работать только на терминал-сервере... А терминал сервера используют не только ОдинЭсники... Амбиснять что выдасть ГетЮзерНэйм и ГетКомпутерНэйм на терминал-сервере когда на нем десяток другой меджерско-бухгалтерских рыл?

А вин9х надо вообще изживать как класс, у меня вон их только пять осталось, еще 2 в скором времени похерю, правда 3 штуки изжить не удается, но они уже составляют меньше десятой доли всего парка.

DSKalugin
Сообщения: 212
Зарегистрирован: 27 окт 2004, 13:39

Сообщение DSKalugin » 26 апр 2005, 13:01

Я оспаривал вариант, когда имя пользователя определяется системной функцией GetUserName, которую тут предложил Ivan_Pisarevsky
Если же авторизация происходит во время запуска программы путем выбора из списка таблицы "юзеров" то все очень красиво

Brambrulet
Сообщения: 9
Зарегистрирован: 10 ноя 2004, 22:33

Сообщение Brambrulet » 27 апр 2005, 14:36

А пароля, как я понял, пользователям вводить не требуется?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 27 апр 2005, 16:40

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

DIC
Сообщения: 8
Зарегистрирован: 22 апр 2005, 09:36

Сообщение DIC » 27 апр 2005, 20:56

Ivan_Pisarevsky писал(а):Если держать в базе своих собственные юзеров, то можно и пароли, а так зашел юзер в виндовый домен, пущщай пароли контролер домена проверяет, один раз на входе, а дальше зачем пароли? просто берем уже готовое имя пользователя и все.
А есть возможность всё таки взять имя пользователя из служебных таблиц Firebird или InterBase там же вроде и имя пользователя и его реальное имя и даже коментартии?
Вопрос только как? Мне кажится что если это возможно, то это самый лучший вариант. Просто написать например UDF функцию которая бы возвращала необходимые данные о пользователе...
Только вот как......??????
Есть соображения....может ктото делал...?

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

Сообщение Merlin » 27 апр 2005, 21:09

Взять? Кто доку читал, делал и неоднократно. Покласть - несколько сложнее, но тоже делали.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 28 апр 2005, 08:45

Мне кажится что если это возможно, то это самый лучший вариант.
Вариант может быть лучшим только в конкретно взятых условиях. :wink:
Я вот помимо программирования под интербейз еще и админ сети предприятия и вести 2 разных списка юзеров для домена и интербейза мне не улыбается, уж я завел юзера в домен и все, нефиг его копировать, я ему уже полномочий надовал, все хватит.
В принципе свой вариант "на кошечках" я уже прикинул, вроде нормально, может и в боевые программы запихаю, или подожду когда очередная версия ФБ поддержит аутентификацию через виндовый (самбовский) домен.

Лысый
Сообщения: 177
Зарегистрирован: 08 ноя 2004, 08:20

Сообщение Лысый » 28 апр 2005, 09:01

Ivan_Pisarevsky писал(а):
Мне кажится что если это возможно, то это самый лучший вариант.
Вариант может быть лучшим только в конкретно взятых условиях. :wink:
Если потребуется разграничение прав в приложении, то права в домене тебе не помогут...

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 28 апр 2005, 10:26

Вобщем-то да, но у меня была мысль примерно такого плана: в БД добавляю таблицу юзерс
тд_юзера инт /* ну тут ясно */
имя_юзера варчар /* берем из домена */
доступ_к_списку клиентов инт /*ставим галочки, например, 0 нефиг, 1 читаем, 2 пишем*/
доступ_к_списку_номенклатуры инт /*аналогично клиентам*/
доступ_к_расходным_накладнухам инт
...

Клиентское приложение на старте берет имя пользователя ГетЮзерНэйм сверяет его с таблицей юзерс если его там нет то закрываемся клоус и все, если оное нашлось, то играемся со свойством кнопочек Энэйблед, если, например, юзеру запрещено менять реквизиты клиента, то делаем для него кнопочку "редактирование реквизитов" дисэблед и тд.
Всего в базе таблиц около сотни, а более крупных сущностей типа СписокКлиентов, РеестрПрихода, Нормативы ... можно по пальцам пересчитать мне кажется легче будет права распределять, чем на уровне дополнительной аутентификайии юзера на ИБ сервере и правах доступа к таблицам, опять же юзеру не надо помнить 2 пароля и вводить пароль на старте программы не надо.

Ну примерно такие мысли...

Ответить