Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация в клиентском приложении, через MS SQL Server 2005 
V
    Опции темы
BaLaBaXa
Дата 22.12.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Здравствуйте!

Я создал некую БД в MS SQL Server 2005 и несколько пользователей с определёнными привилегиями на эту БД. Написал клиентское приложение на Delphi, связанное с этой базой через ADO компоненты. После запуска этого приложения выскакивает форма с полями для логина и пароля и кнопкой.

Какой код в методе Click данной кнопки необходимо мне прописать, чтобы данные с полей сравнивались с данными о пользователях на сервере и в случае успешной аутентификации произошёл вход в клиентское приложение. И какие при этом компоненты необходимо использовать?

P.S.: Ничего толкового в поиске не нашёл по этому поводу.
PM MAIL ICQ   Вверх
ТоляМБА
Дата 22.12.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Цитата(BaLaBaXa @  22.12.2007,  14:50 Найти цитируемый пост)
После запуска этого приложения выскакивает форма с полями для логина и пароля и кнопкой.
Если ты имеешь ввиду табличку "Database Login", то в Object Inspector поставь у ADOConnection свойство LoginPrompt в False или в рантайме перед активацией соединения пропиши
Код
ADOConnection1.LoginPrompt:=false;
И табличка выскакивать не будет.

Нижесказанное ИМХО:
Цитата(BaLaBaXa @  22.12.2007,  14:50 Найти цитируемый пост)
чтобы данные с полей сравнивались с данными о пользователях на сервере и в случае успешной аутентификации произошёл вход в клиентское приложение
А вот юзерам серверные пароли (пусть даже на ReadOnly) я бы не советовал давать в целях безопасности не только целостности но и конфиденциальности данных. Ставь пароли на доступ юзера к программе, но ни как не к базе данных.
PM   Вверх
BaLaBaXa
Дата 22.12.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Цитата(ТоляМБА @  22.12.2007,  13:18 Найти цитируемый пост)
Если ты имеешь ввиду табличку "Database Login", то в Object Inspector поставь у ADOConnection свойство LoginPrompt в False

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

Цитата(ТоляМБА @  22.12.2007,  13:18 Найти цитируемый пост)
А вот юзерам серверные пароли (пусть даже на ReadOnly) я бы не советовал давать в целях безопасности не только целостности но и конфиденциальности данных. Ставь пароли на доступ юзера к программе, но ни как не к базе данных.

Это конечно правильно. Но у меня не такая серьёзная работа. Я курсовую делаю, так что главное чтобы работало.  smile 
PM MAIL ICQ   Вверх
Exai1e
Дата 22.12.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: нет
Всего: 30



Юзер вводит логин пароль. Создаеш запрос к базе
Код

select UserName, UserPassword from Users Where (UserName = '' + edit1.text + '') and (UserPassword = '' + edit2.text + '');

если кол-во возвращенных записей не равно 0 то пускаеш, иначе не пускаеш smile

p.s. это так примерно smile но думаю что должно работать smile

Это сообщение отредактировал(а) Exai1e - 22.12.2007, 14:20


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
BaLaBaXa
Дата 22.12.2007, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Цитата(Exai1e @  22.12.2007,  14:19 Найти цитируемый пост)
если кол-во возвращенных записей не равно 0 то пускаеш, иначе не пускаеш

А как в этом случае посчитать кол-во возвращённых записей?  smile 
Цикл что ли делать и заводить новую переменную? Или как-то по другому можно?

Можно поподробнее?  smile 
PM MAIL ICQ   Вверх
Anark1
Дата 22.12.2007, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



Код

SQL_Str = 'select COUNT(*) as rcount from Users Where (UserName = ' + edit1.text + ') and (UserPassword = ' + edit2.text + ');'
ADOQuery1.SQL.Add(SQL_Str);
ADOQuery1.Open();
ADOQuery1.FieldByName("rcount")



или


Код

SQL_Str := 'select UserName, UserPassword from Users Where (UserName = ' + edit1.text + ') and (UserPassword = ' + edit2.text + ')';
ADOQuery1.SQL.Add(SQL_Str);
ADOQuery1.Open();
ADOQuery1.RecordCount;



Это сообщение отредактировал(а) Anark1 - 22.12.2007, 19:22


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
kobra
Дата 23.12.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



рас задача состоит в том чтобы юзер конектился к базе по своему логину, метод предложенный Exai1e-ом не подоидет. так как чтобы запустить запрос, нужно быть уже залогиненним.
задача решается двумя способами:
1. включить LoginPrompt и система при конекте сама позаботится осталном.
2. сделать аналог первого варианта в ручную. для этого перед конектом на основе введеннои клиентом олгина и пароля составить строку соединения и передать его в соответствуишее своиство компонента, который обеспечивает соедение и открыть соеденение. 
PM MAIL   Вверх
Anark1
Дата 23.12.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



kobra, прав только в том случае если речь идет об юзерах на уровне сервера. А если имеем дело с юзерами представленными в бд записями, то Exai1e прав. Соответственно мой пост выше относится ко второму случаю.


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
BaLaBaXa
Дата 23.12.2007, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Цитата(kobra @  23.12.2007,  18:58 Найти цитируемый пост)
1. включить LoginPrompt и система при конекте сама позаботится осталном.

