Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: принцип связывания данных
 
 автор: clerkus   (06.01.2010 в 19:53)   личное сообщение
 
 

Вообщем тема такова:
Создал базу (база имееет персонифицирующие данные) ...для усиления безопасности пошел по такому пути - разделил все данные о лицах на 4 таблицы, в каждойтаблице имеется свой id.... для связи этих разрозннных данных создана таблица в которой все id приведены в соответствующем порядке ... эта таблица ключей при выходе из базы переписывыается по определнному алгоритму, а при входе (при условии верно набранного пассворда) преобразуется в нормальный вид.

оговорюсь ... база рачитана на работу одного пользователя и количество записей по ФИО не превышает 1500 .... (пока разработочный вариант)

Монстры ... если есть подводные камни в таком решении, поделитесь соображениями

  Ответить  
 
 автор: час   (06.01.2010 в 21:44)   личное сообщение
 
 

Я не МОНСТР

  Ответить  
 
 автор: Гоблин   (07.01.2010 в 00:42)   личное сообщение
 
 

Я хоть и гоблин, но...тоже не менстр.
Если все это работает, то какие камни могут быть?

  Ответить  
 
 автор: Clerkus   (07.01.2010 в 19:24)   личное сообщение
 
 

...ну ва первЫх ... монстры Access - это не оскорбление ...
во-вторых ... да предварительно база как-бы работает .... НО , смущает что все запросы приходиться строить с учетом ключевой таблицы .... как-то эт всё для мну стало сомнительно ...
вот и интересуюсь, а насколько воообще этот подход верен ....

а если исходить из Вашего поста, уважаемый "Гоблин" , то получается - чё слепил и оно вдруг работает ... то и ладно ..... неправильно как-то .... ИМХО конечно же

  Ответить  
 
 автор: ДрЮня   (07.01.2010 в 20:01)   личное сообщение
 
 

ключевые слова


оговорюсь ... база рачитана на работу одного пользователя


зачем секретность ?
---
аксес не обеспечивает никакой защиты данных, нужно использовать другие инструменты...

  Ответить  
 
 автор: Clerkus   (07.01.2010 в 20:16)   личное сообщение
 
 

2 ДрЮня
там написано ... ПЕРСОНИФИЦИРУЮЩИЕ ДАННЫЕ ....
согласен акс не обеспечивает защиты данных, но ... сиквел тоже не обеспечивает от от тех юзеров которым дан доступ (говорит о че м нить ?) .... база счас разрабатывается во втором вариате - при котором ключевая ттаблица изымается по завершении работы ... гнусь конечно полная , но вести бумажные журналы .... каждый день сдавать их под охрану .... а если стат отчетность считать фсё это .... бррррр ... проще убедить дядю что фсе засекречено

  Ответить  
 
 автор: час   (07.01.2010 в 20:57)   личное сообщение
 
 

Я сурёзно не МОНСТР , иначе бы разобрал ситуяйцию, извини - факт

  Ответить  
 
 автор: snipe   (07.01.2010 в 21:06)   личное сообщение
 
 

Я тоже не монстр
а вот на счет шифрования таблицы связывания мда - тут надо подумать о резервном копировании ....... при нашем (ихнем) уровне отказоустойчивости техники - ё....ся все в один прекрасный момент

  Ответить  
 
 автор: час   (07.01.2010 в 21:13)   личное сообщение
 
 

Есть такой вариант - шифрование данных - но тоже морочно
То записывая в таблу зашифруй, то доставая из таблы - расшифруй........
но тада открыв базу трудно понять чё это тут написино???
это тоже от простых юзверов............

  Ответить  
 
 автор: Clerkus   (07.01.2010 в 21:35)   личное сообщение
 
 

нененене ... шифрование это не камильфо ... принцип такой ... табла с фио имеет свои id табла с паспортными данными имеет свои id , ну и т.д.
так вот эти id собраны в кучу в ключевой таблице....без неё понять что кому принадлежить нереально т.к. id не имеют совпадающей увязки
к примеру : Иванов id 1 , а его паспортные данные имеют в соей табле id 3, а вот в ключевой табле имеем 1:3
счас табла по завершении работы переписывается ... ну я это уже говорил
но перь думаю что её проще изымать на внешний носитель ... и в сейф
вопрос в том ... насколько работоспособно такое приложение в котором все запросы идут с обращением к ключевой табле ? какие камушки могут повлиять на достоверность данных ?

  Ответить  
 
 автор: Clerkus   (07.01.2010 в 22:00)   личное сообщение
 
 

