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

Вниз

Авторизация   Найти похожие ветки 

 
Cannon   (2010-06-08 14:06) [0]

Здравствуйте. Подскажите пожалуйста, как по правильному производить авторизацию в программе. Сейчас я делаю отдельную форму куда юзер вводит данные авторизации, под этими данными коннекчусь к БД, затем если соединение установлено, скрываю форму авторизации и запускаю главное окно. В некоторых случаях, когда ОС виснет, у меня форма авторизации не скрывается и запускается главное окно, редко но бывает. А как по правильному делать все это дело? Спасибо.


 
pest ©   (2010-06-08 14:23) [1]

я бы не стал использовать авторизационные данные БД для разграничения доступа к ПО.

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

frmAuth.ShowModal;
if frmAuth.ModalResult <> mrOk then Close;


 
Медвежонок Пятачок ©   (2010-06-08 14:25) [2]

Создаем главную форму.
в ОнКриэейт посылаем себе пользовательское сообщение.
в обработчике создаем модальную форму входа.
при ее закрытии если mrOk получаем данные введенные юзером.

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


 
Dennis I. Komarov ©   (2010-06-08 14:29) [3]


> храни в базе все логины и пароли.

"Ага, и маму в дом. Только мамы нам там и не хватало" (C)


 
pest ©   (2010-06-08 14:32) [4]

2Dennis I. Komarov
сарказм непонятен


 
Dennis I. Komarov ©   (2010-06-08 14:37) [5]

Хранить пароли - недопустимо. Для этого специальные необратимые функции придумали.


 
pest ©   (2010-06-08 14:42) [6]

я вообще паролями к базе не разбрасываюсь.
я бы создал один пароль к бд, создал бы в бд таблицу с юзерами (логин, пароль, id и тд).
во всех таблицах, которые используют юзеры добавил бы колонку с userid.
и при пользовании того или иного пользователя программой делал бы WHERE userid=CurenUserID.
а таблица с пользователями никому не доступна из программы.

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


 
Anatoly Podgoretsky ©   (2010-06-08 14:42) [7]

> Cannon  (08.06.2010 14:06:00)  [0]

Цель (задача) какая? Или ты думаешь, что есть волшебная таблетка?


 
Dennis I. Komarov ©   (2010-06-08 14:44) [8]


> пароли можно в хэше держать

Не можно, а нужно.


 
Anatoly Podgoretsky ©   (2010-06-08 14:45) [9]


> pest ©   (08.06.10 14:42) [6]

Велочсипедостроитель.


 
pest ©   (2010-06-08 14:46) [10]

2Anatoly Podgoretsky
при ответе на сарказм одного пользователя, получил от другого...


 
программер   (2010-06-08 14:49) [11]

запустить скрытой главную форму, создать авторизационную форму, при валидности данных уничтожить авторизационную форму и сделать видимой главную форму.


 
Dennis I. Komarov ©   (2010-06-08 14:50) [12]


> Anatoly Podgoretsky ©   (08.06.10 14:45) [9]

Это не велочсипед, это что-то более страшное...


> pest ©   (08.06.10 14:42) [6]

> во всех таблицах, которые используют юзеры добавил бы колонку
> с userid.


Это как же надо исковеркать БД


 
pest ©   (2010-06-08 14:50) [13]

да и велосипед, рас я его повторно изобрел, был предназначен не для тех, кто о нем уже давно знает, а для тех, у кого вызывает затруднения

> А как по правильному делать все это дело?


 
pest ©   (2010-06-08 14:53) [14]


> Это как же надо исковеркать БД

еще раз повторюсь, что нам не известно что делает программа. может там всего одна таблица в базе, тогда userid не помешает никак. а может там стоит создавать под каждого юзера свою БД. а может под каждого юзера таблицы с префиксами свои...
о каком коверкании может идти речь, если даже структура не известа


 
Cannon   (2010-06-08 14:54) [15]

Всем спасибо. Решил сделать как посоветовал Медвежонок Пятачок.


