| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Авторизация в клиентском приложении |
| Автор: BaLaBaXa 22.12.2007, 12:50 |
| Здравствуйте! Я создал некую БД в MS SQL Server 2005 и несколько пользователей с определёнными привилегиями на эту БД. Написал клиентское приложение на Delphi, связанное с этой базой через ADO компоненты. После запуска этого приложения выскакивает форма с полями для логина и пароля и кнопкой. Какой код в методе Click данной кнопки необходимо мне прописать, чтобы данные с полей сравнивались с данными о пользователях на сервере и в случае успешной аутентификации произошёл вход в клиентское приложение. И какие при этом компоненты необходимо использовать? P.S.: Ничего толкового в поиске не нашёл по этому поводу. |
| Автор: BaLaBaXa 22.12.2007, 13:32 | ||||
Нет, я не это имею ввиду. Наоборот, я сам создаю форму, на которой, соответствующие поля и кнопка. Хочу, чтобы вход был по логину и паролю.
Это конечно правильно. Но у меня не такая серьёзная работа. Я курсовую делаю, так что главное чтобы работало. |
| Автор: Exai1e 22.12.2007, 14:19 | ||
Юзер вводит логин пароль. Создаеш запрос к базе
если кол-во возвращенных записей не равно 0 то пускаеш, иначе не пускаеш p.s. это так примерно |
| Автор: BaLaBaXa 22.12.2007, 15:32 | ||
А как в этом случае посчитать кол-во возвращённых записей? Цикл что ли делать и заводить новую переменную? Или как-то по другому можно? Можно поподробнее? |
| Автор: Anark1 22.12.2007, 19:21 | ||||
или
|
| Автор: kobra 23.12.2007, 18:58 |
| рас задача состоит в том чтобы юзер конектился к базе по своему логину, метод предложенный Exai1e-ом не подоидет. так как чтобы запустить запрос, нужно быть уже залогиненним. задача решается двумя способами: 1. включить LoginPrompt и система при конекте сама позаботится осталном. 2. сделать аналог первого варианта в ручную. для этого перед конектом на основе введеннои клиентом олгина и пароля составить строку соединения и передать его в соответствуишее своиство компонента, который обеспечивает соедение и открыть соеденение. |
| Автор: Anark1 23.12.2007, 19:50 |
| kobra, прав только в том случае если речь идет об юзерах на уровне сервера. А если имеем дело с юзерами представленными в бд записями, то Exai1e прав. Соответственно мой пост выше относится ко второму случаю. |
| Автор: BaLaBaXa 23.12.2007, 20:31 | ||||
Нет, у меня LoginPrompt специально отключено...так как использую Windows-аутентификацию. Нет необходимости каждый раз вводить имя и пароль для доступа к серверу.
В смысле "с юзерами представленными в бд записями"? У меня юзеры создаются в разделе Security/Logins на сервере и у каждого свои привилегии на определённые БД. Точнее моё приложение работает только с одной БД. Как тогда мне лучше в этом случае сделать авторизацию? По способу, что предложил kobra или Exai1e и Anark1? Добавлено через 8 минут Попробовал включить LoginPrompt! Теперь коннектится при абсолютно любых логинах и паролях! |
| Автор: Anark1 23.12.2007, 22:01 |
| BaLaBaXa, каким образом ты будешь выполнять запросы к системным таблицам ? Я думал у тебя пользователи представлены в виде записей некоторой таблицы. Естественно, так как у тебя придется формировать строку подключения. Под каждого юзера+првиелегию своя строка будет получаться. |
| Автор: BaLaBaXa 23.12.2007, 22:26 | ||||
После запуска приложения коннект к серверу проиходит автоматически (LoginPrompt отключен), а уже после этого на форме, где поля для логина и пароля, по нажатию кнопки делать запросы. Или это не получится?
А что тут подразумевается под Users? Типа моя собственная таблица с юзерами? У меня её нет...и заводить не хочу. Все юзеры созданы на сервере. Как же быть? |
| Автор: kobra 24.12.2007, 08:40 |
| есть два варианта авторизации 1. по винде так как у тебя авторизация по винде, подклучатся будеш в лубом случае. так как сервер смотрит какои юзер логинится по учетнои записи винды. в таком случае не нужно вводить не логин не парол. веть юзер это уже сделал при входе в винду. 2. по учетке на сервере. вот в этом случае нужно вводить логин и парол. |
| Автор: BaLaBaXa 24.12.2007, 16:42 |
| kobra, я это всё прекрасно знаю! Ещё раз опишу проблему...подробно. У меня стоит MS SQL Server. Вход в него происходит посредством Windows-аутентификации. На сервере есть БД и 3 созданных мною юзера с определёнными привилегиями на эту БД. Также есть клиентское приложение, работающее только с этой БД. У ADOConnection1 свойство LoginPromрt равно False...чтобы не выскакивало каждый раз окошко для ввода логина и пароля. Я хочу, чтобы после запуска этого приложения сначала надо было авторизоваться, чтобы работать в нём. Причём авторизоваться по логину и паролю тех 3-х пользователей, что создал на сервере (которые хранятся в: "Имя сервера"/Security/Logins...ну или в: ("Имя сервера"/Databases/"Имя базы"/Security/Users). Т.е. хранятся не в созданной мною специальной таблице с юзерами. Как же всё-таки это мне сделать? Ничего не получается... :( |
| Автор: Anark1 24.12.2007, 17:00 | ||
| BaLaBaXa, во первых. Тогда не понятно зачем LoginPrompt = false. Пусть бы юзер сам вводил свои логин и пароль. Второе. Можно делать это всё вручную (не знаю зачем, но вдруг). Вручную формируется свойство TADOConnection->ConnectionString.
Соответственно USER ID и Password можно брать из эдитов. |
| Автор: BaLaBaXa 25.12.2007, 14:41 | ||
Потому что, когда оно True, можно войти в прогу с любым логином и паролем. Даже которых в принципе не существует. Ещё раз. Изначально может ошибка? В свойстве ADOConnection1 настроил свойства: ConnectionString => нажал кнопку Build, выбрал Поставщика данных - Microsoft OLE DB Provider for SQL Server. Затем выбрал имя сервера. Для входа в сервер я использовал: "учетные сведения Windows NT", была ещё строка для выбора: "следующие имя и пароль пользователя", но тогда вход был бы всегда только по этим логину и паролю...а мне нужно всегда под разными заходить. LoginPrompt = False, Connected = True. Что не так? Неужели это такая сложная проблема, что мы не можем никак в ней разобраться? |
| Автор: kobra 25.12.2007, 16:39 | ||
постараюс по пунктам: 1. после запуска программы появляется окошко требующая логин и парол. 2. после ввода и клика на ок, программа формирует строку соедения. 3. вот эта строка и записывается в ADOConnection1.ConnectionString. 4. открывается ADOConnection1. |
| Автор: Anark1 25.12.2007, 16:53 | ||
Это почему ? |
| Автор: BaLaBaXa 25.12.2007, 17:08 | ||
Хорошо, я попробую сформировать эту строку без ошибок на основе введённых данных (логин и пароль). Пока не получается... Вот не знаю. Скорее всего, потому что у меня выбрано: "учетные сведения Windows NT" (как я уже писал выше). Видимо чтобы мы не ввели, коннект всё равно происходит по Windows-аутентификации. Поэтому так и получается. |
| Автор: BaLaBaXa 26.12.2007, 17:09 |
| Ребята! Всем спасибо за хорошие советы! Я разобрался с проблемой, теперь всё работает! Тема закрыта. |