Нет, у меня LoginPrompt специально отключено...так как использую Windows-аутентификацию. Нет необходимости каждый раз вводить имя и пароль для доступа к серверу.

Цитата(Anark1 @  23.12.2007,  19:50 Найти цитируемый пост)
kobra, прав только в том случае если речь идет об юзерах на уровне сервера. А если имеем дело с юзерами представленными в бд записями, то Exai1e прав. Соответственно мой пост выше относится ко второму случаю. 

В смысле "с юзерами представленными в бд записями"? У меня юзеры создаются в разделе Security/Logins на сервере и у каждого свои привилегии на определённые БД. Точнее моё приложение работает только с одной БД.
Как тогда мне лучше в этом случае сделать авторизацию? По способу, что предложил kobra или Exai1e и Anark1?

Добавлено через 8 минут
Попробовал включить LoginPrompt! Теперь коннектится при абсолютно любых логинах и паролях!  smile  Ввожу любые данные и всё равно всё успешно...открывается моё приложение!  smile 
PM MAIL ICQ   Вверх
Anark1
Дата 23.12.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



BaLaBaXa, каким образом ты будешь выполнять запросы к системным таблицам ? Я думал у тебя пользователи представлены в виде записей некоторой таблицы. Естественно, так как у тебя придется формировать строку подключения. Под каждого юзера+првиелегию своя строка будет получаться.


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
BaLaBaXa
Дата 23.12.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Цитата(Anark1 @  23.12.2007,  22:01 Найти цитируемый пост)
BaLaBaXa, каким образом ты будешь выполнять запросы к системным таблицам ? 

После запуска приложения коннект к серверу проиходит автоматически (LoginPrompt отключен), а уже после этого на форме, где поля для логина и пароля, по нажатию кнопки делать запросы. Или это не получится?

Цитата(Anark1 @  22.12.2007,  19:21 Найти цитируемый пост)
SQL_Str := 'select UserName, UserPassword from Users Where (UserName = ' + edit1.text + ') and (UserPassword = ' + edit2.text + ')';

А что тут подразумевается под Users? Типа моя собственная таблица с юзерами? У меня её нет...и заводить не хочу. Все юзеры созданы на сервере. Как же быть? smile 
PM MAIL ICQ   Вверх
kobra
Дата 24.12.2007, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



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

PM MAIL   Вверх
BaLaBaXa
Дата 24.12.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



kobra, я это всё прекрасно знаю!  smile 
Ещё раз опишу проблему...подробно. У меня стоит MS SQL Server. Вход в него происходит посредством Windows-аутентификации. На сервере есть БД и 3 созданных мною юзера с определёнными привилегиями на эту БД. Также есть клиентское приложение, работающее только с этой БД. У ADOConnection1 свойство LoginPromрt равно False...чтобы не выскакивало каждый раз окошко для ввода логина и пароля.
Я хочу, чтобы после запуска этого приложения сначала надо было авторизоваться, чтобы работать в нём. Причём авторизоваться по логину и паролю тех 3-х пользователей, что создал на сервере (которые хранятся в: "Имя сервера"/Security/Logins...ну или в: ("Имя сервера"/Databases/"Имя базы"/Security/Users). Т.е. хранятся не в созданной мною специальной таблице с юзерами.
Как же всё-таки это мне сделать? Ничего не получается... :(
PM MAIL ICQ   Вверх
Anark1
Дата 24.12.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 1
Всего: 11



BaLaBaXa, во первых. Тогда не понятно зачем LoginPrompt = false. Пусть бы юзер сам вводил свои логин и пароль.
Второе. Можно делать это всё вручную (не знаю зачем, но вдруг). Вручную формируется свойство TADOConnection->ConnectionString.
Код

ADOConnection1->ConnectionString = "...Password=123;Persist Security Info=True;User ID=1231..."

Соответственно USER ID и Password можно брать из эдитов.

Это сообщение отредактировал(а) Anark1 - 24.12.2007, 17:00


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
BaLaBaXa
Дата 25.12.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



Цитата(Anark1 @  24.12.2007,  17:00 Найти цитируемый пост)
BaLaBaXa, во первых. Тогда не понятно зачем LoginPrompt = false. Пусть бы юзер сам вводил свои логин и пароль.

Потому что, когда оно True, можно войти в прогу с любым логином и паролем. Даже которых в принципе не существует.
Ещё раз. Изначально может ошибка? В свойстве ADOConnection1 настроил свойства: ConnectionString => нажал кнопку Build, выбрал Поставщика данных - Microsoft OLE DB Provider for SQL Server. Затем выбрал имя сервера. Для входа в сервер я использовал: "учетные сведения Windows NT", была ещё строка для выбора: "следующие имя и пароль пользователя", но тогда вход был бы всегда только по этим логину и паролю...а мне нужно всегда под разными заходить. LoginPrompt = False, Connected =  True.
Что не так? Неужели это такая сложная проблема, что мы не можем никак в ней разобраться?  smile 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0922 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.