> Цель (задача) какая? Или ты думаешь, что есть волшебная
> таблетка?


Я же написал цель. За меня ничего писать не надо, и таблеток волшебных не нужно. Да и пишу я на другом языке а не в Delphi. Мне нужно узнать как авторизацию лучше всего организовать, от  более опытных людей.


 
Dennis I. Komarov ©   (2010-06-08 14:57) [16]


> может там всего одна таблица в базе, тогда userid не помешает
> никак. а может там стоит создавать под каждого юзера свою
> БД. а может под каждого юзера таблицы с префиксами свои.
> ..

Бред, не зависимо от функций программы.


> о каком коверкании может идти речь, если даже структура
> не известа

Даже пусть одна таблица и что?


 
Anatoly Podgoretsky ©   (2010-06-08 14:58) [17]

> pest  (08.06.2010 14:53:14)  [14]

Тебе неизвестно, но тем не менее говоришь, так как будто известно и
предлагаешь извращение.


 
Anatoly Podgoretsky ©   (2010-06-08 15:00) [18]

Пишешь на другом языке, а совет по Дельфи.


 
Dennis I. Komarov ©   (2010-06-08 15:00) [19]


> Cannon   (08.06.10 14:54) [15]

Если нет трехзвенной архитектуры, используй средства СУБД.


 
Медвежонок Пятачок ©   (2010-06-08 15:00) [20]

один технологический логин к серверу + система логинов и ролей в БД это не извращение. Это один из возможных способов разграничения доступа.


 
pest ©   (2010-06-08 15:01) [21]


> Даже пусть одна таблица и что?

неужели с логикой все так сложно??

если речь идет об ограничении доступа к программе пользователей, которые будут использовать одни и те же данные, то никакие userid не нужны конечно. а если у каждого пользователя буду в БД свои данные, и дргие пользователя не должны иметь доступ к ним, то userid как раз в тему. особенно если там всего одна таблица и добавлять колонку не придется к сотням таблиц.


 
Медвежонок Пятачок ©   (2010-06-08 15:03) [22]

Если нет трехзвенной архитектуры, используй средства СУБД.

Напиши такую программу а затем поставь в какое нибудь ООО/ИЧП

Затем рассказывай им про создание ролей, групп и раздачу грантов.
А из ит специалистов там студент приходящий раз в месяц да тетушка - специалист по косынке.

Всесь энтузазизм и запал сразу потухнет.


 
Dennis I. Komarov ©   (2010-06-08 15:03) [23]


> Медвежонок Пятачок ©   (08.06.10 15:00) [20]

[6] еще раз... :)


 
pest ©   (2010-06-08 15:05) [24]


> Тебе неизвестно, но тем не менее говоришь, так как будто
> известно и предлагаешь извращение.

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


 
Медвежонок Пятачок ©   (2010-06-08 15:05) [25]

ага [6]. и еще раз [22]


 
Cannon   (2010-06-08 15:06) [26]


> один технологический логин к серверу + система логинов и
> ролей в БД это не извращение. Это один из возможных способов
> разграничения доступа.


Теперь такой вопрос. Если у кого-то сессия зависнет, не будет ли это помехой для других пользователей которые коннектятся под тем же пользователем в БД?


> Если нет трехзвенной архитектуры, используй средства СУБД.
>


меня 2хзвенная архитектура. Можно по подробнее, какие средства СУБД?


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


Потому, что люблю этот форум со времен изучения Delphi)


 
Медвежонок Пятачок ©   (2010-06-08 15:09) [27]

Теперь такой вопрос. Если у кого-то сессия зависнет, не будет ли это помехой для других пользователей которые коннектятся под тем же пользователем в БД?

Сессий много и они разные.


 
pest ©   (2010-06-08 15:10) [28]


> Теперь такой вопрос. Если у кого-то сессия зависнет, не
> будет ли это помехой для других пользователей которые коннектятся
> под тем же пользователем в БД?