...при нашем (ихнем) уровне отказоустойчивости техники - ё....ся все в один прекрасный момент


да это тоже как - то ... ну ёкнется на сервере блок питания и чё ... мы юзвери бум бегать и с...ть паром, потому как последний бэкакп к которому откатываемся, недельной давности и всю текущую неделю нать ручками опеть вколачивать ... во кайфуша -та
так шты вфсё относительна

  Ответить  
 
 автор: час   (08.01.2010 в 14:14)   личное сообщение
 
 

это наподобие как в 1С
Лишно я камушкав тута не вижу.
Пока таблица в сейфе никто не запустит прогу - надо при запуске проверять на месте табла, или ещё в сейфе...
нуна видимо так же перед изыманием - однозначно перезаписать. индексы (идентификаторы)..хотя и не обязательно - можно при старте - всё равно..........

чё может случится
ХР его знает
вроде фарватер чист
лазурь струится
бакал налит,
вино искрится........

Так выпъем все вместе
За сохранность в сейфе!!!!!!!!!!!

  Ответить  
 
 автор: Explorer   (10.01.2010 в 18:27)   личное сообщение
 
 


Лишно я камушкав тута не вижу



камушки тут в том, что база в целом содержит заведомо валидные данные что упрощает задачи восстановления сведений (в функции количества записей).

если дополнить базу сгенерированными фальшивыми данными, в количестве на порядки превышающем валидные (для полуторатысяч записей это не слишком много)

задача восстановления значительно усложнится.

  Ответить  
 
 автор: Clerkus   (21.01.2010 в 18:29)   личное сообщение
 
 

to Explorer

камушки тут в том, что база в целом содержит заведомо валидные данные что упрощает задачи восстановления сведений (в функции количества записей).



...а вот сэтого места можно поподробнее (с учетом того что общаетесь с юзверем)

  Ответить  
 
 автор: Explorer   (21.01.2010 в 19:06)   личное сообщение
 
 

в общем случае такой подход защищает данные, конечно. но

декартово произведение записей таблиц гарантировано вернет гарантировано валидные данные

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

потом отделить варианты заведомо известные и уплотнить метаданные выборки - отобрать заведомо валидные сочетания по известным ФИО например, ФИО+город, телефон+город и т.п.

потом ранжировать варианты в функции статистической вероятности (например по дню рождения - сравнить с распеределением дней рождения в какой-то опорной статистической выборке и т.п.)

потом варианты легко уточняемые, лесенкой "степ-бай-степ" (по дню рождения, например, про номеру автомобиля, адресу, телефону, адресу и-мейл (например если и-мейл содержит признаки имени-фамилии и т.п.))

в конце концов возможно получить чистые или с небольшой "примесью" данные

это называется дэйта инвестигейшн или дэйта майнинг

ЗЫ

помится мы с osmor'ом на выставке Softool послушали презентацию системы Albatros - они какой-то схожий механизм используют - распределенное хранение данных, режут таблицы вдоль (как у тебя) и поперек и разбрасывают по разным БД.

не помю только точно как их потом собирают

они кажется на файрберде

ЗЗЫ

кстати - очень многое завист от того, как будут порезаны таблицы - как сгруппировать разные признаки - <имя+отчество+пол> - <фамилия+город+телефон> - <номер паспорта+дата рожденя> и т.п.

  Ответить  
 
 автор: час   (21.01.2010 в 19:18)   личное сообщение
 
 

............................................................................................

  Ответить  
 
 автор: Clerkus   (21.01.2010 в 21:30)   личное сообщение
 
 

извиняюсь спросить, а сколько времени занимает такой анализ?

  Ответить  
 
 автор: Explorer   (21.01.2010 в 21:42)   личное сообщение
 
 

иногда всю жизнь

но года за два накапливается опыт :))) и дальше все идет проще

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

вот например потеряешь свою "индексную" таблицу связей своих порезанных таблиц - и тебе тоже придется этим заняться

в общем для того, чтобы из мусора извлечь знания.

знаешь как много можно узнать по серии и номеру паспорта? у-у-у...

  Ответить  
 
 автор: Clerkus   (21.01.2010 в 22:21)   личное сообщение
 
 

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

  Ответить  
 
 автор: Explorer   (21.01.2010 в 22:24)   личное сообщение
 
 


