Защита на mdb бази данни

И така, как да защитим? Един опитен достъпник ще отговори веднага - няма начин. И той ще бъде прав. Почти. Няма защита от него, но има защита от по-малко опитните. Друг опитен ще каже: всичко се знае за това. И същото ще бъде правилно. Почти. Има нещо ново.

Въведение. Все още няма проблеми със сигурността.

Обичайна ситуация: Ангажирахте се да направите база данни бързо, евтино и качествено. Въпреки че, както знаете, това е невъзможно. Един звезден програмист може да реши само два проблема едновременно. Добър. Но ти го взе. Няма проблеми със сигурността. На три компютъра ще работят жени, които още не са виждали достъп, а на още един - на шефа, който също не го познава. Като цяло всичко е наред.

Вие сте в бърз начин за. седмици създавате базата данни. Разбира се, настройте базата данни да се стартира автоматично с помощта на макроса autoexec или като посочите първата форма. Между другото, autoexec е по-гъвкав. Можете да стартирате програма, която не само ще отвори първия формуляр, но и може да извърши различни операции по настройка. След това поставете базата данни на компютри и започнете да се борите с недоволни жени, които не знаят как и най-важното защо да въвеждат данни, които вече имат някъде. И със собствените си грешки, които са склонни да излязат наяве в най-неподходящия момент. Но минава известно време и този период свършва. Потребителите и шефът виждат първите резултати, грешките почти спират да се появяват. Жените вече искат да променят надписите, шрифтовете, цветовете за себе си И вие правите това пред очите им с чувство на взаимна радост. Шефът има нови желания и вие доразвивате задачата. И изведнъж. И изведнъж ви извикват и виждате повредена форма (опции: повреден модул, изтрита таблица и т.н.). Разбира се, това е добре, защото означава, че жените обичат вашата задача, искат да я разберат и да подобрят нещо. това е същотоозначава, че потребителите от начинаещите са преминали в категорията на любопитните. Но имате главоболие - в крайна сметка шефът ви обвинява за всички провали на задачата. Все пак вие сте програмист - вие сте търсени. Сега ясно усещате, че седите върху буре с барут. Искате или не, имате задача:

Защита от любопитен потребител.

Разбира се, искам да разреша този проблем просто и бързо. Например, за да скриете напълно прозореца за достъп с всичките му вредни бутони. Как да го направим? - този въпрос беше зададен многократно.

Така че решение 1. Скрийте прозореца за достъп.

Отговаряйки на въпроса „Как?“, Юрий Прус даде пълно отворено описание на това решение в статията „Стартиране на приложение без прозорец за достъп и деактивиране на бутона за затваряне на прозореца за достъп“ „Яжте формуляри? Или учете жените как да ги използват от клавиатурата? И двете са много скъпи. Освен това сега не можете просто да свиете задачата, а на големите монитори не можете да преместите всички формуляри настрани наведнъж - трябва един по един. В същото време всички Формите са станали изскачащи. И програмирането на такива форми има своите неприятни характеристики. Например събитията "Активиране" и "Деактивиране" (активиране, деактивиране) вече не работят. Обобщавайки, можем да кажем, че това "просто и бързо" решение води до доста дълги и неприятни последици. Така че нека не скриваме прозореца за достъп. Да скрием "вредните" бутони.

Решение 2: Скрийте лошите бутони.