абсолютно нет никакой проблемы, потому что коннект к базе все пользователи делают под одними авторизационными данными, а читают из базы исходя из условия WHERE


 
Dennis I. Komarov ©   (2010-06-08 15:10) [29]


> Медвежонок Пятачок ©   (08.06.10 15:05) [25]

И чего? В каждую таблицу добавим поле UID, так? Что-то мне это не так представляется...


 
Медвежонок Пятачок ©   (2010-06-08 15:13) [30]

И чего? В каждую таблицу добавим поле UID, так? Что-то мне это не так представляется...

я не про эти частности говорил. нет у меня никаких ид.
я говорил про два подхода в системе разграничения доступа

1. "правильная", но часто неприменимая практически - все со своими sql аккаунтами

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


 
pest ©   (2010-06-08 15:13) [31]


> Dennis I. Komarov ©   (08.06.10 15:10) [29]

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


 
Anatoly Podgoretsky ©   (2010-06-08 15:18) [32]

> Cannon  (08.06.2010 15:06:26)  [26]

А это зависит от того, какая у тебя СУБД, лучше если она позволяет делать
Windows аутентификацию.


 
Anatoly Podgoretsky ©   (2010-06-08 15:20) [33]

> Медвежонок Пятачок  (08.06.2010 15:13:30)  [30]

В вопросе нет ничего про разграничение доступа, а только про логин.


 
Dennis I. Komarov ©   (2010-06-08 15:21) [34]


> Медвежонок Пятачок ©   (08.06.10 15:13) [30]

А я про [6] :)


> pest ©   (08.06.10 15:13) [31]

Доступ к чему? Вряд ли это будут таблицы, ибо юзеры юзуют GUI...


 
Anatoly Podgoretsky ©   (2010-06-08 15:22) [35]

> pest  (08.06.2010 15:13:31)  [31]

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


 
pest ©   (2010-06-08 15:30) [36]


> Доступ к чему? Вряд ли это будут таблицы, ибо юзеры юзуют
> GUI...

а GUI данные откуда получает для каждого конкретного пользователя?  из БД. а в БД таблицы с данными. а не все данные можно просматривать простому "рабочему", в то вреся как директору можно все...

а загружать все данные в программу и потом уже делать выборку кому показывать а кому не, это как минимум глупо


> Anatoly Podgoretsky ©   (08.06.10 15:22) [35]
выбор из справочника и плюс еще к этому бизнес правила

это что еще?


 
Anatoly Podgoretsky ©   (2010-06-08 15:35) [37]

А это то, что у тебя "не все данные можно просматривать простому", то что правами на таблицы не реализуются, поскольку это не роли, а бизнес правила, при том они могут быть хитрее, чем "простому", например смотреть свои я могу, чужие нет, или мне можно деньги видеть, тебе нет. Или по условию.


 
Dennis I. Komarov ©   (2010-06-08 15:35) [38]


> pest ©   (08.06.10 15:30) [36]

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


 
Anatoly Podgoretsky ©   (2010-06-08 15:40) [39]


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

Ты говоришь не об авторизации и естесвенно путаешь других, ты спрашиваешь про аутентификацию, а тебе пытаются рассказать про авторизацию.


 
Sergey13 ©   (2010-06-08 15:45) [40]

Почти 40 постов, а СУБД так вроде и остается пока неизвестной.


 
pest ©   (2010-06-08 15:49) [41]


> Данные загружаются, после определенного действия, разрешение
> на которые и нужно проверять

не всегда удобно следить за ролями под GUI, иногда написать один простой интерфейс и разграничивать на выборке из базы - является более оптимальным и приемлемым. да и не всегда будет булевая задача "разрешить" или " не разрешить"... можно разрешать запрос из БД, но с каким-то дополнительным условием.
и еще один плюс. в любой момент данные могут быть разрешены или запрещены какойто группе пользователей директором в любой момент используя роли в БД. а через GUI это уже дополнительные задачи...


 
Cannon   (2010-06-08 15:57) [42]