хотя задумка на мой взгляд была неплохая



неплохая...
просто меру надо знать

  Ответить  
 
 автор: Clerkus   (21.01.2010 в 22:31)   личное сообщение
 
 

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

  Ответить  
 
 автор: Explorer   (21.01.2010 в 23:00)   личное сообщение
 
 

нельзя хранить критически важные данные или персональные сведения за конфеденциальность которых вы несете ответственность в настольных СУБД типа Access.mdb(mde)

вот собственно и все, остально детали :)

перелезайте на ADP+SQL и обеспечивайте защиту и конфеденциальность данных средствами нормального сервера.

  Ответить  
 
 автор: Clerkus   (21.01.2010 в 23:10)   личное сообщение
 
 

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

  Ответить  
 
 автор: Explorer   (21.01.2010 в 23:31)   личное сообщение
 
 

мне трудно что-то советовать

в общем случае такой способ лучше чем ничего

часть данных, которые не требуется обрабатывать можно хранить в графических файлах или в пдф в полях МЕМО или BLOB

  Ответить  
 
 автор: kot_k_k   (25.01.2010 в 10:48)   личное сообщение
 
 

юзеры могут скопировать таблу со связями ID во время работы, так что не факт изымания таблы даст результат.

таблу можно хранить вообще в другом фале MDB, доступ к которому осуществлять только програмно, тогда мороки с убрал-поставил таблу не будет, вот кода это добавит.

  Ответить  
 
 автор: Clerkus   (26.01.2010 в 15:16)   личное сообщение
 
 

юзеры могут скопировать таблу со связями ID во время работы, так что не факт изымания таблы даст результат.


нет ... не совсем верно ... никаких связей нет ... заполнение табл идет из независимой формы программным путем ... так что ... воттт

юзеры могут скопировать таблу со связями ID во время работы, так что не факт изымания таблы даст результат.


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

  Ответить  
 
 автор: kot_k_k   (26.01.2010 в 15:55)   личное сообщение
 
 

про повтор цитаты понял-

вот так я получил доступ из своегей клинсткой части, которая соединена с другой базой, доступ к другой базе и ее таблам.


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


открываем - декодируем/кодируем/вносим изменения и закрываем.

п.с. можно повесить глобальной переменной - открыли и висит в памяти, хотя кажется черевато.

  Ответить  
 
 автор: ГлазастыйМышь   (27.01.2010 в 09:00)   личное сообщение
 
 

Главный вопрос, а для чего все затевается?
Пытаетесь обойти закон о защите персональных данных?
Защита от оператора базы?
Защита от третьих лиц?

  Ответить  
 
 автор: Clerkus   (27.01.2010 в 16:28)   личное сообщение
 
 

Закон обходить ... нет уж
Есть данные по лицам (ну помимо персонифицурующих, данные относящиеся к деятельности конторы), оператор один ... в моем лице (как бэ от себя защищать ... ну не знаю), но кроме этого есть еще люди имеющие доступ к этой машине, и есть среди них оч любознательные и люботные (а им эту инфу не нада знать) ... не знаю ответил ли я на ваш вопрос

ps ...да счас это все ведется на бумаге дедовским способом ...ну и сейф разумеется

  Ответить  
 
 автор: ГлазастыйМышь   (27.01.2010 в 16:55)   личное сообщение
 
 

шифруй/расшифровывай на лету
в начале работы вводишь ключ, данные отображаются расшифрованные с данным ключом.
Проблемы со вводом данных будут. Напрямую в таблицы нельзя, только через формы с шифровкой налету.
Какой модуль шифрования подключить - это уже отдельный разговор

  Ответить  
 
 автор: час   (27.01.2010 в 17:09)   личное сообщение
 
 

вот попробуй
создай модуль класса назови его 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

  Ответить  
 
 автор: час   (27.01.2010 в 17:16)   личное сообщение
 
 

Для работы с классом потребуются 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

  Ответить  
 
 автор: Clerkus   (30.01.2010 в 22:57)   личное сообщение
 
 

хм.... всё-таки скатились до шифрования ...
РЕЗЮМЕ: тема себя исчерпала.... исходя из всех топиков , вытекает тема защиты, а такая однако уже есть

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList