Monarch |
Отправлено: 28.12.2004, 03:40 |
|
Не зарегистрирован
|
Вообщем такая ситуация, есть таблица Firebird в которой есть поля ID, FIO, PASSWD...Пользователь запуская программу получает приглашение с просьбой ввести его пароль в MaskEdit.....Как сравнить пароль введеный в MaskEdit с PASSWD расположенном в табице....и при их совпацении вернуть ID пользователя.
FireBird+Fib+Builder
Заранее благодарен |
|
Monarch |
Отправлено: 28.12.2004, 03:44 |
|
Не зарегистрирован
|
Т.е. записать этот ID в переменную |
|
olegenty |
Отправлено: 28.12.2004, 07:54 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
неверная постановка вопроса: пароль вообще никогда не должен попадать на клиента. ему и на сервере неплохо. пиши ХП, принимающую имя пользователя и пароль, и возвращающую ID пользователя. при этом сама таблица, где хранятся данные о пользователях, должна быть закрытой для всех, кроме SYSDBA, а пароль SYSDBA должен быть отличным от masterkey
|
|
Guest |
Отправлено: 28.12.2004, 10:39 |
|
Не зарегистрирован
|
идентификация пользователя производится только на основе проля ( там данные не очень важные)....таблица с паролями естественно находится на сервере....пароль вводится с клиента, а сравнивается он со значениями в таблице на сервере....пароли не хешируются, хранятся в открытом виде.
НЕобходим примерно следующие....
SELECT ID FROM TABLE WHERE PASSWD=111
Необходимо вытащить этот ID из SQL запроса....как это сделать в PHP я знаю (да и все тут находящиеся, наверно)....но как это сделать в C++ Builder ...хрен его знает (возрашает только булево значение...мол есть такое) ...помино всех стандартных компонетном есть компонетны fib
Жду ответое...заранее благодарен!
|
|
Monarch |
Отправлено: 28.12.2004, 10:40 |
|
Не зарегистрирован
|
Это я наверху написал |
|
Guest |
Отправлено: 28.12.2004, 10:43 |
|
Не зарегистрирован
|
2:olegenty
Что такое ХП ....ХЗ знаю...а это нет! |
|
xim |
Отправлено: 28.12.2004, 14:47 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 143
|
ХП — хранимая процедура (она же SP). Вообще-то olegenty вполне ясно объяснил, что правильный вариант пароля на клиента обычно не передаётся, а обрабатывается тот вариант, который набирается в морде ручками.
Синтаксис примерно такой:
CODE |
CREATE PROC [ EDURE ] [ owner. ] procedure_name [; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
|
Что касается получения параметра:
CODE |
- в строке SQL на клиенте: SELECT
:ID FROM TABLE WHERE PASSWD=:PW
- Dataset->Params->ParamByName("ID")=<your ID>;
- Dataset->Params->ParamByName("PW")=111;
| |
|
Guest |
Отправлено: 29.12.2004, 00:04 |
|
Не зарегистрирован
|
А нельзя ли воспользоваться настройкой Database и выбрать там login prompt, а пользователя в самой базе хранить? Тогда на уровне базы можно менять уровень доступа юзера. А приглашение ввода юзера и пароля будет автоматом показываться при загрузке клиента |
|
telepath |
Отправлено: 29.12.2004, 00:07 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 132
|
Выше был мой пост, сорри |
|
Monarch |
Отправлено: 29.12.2004, 01:45 |
|
Не зарегистрирован
|
Спасибо всем, думаю что-нибудь получится.
Заодо и ХП узнал что это такое...почитаю на досуге на эту тему.
Еще раз всем спасибо |
|