> Почти 40 постов, а СУБД так вроде и остается пока неизвестной.
>


БД Oracle 10g Express Edition, именно в моем данном случаи Администрирования и разграничения ролей нет.


 
pest ©   (2010-06-08 15:59) [43]


> Anatoly Podgoretsky ©   (08.06.10 15:40) [39]

читай внимательнее тогда. проблема заключалась вот в чем

> В некоторых случаях, когда ОС виснет, у меня форма авторизации
> не скрывается и запускается главное окно, редко но бывает.
>

а я предложил не конектиться сразу к БД под неизвестно какими авторизационными данными, а проверять сначала их валидность используя 100% правильный коннект. (> pest ©   (08.06.10 14:23) [1])
и кого же я запутал предложив снять нагрузку с модального окна во избежание повисания?


 
pest ©   (2010-06-08 16:03) [44]


> Cannon   (08.06.10 15:57) [42]
>именно в моем данном случаи Администрирования и разграничения ролей нет.


да, кстати, тут дебаты уже пошли гипотетические. кому-то что-то не понравилось и понеслись)


 
Dennis I. Komarov ©   (2010-06-08 16:05) [45]


> pest ©   (08.06.10 15:49) [41]

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


 
Dennis I. Komarov ©   (2010-06-08 16:11) [46]


> Cannon   (08.06.10 15:57) [42]

Можно узнать, чем обусловлен выбор?


 
Cannon   (2010-06-08 16:11) [47]


> а я предложил не конектиться сразу к БД под неизвестно какими
> авторизационными данными, а проверять сначала их валидность
> используя 100% правильный коннект. (> pest ©   (08.06.10
> 14:23) [1])
> и кого же я запутал предложив снять нагрузку с модального
> окна во избежание повисания?


Если бы коннекта не было, главная форма бы не запустилась. БД выдало бы ошибку: пользователь или пароль не верный, либо проблемы с TNS. Допустим я не проверяю есть ли коннект и пускаю врага в программу, тогда вообще ни одно действие не должно было бы выполниться связанное с таблицами в БД. Форма ввода элементарно иногда не скрывается. А Роли, Администрирование итп я вообще не затрагивал, тему по разграничениям прав доступа не я раздувал.


 
Anatoly Podgoretsky ©   (2010-06-08 16:12) [48]


> читай внимательнее тогда. проблема заключалась вот в чем

Тогда зачем же ты другое рассказывает, ты и рассказывай как избежать зависания формы.


 
Cannon   (2010-06-08 16:14) [49]


> Можно узнать, чем обусловлен выбор?


Выбор заказчика, а ТЗ заказчик списывал с другого ТЗ хотя сам не смыслит ничего в этом. Мои предложения Delphi + MySQL5 не были приняты и приходится писать в C# + Oracle 10g XE


 
Anatoly Podgoretsky ©   (2010-06-08 16:15) [50]


> Cannon   (08.06.10 16:11) [47]

Авторизация это и есть разграничение прав, вот я и говорю, что ты путаешь два разных процесса. У тебя только аутентификация.


 
Игорь Шевченко ©   (2010-06-08 16:15) [51]


> БД Oracle 10g Express Edition


Авторизация средствами операционной системы и FGA ?


 
Cannon   (2010-06-08 16:18) [52]


> Тогда зачем же ты другое рассказывает, ты и рассказывай
> как избежать зависания формы.
>


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


 
Cannon   (2010-06-08 16:23) [53]


> Авторизация это и есть разграничение прав, вот я и говорю,
>  что ты путаешь два разных процесса. У тебя только аутентификация.


