Консультация № 187438
05.06.2013, 08:29
78.80 руб.
06.06.2013, 05:35
0 9 0
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Требуется написать клиент-сервер на Delphi7/Firebird 2.1..2.5 с шифрованием части информации.
Например, в частности, номер заказа - открыт для всех, сумма - только для старшего менеджера.
Нужна очень простая "рыба" из одной таблицы и 2х пользователей. Спасибо.

Обсуждение

Неизвестный
05.06.2013, 17:49
общий
05.06.2013, 17:57
ну таблица пользователей понятна
User
kod int счетчик пользователей
Name varchar(20) имя пользователя
Pass varchar(20) пароль в открытом виде ( виден только админам на сервере )
Razr byte разрешения ( 0 - закрыто, 1 - открыто )

при запуске программы пользователь авторизуется и эти данные сохраняются в глобальных переменных, например
User_Name, User_Pass, User_Razr

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

SQLString:='select .. , case ( select Razr from User where Name='''+UserName+''') when 1 then Имя_Поля else 0 end as Field10,...
from Таблица ...'

это если брать разрешение прямо из таблицы в базе

если хранить в программе разрешение
SQLString:='select .. ,';
if Razr=1 Then
SQLString:=SQLString+'Имя_Поля'
Else
SQLString:=SQLString+'0';
SQLString:=SQLString+' as Field10,... from Таблица ...';



но лучше создавать пользователей на самом сервере и там давать им разрешения на уровне базы. тогда проверок в программе не нужно.
давно
Академик
320937
2216
05.06.2013, 18:32
общий
Добрый день! Пароль в открытом виде не хранится в FireBird. Вопрос не в этом. Требуется зашифровать, допустим, один или два столбца. Причем, нужна именно программа. Шифрование пусть по методу XOR. Ключ - генератором случайных чисел.
Неизвестный
05.06.2013, 19:16
общий
Адресаты:
а зачем шифровать? может просто - кому есть разрешение, показывать данные, остальным 0.
можно и пароль зашифровать.
давно
Модератор
18584
3280
06.06.2013, 05:36
общий
Прошу обратить внимание на данный вопрос.
давно
Академик
320937
2216
06.06.2013, 10:09
общий
Добрый день!
Здесь файл базы данных Test.zip (2.88 Mб) (пока без ролей)
Firebird 2.5.1
Будет 2 роли:
Админ, которому разрешено смотреть все, в том числе закрытый столбец "№ договора"
Препод, которому разрешено смотреть все, кроме этого.
Админ хранит ключ шифрования в отдельном файле (не в базе)
Система состоит из 2х программ -
1. обычной (для всех)
2. "Админовской"

При запуске программы для админа разрешено:
- зашифровать,
- расшифровать,
- сменить пароль,
- показать список с закрытыми полями по номеру группы.
Собственно, только эта программа и нужна. Цену вопроса можно обсудить
Спасибо.
Неизвестный
06.06.2013, 12:10
общий
Адресаты:
да, решение этого вопроса больше относится к пользовательскому приложению, чем к базе данных.
давно
Мастер-Эксперт
425
4118
10.06.2013, 05:41
общий
Адресаты:
Евгений Геннадьевич совершенно прав - шифрование не нужно. К сожалению на память я сейчас не скажу, можно ли назначать привелегии на на столбцы, но вот на саму таблицу точно можно. Т.е. у админа доступ будет, а простого пользователя - нет. Таким образом данные будут видны только тому, у кого назначены права делать выборку в таблице.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Академик
320937
2216
10.06.2013, 18:29
общий
Адресаты:
Добрый вечер! В текущей версии Феникса пароль ставится на сервер, а не на базу. Поэтому, если удастся скопировать базу, ее можно открыть на любом другом сервере.
Конечно, шифрование столбцов тоже не панацея. Можно подобрать шифр, можно стащить дискету с шифром etc.
давно
Мастер-Эксперт
425
4118
11.06.2013, 03:03
общий
Адресаты:
Там, кроме пароля подключения к серверу, есть ещё разрешения на пользование базами, выдаются через команду GRANT.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа