Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Вниз

Ctrl+Del в DBGrid   Найти похожие ветки 

 
Teuton ©   (2005-03-10 13:10) [0]

Здравствуйте.
Известно, что в DBGrid встроено сочетание клавишь Ctr+Del, которое удаляет запись. Помогите пожалуйста советом, как запретить пользователю удалять запись таким образом, как заблокировать это?

Заранее благодарю!


 
REA   (2005-03-10 13:12) [1]

А чем плохо? Впрочем можно перехватить нажатие клавиш.


 
Teuton ©   (2005-03-10 13:21) [2]

>>REA

Я знаю, что можно, просто не знаю как это сделать ;) Не подскажите чайнику?
Заранее благодарю!


 
_1   (2005-03-10 13:34) [3]

DatasetOnDelete:

if ЯНехочуЧтобыТекущаяЗаписьБылаУдалена then
begin
 ShowMessage("Ассеss denied!");
 Abort;
end;


 
_1   (2005-03-10 13:36) [4]

^ вместо OnDelete - BeforeDelete


 
Teuton ©   (2005-03-10 13:38) [5]

>>_1

Спасибо большое!
Только я не совсем понял, что же писать вместо "if ЯНехочуЧтобыТекущаяЗаписьБылаУдалена then"


 
Vlad ©   (2005-03-10 13:44) [6]


> Teuton ©   (10.03.05 13:38) [5]

Так тебе нужно вобще запретить удалять записи из набора данных или только по Ctrl-del из DBGrid?


 
Teuton ©   (2005-03-10 13:50) [7]

>>Vlad