Да, прощу прощения. Я всех запутал. ((


 
pest ©   (2010-06-08 16:29) [54]


> Ничего тут оптимального нет...

пример:
в контору поступают заказы. секретарь вбивает все заказы в БД в одну общую таблицу  и для каждого заказа ставит роль 1.

в одно и то же время это таблицей могут пользоваться все, но:
у рабочего отдела выборка WHERE price<10000 OR role=2
у маркетингового отдела выборка WHERE role=1

рабочие могут обрабатывать мелкие заказы (до 10000руб) сразу и смогут получить крупные заказы только тогда, когда отдел маркетинга проверит можно ли давать в производство тот или иной крупный заказ, и поменяет "role" с 2 на 1.

роль 1 - доступ маркетингового отдела.
роль 2 - доступ рабочего отдела.


реализуйте такую задачу на уровне GUI и поговорим об оптимальности!


> Нигде не указывалась булевая сущность разграничения прав
> на действие.


> Dennis I. Komarov ©   (08.06.10 15:35) [38]
> Данные загружаются, после определенного действия, разрешение
> на которые и нужно проверять.

и

> Повторяю - для каждого пользователя свои данные - это бред
> и никуда от этого не денитесь... Данные они одни (одинаковые)
> для всех...

опять же вернусь к тому что просто говорить "бред" нельзя. так как задачи ставятся разные, а как я повторял в (pest ©   (08.06.10 14:42) [6]) и в (pest ©   (08.06.10 14:53) [14]) задача автора не была должным образом изложена. по крайней мере для меня (если для всех она понятна с самого первого поста..)


 
Anatoly Podgoretsky ©   (2010-06-08 16:31) [55]

> Игорь Шевченко  (08.06.2010 16:15:51)  [51]

Windows Autentification?


 
Dennis I. Komarov ©   (2010-06-08 16:44) [56]


> pest ©   (08.06.10 16:29) [54]

Ничего общего сие с авторизацией не имеет. Сие есть признак (статус) заказа.


 
pest ©   (2010-06-08 16:44) [57]


> Допустим я не проверяю есть ли коннект и пускаю врага в
> программу

ну так я разве чтото не так написал?

> проверь можно ли юзера впускать. если можно, то переконнекться
> под нужными авт.данными.

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


 
pest ©   (2010-06-08 16:58) [58]


> Dennis I. Komarov ©   (08.06.10 16:44) [56]

я устал. наша с вами дискуссия изначально не была в помощь теме "авторизации". то пошли негодования по поводу хранения паролей в базе, потом предложенный мной способ разграничения доступа показался чем-то страшным. бредом оказалось использование UID и аналогичное использование ролей не выявило никаких критериев оптимальности... и все это в дальнейшем превратилось в мой оффтоп.

все что я хотел написать я написал в первом посте автору, а дальше лишь ваше упорство.


 
Anatoly Podgoretsky ©   (2010-06-08 17:09) [59]

> Cannon  (08.06.2010 16:18:52)  [52]

Да претензия была не к тебе, к тебе только непонимая разницы между
авторизацией и аутентификацией.


 
Игорь Шевченко ©   (2010-06-08 17:29) [60]

Anatoly Podgoretsky ©   (08.06.10 16:31) [55]

У них это называется OS Authentification


 
Плохиш ©   (2010-06-08 20:14) [61]


> В некоторых случаях, когда ОС виснет, у меня форма авторизации
> не скрывается и запускается главное окно, редко но бывает.
>

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

> Cannon   (08.06.10 16:18) [52]

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

Ввод данных авторизации - создание строки подключения - попытка соединения - дальше действия в зависимости от результата.



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

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

Наверх




Память: 0.65 MB
Время: 0.012 c
2-1276157798
novichek
2010-06-10 12:16
2010.09.05
работа с БД


15-1276115374
Юрий
2010-06-10 00:29
2010.09.05
С днем рождения ! 10 июня 2010 четверг


15-1276254260
novichek
2010-06-11 15:04
2010.09.05
SQL Microsoft.Jet.OLEDB.4.0? Access


2-1276080161
Анна
2010-06-09 14:42
2010.09.05
DataSet и передача параметров (MySQL5.1)


2-1276076418
user_online
2010-06-09 13:40
2010.09.05
Как зафиксировать данные в поле Edit