|
|
|
| Вообщем тема такова:
Создал базу (база имееет персонифицирующие данные) ...для усиления безопасности пошел по такому пути - разделил все данные о лицах на 4 таблицы, в каждойтаблице имеется свой id.... для связи этих разрозннных данных создана таблица в которой все id приведены в соответствующем порядке ... эта таблица ключей при выходе из базы переписывыается по определнному алгоритму, а при входе (при условии верно набранного пассворда) преобразуется в нормальный вид.
оговорюсь ... база рачитана на работу одного пользователя и количество записей по ФИО не превышает 1500 .... (пока разработочный вариант)
Монстры ... если есть подводные камни в таком решении, поделитесь соображениями | |
|
| |
|
|
|
| Я не МОНСТР | |
|
| |
|
|
|
| Я хоть и гоблин, но...тоже не менстр.
Если все это работает, то какие камни могут быть? | |
|
| |
|
|
|
| ...ну ва первЫх ... монстры Access - это не оскорбление ...
во-вторых ... да предварительно база как-бы работает .... НО , смущает что все запросы приходиться строить с учетом ключевой таблицы .... как-то эт всё для мну стало сомнительно ...
вот и интересуюсь, а насколько воообще этот подход верен ....
а если исходить из Вашего поста, уважаемый "Гоблин" , то получается - чё слепил и оно вдруг работает ... то и ладно ..... неправильно как-то .... ИМХО конечно же | |
|
| |
|
|
|
| ключевые слова
оговорюсь ... база рачитана на работу одного пользователя
|
зачем секретность ?
---
аксес не обеспечивает никакой защиты данных, нужно использовать другие инструменты... | |
|
| |
|
|
|
| 2 ДрЮня
там написано ... ПЕРСОНИФИЦИРУЮЩИЕ ДАННЫЕ ....
согласен акс не обеспечивает защиты данных, но ... сиквел тоже не обеспечивает от от тех юзеров которым дан доступ (говорит о че м нить ?) .... база счас разрабатывается во втором вариате - при котором ключевая ттаблица изымается по завершении работы ... гнусь конечно полная , но вести бумажные журналы .... каждый день сдавать их под охрану .... а если стат отчетность считать фсё это .... бррррр ... проще убедить дядю что фсе засекречено | |
|
| |
|
|
|
| Я сурёзно не МОНСТР , иначе бы разобрал ситуяйцию, извини - факт | |
|
| |
|
|
|
| Я тоже не монстр
а вот на счет шифрования таблицы связывания мда - тут надо подумать о резервном копировании ....... при нашем (ихнем) уровне отказоустойчивости техники - ё....ся все в один прекрасный момент | |
|
| |
|
|
|
| Есть такой вариант - шифрование данных - но тоже морочно
То записывая в таблу зашифруй, то доставая из таблы - расшифруй........
но тада открыв базу трудно понять чё это тут написино???
это тоже от простых юзверов............ | |
|
| |
|
|
|
| нененене ... шифрование это не камильфо ... принцип такой ... табла с фио имеет свои id табла с паспортными данными имеет свои id , ну и т.д.
так вот эти id собраны в кучу в ключевой таблице....без неё понять что кому принадлежить нереально т.к. id не имеют совпадающей увязки
к примеру : Иванов id 1 , а его паспортные данные имеют в соей табле id 3, а вот в ключевой табле имеем 1:3
счас табла по завершении работы переписывается ... ну я это уже говорил
но перь думаю что её проще изымать на внешний носитель ... и в сейф
вопрос в том ... насколько работоспособно такое приложение в котором все запросы идут с обращением к ключевой табле ? какие камушки могут повлиять на достоверность данных ? | |
|
| |
|
|
|
| ...при нашем (ихнем) уровне отказоустойчивости техники - ё....ся все в один прекрасный момент |
да это тоже как - то ... ну ёкнется на сервере блок питания и чё ... мы юзвери бум бегать и с...ть паром, потому как последний бэкакп к которому откатываемся, недельной давности и всю текущую неделю нать ручками опеть вколачивать ... во кайфуша -та
так шты вфсё относительна | |
|
| |
|
|
|
|
|
Лишно я камушкав тута не вижу
|
камушки тут в том, что база в целом содержит заведомо валидные данные что упрощает задачи восстановления сведений (в функции количества записей).
если дополнить базу сгенерированными фальшивыми данными, в количестве на порядки превышающем валидные (для полуторатысяч записей это не слишком много)
задача восстановления значительно усложнится. | |
|
| |
|
|
|
| to Explorer
камушки тут в том, что база в целом содержит заведомо валидные данные что упрощает задачи восстановления сведений (в функции количества записей). |
...а вот сэтого места можно поподробнее (с учетом того что общаетесь с юзверем) | |
|
| |
|
|
|
| в общем случае такой подход защищает данные, конечно. но
декартово произведение записей таблиц гарантировано вернет гарантировано валидные данные
постепенно по ряду признаков можно отбрасывать варианты заведомо недопустимые(первый шаг - по полу, например) в общем зависит от количества данных и характера идентифицирующих признаков.
потом отделить варианты заведомо известные и уплотнить метаданные выборки - отобрать заведомо валидные сочетания по известным ФИО например, ФИО+город, телефон+город и т.п.
потом ранжировать варианты в функции статистической вероятности (например по дню рождения - сравнить с распеределением дней рождения в какой-то опорной статистической выборке и т.п.)
потом варианты легко уточняемые, лесенкой "степ-бай-степ" (по дню рождения, например, про номеру автомобиля, адресу, телефону, адресу и-мейл (например если и-мейл содержит признаки имени-фамилии и т.п.))
в конце концов возможно получить чистые или с небольшой "примесью" данные
это называется дэйта инвестигейшн или дэйта майнинг
ЗЫ
помится мы с osmor'ом на выставке Softool послушали презентацию системы Albatros - они какой-то схожий механизм используют - распределенное хранение данных, режут таблицы вдоль (как у тебя) и поперек и разбрасывают по разным БД.
не помю только точно как их потом собирают
они кажется на файрберде
ЗЗЫ
кстати - очень многое завист от того, как будут порезаны таблицы - как сгруппировать разные признаки - <имя+отчество+пол> - <фамилия+город+телефон> - <номер паспорта+дата рожденя> и т.п. | |
|
| |
|
|
|
|
| извиняюсь спросить, а сколько времени занимает такой анализ? | |
|
| |
|
|
|
| иногда всю жизнь
но года за два накапливается опыт :))) и дальше все идет проще
вообще такими вещами приходится заниматься не для того, чтобы восстановить данные из перемешанных таблиц, а для извлечения данных из метаданных - например из набитых операторами врукопашную, из полученных от пользователей отчетов, анкет, из других источников, из ненормализованных или "поплывших" БД, таблиц с посыпавшимися индексами и тому подобное.
вот например потеряешь свою "индексную" таблицу связей своих порезанных таблиц - и тебе тоже придется этим заняться
в общем для того, чтобы из мусора извлечь знания.
знаешь как много можно узнать по серии и номеру паспорта? у-у-у... | |
|
| |
|
|
|
| я так понимаю все зависит от от построения индексов порезанных табл ... или нет
вообще я частично отказался от этой затеи .. как ты правильно заметил "вот потеряешь свою индексную таблицу...."
хотя задумка на мой взгляд была неплохая | |
|
| |
|
|
|
|
хотя задумка на мой взгляд была неплохая
|
неплохая...
просто меру надо знать | |
|
| |
|
|
|
| вот .... ну наконец-то дождался ключевой фразы "меру знать" .... это-то и хочу понять... что таким образом можно делать без ущерба основной цели, а чего делать категоречски нельзя !(?) | |
|
| |
|
|
|
| нельзя хранить критически важные данные или персональные сведения за конфеденциальность которых вы несете ответственность в настольных СУБД типа Access.mdb(mde)
вот собственно и все, остально детали :)
перелезайте на ADP+SQL и обеспечивайте защиту и конфеденциальность данных средствами нормального сервера. | |
|
| |
|
|
|
| это как бы уже обсуждалось ... но ить проблема в жлобе хозяине рас, в отсутствии сиквел сервера два, требованиии сделать три .... заморачиваться с десятком ёкселёвских файлов желания нетути никакго, а вот аксовский вариант мну устраивает | |
|
| |
|
|
|
| мне трудно что-то советовать
в общем случае такой способ лучше чем ничего
часть данных, которые не требуется обрабатывать можно хранить в графических файлах или в пдф в полях МЕМО или BLOB | |
|
| |
|
|
|
| юзеры могут скопировать таблу со связями ID во время работы, так что не факт изымания таблы даст результат.
таблу можно хранить вообще в другом фале MDB, доступ к которому осуществлять только програмно, тогда мороки с убрал-поставил таблу не будет, вот кода это добавит. | |
|
| |
|
|
|
| юзеры могут скопировать таблу со связями ID во время работы, так что не факт изымания таблы даст результат. |
нет ... не совсем верно ... никаких связей нет ... заполнение табл идет из независимой формы программным путем ... так что ... воттт
юзеры могут скопировать таблу со связями ID во время работы, так что не факт изымания таблы даст результат. |
угу ... мысль дельная ... если мона изложи принцип действия, а то я сегодня плохо догоняю ... ну и буду оч признателен за маленький кусочек кода (с чего нАчать.... тэк сказать.....остальное обязуюсь развить сам) | |
|
| |
|
|
|
| про повтор цитаты понял-
вот так я получил доступ из своегей клинсткой части, которая соединена с другой базой, доступ к другой базе и ее таблам.
Dim con As New ADODB.Connection
Dim rsOrd As ADODB.Recordset
Dim rsOrdDet As ADODB.Recordset
Set rsOrd = New ADODB.Recordset
Set rst_G = New ADODB.Recordset
con.Provider = "MSDataShape"
con.ConnectionString = "Provider=MSDataShape;Data Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\baza_client.mdb;User Id=admin;Password=;"
con.Open
rsOrd.StayInSync = False
rsOrd.Open "SHAPE {select * from naimen} as Nam " & _
"APPEND ({select * from sklad} as Skla " & "RELATE kod_n TO naimen)", con
|
последняя строка это метод открытия 2-х связанных таблиц, т.е. может быть просто
rsOrd.Open "select * from naimen", con
|
открываем - декодируем/кодируем/вносим изменения и закрываем.
п.с. можно повесить глобальной переменной - открыли и висит в памяти, хотя кажется черевато. | |
|
| |
|
|
|
| Главный вопрос, а для чего все затевается?
Пытаетесь обойти закон о защите персональных данных?
Защита от оператора базы?
Защита от третьих лиц? | |
|
| |
|
|
|
| Закон обходить ... нет уж
Есть данные по лицам (ну помимо персонифицурующих, данные относящиеся к деятельности конторы), оператор один ... в моем лице (как бэ от себя защищать ... ну не знаю), но кроме этого есть еще люди имеющие доступ к этой машине, и есть среди них оч любознательные и люботные (а им эту инфу не нада знать) ... не знаю ответил ли я на ваш вопрос
ps ...да счас это все ведется на бумаге дедовским способом ...ну и сейф разумеется | |
|
| |
|
|
|
| шифруй/расшифровывай на лету
в начале работы вводишь ключ, данные отображаются расшифрованные с данным ключом.
Проблемы со вводом данных будут. Напрямую в таблицы нельзя, только через формы с шифровкой налету.
Какой модуль шифрования подключить - это уже отдельный разговор | |
|
| |
|
|
|
| вот попробуй
создай модуль класса назови его Cipher
Всунь туда код
Private mstrKey As String
Private mstrText As String
Public Property Let KeyString(strKey As String)
mstrKey = strKey
Initialize
End Property
Public Property Let Text(strText As String)
mstrText = strText
End Property
'Read text that was eintCrypted or decrypted
Public Property Get Text() As String
Text = mstrText
End Property
Public Sub DoXor()
Dim lngC As Long
Dim intB As Long
Dim lngN As Long
For lngN = 1 To Len(mstrText)
lngC = Asc(Mid(mstrText, lngN, 1))
intB = Int(Rnd * 256)
Mid(mstrText, lngN, 1) = Chr(lngC Xor intB)
Next lngN
End Sub
Public Sub Stretch()
Dim lngC As Long
Dim lngN As Long
Dim lngJ As Long
Dim lngK As Long
Dim lngA As Long
Dim strB As String
lngA = Len(mstrText)
strB = Space(lngA + (lngA + 2) \ 3)
For lngN = 1 To lngA
lngC = Asc(Mid(mstrText, lngN, 1))
lngJ = lngJ + 1
Mid(strB, lngJ, 1) = Chr((lngC And 63) + 59)
Select Case lngN Mod 3
Case 1
lngK = lngK Or ((lngC \ 64) * 16)
Case 2
lngK = lngK Or ((lngC \ 64) * 4)
Case 0
lngK = lngK Or (lngC \ 64)
lngJ = lngJ + 1
Mid(strB, lngJ, 1) = Chr(lngK + 59)
lngK = 0
End Select
Next lngN
If lngA Mod 3 Then
lngJ = lngJ + 1
Mid(strB, lngJ, 1) = Chr(lngK + 59)
End If
mstrText = strB
End Sub
Public Sub Shrink()
Dim lngC As Long
Dim lngD As Long
Dim lngE As Long
Dim lngA As Long
Dim lngB As Long
Dim lngN As Long
Dim lngJ As Long
Dim lngK As Long
Dim strB As String
lngA = Len(mstrText)
lngB = lngA - 1 - (lngA - 1) \ 4
If lngB <= 0 Then Exit Sub
strB = Space(lngB)
For lngN = 1 To lngB
lngJ = lngJ + 1
lngC = Asc(Mid(mstrText, lngJ, 1)) - 59
Select Case lngN Mod 3
Case 1
lngK = lngK + 4
If lngK > lngA Then lngK = lngA
lngE = Asc(Mid(mstrText, lngK, 1)) - 59
lngD = ((lngE \ 16) And 3) * 64
Case 2
lngD = ((lngE \ 4) And 3) * 64
Case 0
lngD = (lngE And 3) * 64
lngJ = lngJ + 1
End Select
Mid(strB, lngN, 1) = Chr(lngC Or lngD)
Next lngN
mstrText = strB
End Sub
Private Sub Initialize()
Dim lngN As Long
Randomize Rnd(-1)
For lngN = 1 To Len(mstrKey)
Randomize Rnd(-Rnd * Asc(Mid(mstrKey, lngN, 1)))
Next lngN
End Sub | |
|
| |
|
|
|
| Для работы с классом потребуются 2 глобальные функции
одна кодирует
вторая наоборот
обращение к первой закодируй Fun_Code ("Вася") получаем г2о9о
спросим вторую чё такое Fun_DeCode("г2о9о") ответ Вася
Public Function Fun_Code(Str_Text As String) As String
Dim cipherTest As New Cipher
cipherTest.KeyString = "кот" ' ключевое слово можно любое
cipherTest.Text = Str_Text
cipherTest.DoXor
cipherTest.Stretch
Fun_Code = cipherTest.Text
End Function
Public Function Fun_DeCode(Str_Code As String) As String
Dim cipherTest As New Cipher
cipherTest.KeyString = "Кот" ' ключевое слово
cipherTest.Text = Str_Code
cipherTest.Shrink
cipherTest.DoXor
Fun_DeCode = cipherTest.Text '
End Function | |
|
| |
|
|
|
| хм.... всё-таки скатились до шифрования ...
РЕЗЮМЕ: тема себя исчерпала.... исходя из всех топиков , вытекает тема защиты, а такая однако уже есть | |
|
| |