Вредни са тези, които дават достъп до прозореца на базата данни и поставят обекти в режимконструктор. И така, прозорецът на базата данни. На първо място, трябва да се погрижите да изключите клавиша shift, който спира стартирането на програмата и по този начин дава достъп до прозореца на базата данни. След това деактивирайте бързите клавиши за извикване на прозореца на базата данни (ctrl+f1, f11). И накрая, заменете стандартните ленти с инструменти със свои собствени. Как да направите това е описано в помощ и в почти всяка книга за достъп и в оригинални разработки. Примери: „Защита от изместване“ (http://hiprog.com/access/article.asp? >„Защита от изместване“ (http://nsa.chat.ru/userinterfase_sas_shift.html). Трябва да се отбележи, че втората статията дава много повече от защита от shift-a. Със замяната на лентите с инструменти с ваши собствени, вие почти решихте втория проблем - забраната за извикване на конструктори. Почти - защото те често забравят да деактивират контекстното меню с десен бутон във формуляри. И това прави възможно превключването към режим на проектиране. За да деактивирате извикването, задайте свойството "Контекстни менюта" във формулярите на "не" (бързо меню = не). H след като завършите тази по-усърдна работа, най-накрая въздъхвате с облекчение „Любопитният потребител вече няма да обърка нищо и всички полезни бутони са там. Това е вярно. Но. Но грешката ви изскочи отново. При потребителя. Гледате съобщението за достъп и не можете да направите нищо.“ Нито гледайте състоянието на таблиците, нито стойностите на променливите, нито . Вие самият забранихте всичко. И тази забрана сега ви удря. Нищо повече не може да се направи на място. Първо ще трябва да попитате какво е направил потребителят преди това, след това отидете на вашата отворена версия на базата данни и се опитайте да имитирате последователността от действия, които са причинили грешката. Обикновено успява. По-рядко - не, защото потребителят не е казал нещо или не всичко. Но се случва много по-лошо. Потребителят рядко има грешка, но тя се появява, но вие не. Обща схемапоявата на такава грешка: възниква при рядка комбинация от данни в момента на тяхната промяна. След нулиране на грешката хитрият достъп коригира грешката в данните. И не я виждаш. Трудно е сами да създадете тази комбинация от данни поради нейната рядкост. Как да се справим с такава грешка? Би било хубаво все пак да го анализирате на място. И без да пита потребителя. Но избраната система за защита не позволява това. Възможно ли е да направите такава защита, че любопитен потребител да не може да стигне никъде, но вие можете в същия момент? Отговорът е да!

Решение 3. Система за проследяване. Това е новото.

Отново имате напълно незащитена база. Потребителят извърши някакво вредно действие: извика прозореца на базата данни, постави формуляра в режим на проектиране, отвори прозореца за отстраняване на грешки. Но това може да се определи програмно и да хване потребителя за ръка! И не му позволявайте да прави нищо И ако седите на компютъра, тогава ще кажете на програмата - "аз съм!". И трябва да премахне цялата защита. След това сортирате грешката, коригирате я и т.н. След това рестартирате базата и защитата автоматично се включва отново. Това е общата идея за система за проследяване.

Задействането на таймера се извършва най-добре от скрита форма, която се отваря първа и винаги се зарежда. Същата форма, която използвам за съхраняване на споделени променливи. Има две предимства пред използването на публични променливи в общ модул: те не се нулират при нулиране, което улеснява отстраняването на грешки и могат да се използват директно в заявки като параметри за избор. Ако потребителят се опита да направи този формуляр видим (имаме всички стандартни менюта), тогава формулярът трябва да извика същия защитен формуляр при събитието за активиране, при условие че timerinterval > 0. Сега почти всичко. Остава да направите таен вход за себе си в защитна форма. Това могат да направят мнозинаначини. Например, като щракнете върху който и да е бутон на мишката, докато едновременно натискате комбинацията от клавиши shift, ctrl, alt. Възможно е да премахнете защитата чрез последователна комбинация от такива кликвания. Можете също така да реагирате на въвеждане на знаци от клавиатурата. Като цяло това е въпрос на вкус. Самото премахване на защитата се свежда до нулиране на интервала на таймера (изключване на системата за проследяване) и затваряне на защитната форма. Сега първата (скрита) форма става достъпна.

Функция за определяне на вида на активния прозорец. Дадена е версия A-97. Изход: = вярно, ако прозорецът е вреден, невярно в противен случай.

публична функция rpprotect () като boolean static s като низ, n толкова дълго, typewindow колкото дълго

при грешка възобновяване следващ грешка . ясно

n = екран. приложение. currentobjecttype ако грешка > 0 след това излезте от функцията 'за всеки случай s = screen.application.currentobjectname

' тип не е дефиниран или диалогова форма ако n = - 1 тогава изход от функцията

'Тип дефиниран typewindow = n n = syscmd(acsyscmdgetobjectstate, typewindow, s) if n = 0 then goto truend 'обектът не е отворен - основен прозорец

изберете case typewindow case actable, acquery, acmacro, acmodule goto trueend 'Достъпът винаги е отказан case acform s = screen.activeform.name if err > 0 след това goto truend 'форма в прозореца на базата данни ако форми ( s ). currentview = 0 след това goto trueend 'форма в конструктор case acreport s = screen.activereport.name if err > 0 след това goto truend ' отчет в прозореца на базата данни n = отчети ( s ). има данни ако грешка > 0 след това goto truend ' отчет в конструктор end select exit функция

trueend: rpprotect = true крайна функция

За A-2000 функцията е по-сложна.

Практиката на използване на системата за проследяване показва, че потребителят бързо и добре помни каквокакво да не правим. И това не става. Последна бележка. Системата изобщо не отменя използването на своите ленти с инструменти. Те могат да бъдат всякакви.

Всичко е казано за защитата от любопитен потребител. И да приемем, че е готово. Бурето с барут е премахнато. Въпреки това, нека развием ситуацията по-нататък. Нов служител идва във вашата компания и след известно време ви моли за обяснение защо сте написали такава и тази функция в такъв и такъв модул по такъв и такъв начин, а не по друг начин. Преодолявайки изненадата си, разбирате, че това не е потребител, а най-малкото ламер (начинаещ програмист). И той премахна вашата защита. Сега имате ново предизвикателство:

Ламерна защита.

Ако решите да комбинирате lamer защита със система за проследяване (точно това правя аз), тогава трябва внимателно да прецените нивото на права (разрешения), които предоставяте на потребителя. Не забравяйте, че по време на анализа на грешката ще бъдете на компютъра, но с потребителски права. Забележка за по-опитните. Можете да направите програма, която динамично променя правата на потребителя на администратор за всички обекти на база данни, когато използвате таен вход. Това е за вас. Тогава не е нужно да мислите твърде много за възлагането на права. И, разбира се, не забравяйте за програмата, която възстановява първоначалните зададени разрешения, ако са били променени. Извиквайки тази програма, поставям блок от начални настройки, извикан от макроса autoexec. Програмите за промяна на правата са доста прости, но индивидуални. Поради това те не са представени. За писането им е достатъчна помощ.

Завършване. Защита от опитен специалист.

Както каза ssy във форума: "Това е кофти ситуация. Защитата е някак там, но се счупва с половин ритник. Проблемът е, че името и кодът на собственика на базата данни могат да бъдат определени с помощта на специални програми, например http://msa.polarcom.ru/"

Мога да добавя още един линк към чуждизточник: http://www.lostpassword.com/access.htm.

пс. Най-мощната защита на базата е преводът й във формат mde. Но това е тема за друга статия.