Понимаете в чем дело, в идеале мне хотелось бы сделать так, чтобы удалять запись пользователь мог только в случае если правильно будет введен пароль... Но весь ужас в том, что я даже не представляю как установить пароль так, чтобы его можно было бы держатьне в тестовом файле и чтобы его можно было бы изменять этот пароль через диалоговое отдельное окно. Ну стандартная оперция смены пароля. Если пароль введен правильно, то тогда активизируется бутон удаления и пользователь может удалить запись. А это сочетание Ctrl+Del работает всегда :( Вот я и хочу от него избавиться...


 
markers ©   (2005-03-10 15:56) [8]

А Read-Only не пробовал?


 
Teuton ©   (2005-03-10 16:11) [9]

>>markers

Нет это не помогает :(


 
stakan ©   (2005-03-10 16:15) [10]

Можно так
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if (ssCtrl in Shift) and (Key = VK_DELETE) then
 begin
   ShowMessage("Нельзя!!!");
   Abort
 end;
end;


 
Teuton ©   (2005-03-10 16:44) [11]

>>stakan

Спасибо вам большое! Пользуясь случаем, хочу спросить вас, каков принцип сохранения паролей (с возможностью програмного изменения пароля) в Дельфи, но так, чтобы сохранять пароль не в текстовом файле, доступном всем, а в каком-нибудь зашифрованном файле?

Заранее благодарю!


 
markers ©   (2005-03-10 16:54) [12]

Шифровать писать свою систему щифрования либа юзать компоненты. И ещё Разные типы шифрования существуют... Если хочешь подробнее пиши в приват..


 
stakan ©   (2005-03-10 16:59) [13]

>> Teuton
 Вариантов много, смотря какое приложение.
Если работа с БД то пароли можно хранить в самой БД (создавать пользователя базы с паролем, тогда шифрованием займётся СУБД) или завести отдельную таблицу в базе для хранения пользователей с паролями. Насчёт алгоритмов шифрования, то тут я не спец. Если приложение обычное, то можно в реестре, опять же шифруя пароль. Насколько я помню есть компоненты (из RXLib) которые пишут в реестр уже в зашифрованом виде. И т.д.


 
markers ©   (2005-03-10 17:02) [14]

ту Стакан
Чё-то я там не замечал?
Да и есть хорошая библиотечка (Фришная) которая может и в MD5 и BlowFish и еже сним...


 
markers ©   (2005-03-10 17:05) [15]

То Teuton
Короче пиши в приват либо на ящик в инфо либо
admin(ЗаСпАм)@sibdisnet.ru
Естественно (ЗаСпам) убери когда писать будешь...


 
Teuton ©   (2005-03-10 17:05) [16]

>>stakan

У меня простое приложение учета товаров, работающее локально с DBF-файлом.


 
markers ©   (2005-03-10 17:06) [17]

А DBF у нас что, не база?


 
stakan ©   (2005-03-10 17:18) [18]

>>Teuton  
Есть простейший способ шифрования, но любопытного юзера остановит. Разбиваешь пароль на символы (байты), делаешь каждому символу XOR с какой нибудь битовой маской (любым символом), на выходе получаешь левый символ. Расшифровка - так же: берёшь символ, XOR с той же маской, с какой шифровал - получаешь исходный символ.


 
Vlad ©   (2005-03-10 17:32) [19]


> Teuton ©   (10.03.05 17:05) [16]

Если работаешь с базой, то пароль резоннее хранить в таблице.
Правда такая защита рассчитана на полного ламера, поскольку файл DBF сам по себе можно открыть хоть Excel"ем, смотреть, изменять данные и делать с ними все что угодно.
Хранить пароль лучше в виде хеш-суммы (напр. MD5)
вот пример исходников вычисления MD5 на Delphi
http://delphibase.spb.ru/?action=viewfunc&topic=mathcode&id=10243

При этом, в программе старайся избегать проверки пароля типа:
if CheckPassword(...) then  <пускаем в программу>
взламывается за 5 минут.
Придумай что нибудь посложнее.


 
Teuton ©   (2005-03-11 08:53) [20]

>>stakan Vlad
Спасибо вам большое за советы, друзья, но слишком хорошего мнения о моих познаниях в программировании...
Что такое MD5, XOR и как работать с байтами я вообще не знаю :( А Слово хэш лишь напоминает мне о моиг потугах работать с массивом в перле и не более того :(

Может быть что-нибудь попроще? Да, я понимаю, что DBF-файл уязвим и может быть спокойно даже в нортоне просмотрен. А что если вписывать в таблицу зашифрованный пароль? То есть значение в таблицу будет записано функцией типа crypt() как в перле? Есть ли такая функция в Дельфи?

Спасибо еще раз.


 
Anatoly Podgoretsky ©   (2005-03-11 09:07) [21]

Не храни пароль совсем.


 
Teuton ©   (2005-03-11 09:48) [22]

>>Anatoly Podgoretsky

Как же его не хранить? А с чем сверять введенный пароль? ;)


 
Bronco ©   (2005-03-11 10:32) [23]


> Teuton ©   (11.03.05 08:53) [20]


> А что если вписывать в таблицу зашифрованный пароль? То
> есть значение в таблицу будет записано функцией типа crypt()
>

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


 
Bronco ©   (2005-03-11 10:33) [24]

извиняюсь

> Хэш, в отличие от пароля,

читать как
Хеш, в отличие от зашифрованного пароля


 
Teuton ©   (2005-03-11 10:50) [25]

>>Bronco

Да кажется, я вас понял ;) Уж простите за навязчивость, но не могли бы вы мне пояснить как это делать?

Заранее благодарю!


 
Bronco ©   (2005-03-11 10:58) [26]


> Teuton ©   (11.03.05 10:50) [25]


> не могли бы вы мне пояснить как это делать

Ну, если упрощенно, то примерно так:
Есть некая функция, вычисляющая хэш-сумму от твоей строки с паролем. Пример функции приведен в [19] ссылке. Вычисляешь эту хэш-сумму и записываешь в таблицу БД.
Затем, когда юзер вводит пароль, чтобы зайти в программу, твоя программа предварительно вычисляет хэш от введенного пароля и сравнивает с тем значением, которое уже хранится в базе. Если совпало, значит пускаем в программу


 
Anatoly Podgoretsky ©   (2005-03-11 12:11) [27]

Teuton ©   (11.03.05 09:48) [22]
Сверяй с сигнатурой, один из вариантов этого термина ХЕШ.
Для данного случая я бы порекомендовал CRC32 или CRC16, поскольку тогда легко хранить где угодно, в базе, в реестре, в ини и т.д.



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

Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.037 c
1-1110482942
kirilllius
2005-03-10 22:29
2005.03.27
Update Delphi 7


4-1108374550
Зигмунд
2005-02-14 12:49
2005.03.27
System Tray &amp; Сворачивание Разворачивание Программы.


3-1109324020
malefik
2005-02-25 12:33
2005.03.27
Параметры в fibdataset...


1-1110369690
Tashtagol
2005-03-09 15:01
2005.03.27
TTreeView и TStringGrid


3-1109360803
Коля
2005-02-25 22:46
2005.03.27
Статьи о сетевых базах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский