Каждый раз переписывать все на дискеты и уносить с собой? Но базы данных Access весьма объемисты, а зачастую их к тому же еще и много. Хранить данные в личной папке сетевого сервера? Но не всегда и не у всех она есть. И потом, остается еще сетевой администратор, которому доступно почти все.

Но не стоит поддаваться панике! Есть несколько способов закрыть данные на виртуальный замок — правда, до их описания не всегда доходят руки у авторов книжек по Access «для чайников». Что ж, перестаньте, наконец, быть «чайником» и покажите злоумышленникам зубы!

Защита на скорую руку

Самый простой способ защиты — это установка пароля, или, как еще говорят, «запароливание» базы данных. В этом случае при каждом открытии файла Access будет спрашивать пароль, и если пользователь его не введет, не видать ему ваших данных, как своих ушей.

Чтобы запаролить базу данных Access 97, откройте ее в режиме монопольного доступа (этот режим устанавливается в диалоговом окне открытия файла; если база не откроется, причина скорее всего в том, что с ней работает кто-то еще по сети или вы сами в другом сеансе Access). Затем войдите в меню «Сервис?Защита?Задать пароль базы данных» и в появившемся диалоговом окне введите пароль в поле «Пароль» и повторите его в поле «Подтверждение» (рис. 1). После этого нажмите кнопку «OK» и закройте базу данных. При следующей попытке ее открыть Access вежливо попросит ввести пароль.

Рис. 1. Задание пароля

Теперь запомните два очень важных момента. Первое: если вы потеряете или забудете пароль, то никогда уже не сможете открыть защищенную базу данных. Поэтому позаботьтесь о его сохранности. И второе: никогда не закрывайте паролем реплицируемые базы данных, иначе могут возникнуть проблемы с их обновлением.

Пароль — простейший, но не самый надёжный способ самообороны в виртуальном мире. Сегодня уже известны несколько программ для взламывания запароленных баз данных Access. Но это всё же лучше, чем ничего. Естественно, не следует раздавать свой пароль направо и налево, а также оставлять базу данных открытой на своем компьютере, если вы куда-то надолго уходите: в уже открытой базе сможет копаться любой, не вводя никакого пароля.

Защита от умника

«Ну, хорошо, — подумает «продвинутый» киберзлодей. — Ты базу данных запаролил, пароль мне не даешь, и уходя закрываешь Access. Но не больно-то гордись! Я ее все-таки посмотрю. Увидишь, кто из нас круче...»

Каким же образом он сможет посмотреть вашу сверхсекретную базу данных? Да очень просто: в текстовом редакторе.

Строковые данные хранятся в Access 97 «как есть», т. е. в виде обычных строк. И их несложно прочитать, открыв базу данных без всякого пароля в любом текстовом редакторе, поддерживающем большие файлы. Правда, таким путем злодей получит не всю информацию, а только строковую, но и это достаточно неприятно.

Чтобы избежать чтения базы как текста, ее можно зашифровать, и тогда вместо внятных слов любопытный увидит невразумительную мешанину символов, раскодировать которую, насколько известно, пока никому не удавалось. Конечно, если зашифрованная база не запаролена, любой без труда откроет ее в Access, так что шифрование осмысленно использовать только вместе с паролем. Итак, приступаем к шифрованию. Запустите Access и войдите в меню «Сервис-Защита-Шифровать/дешифровать». На экране появится диалоговое окно открытия файла; выберите в нем нужную базу данных (она не должна быть открыта) и нажмите «OK». После этого на экране появится окно сохранения файла. Задайте в нем имя зашифрованной базы и нажмите кнопку «OK». Если исходная база данных зашифрована, Access определит это и дешифрует ее.

Глобальные мероприятия

Поздравляем: ваша личная база данных замечательно защищена. И вот, прослышав о ваших успехах, вас вызывает начальник и просит построить защиту для большой и разветвленной сетевой базы, с которой работает вся фирма. При этом разным пользователям требуется предоставить доступ к разным частям базы: отдел кадров работает с одним набором таблиц, приемная директора — с другим, бухгалтерия — с третьим.

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

Немного о рабочих группах

Рабочей группой в Access называется группа пользователей, работающих с одной базой данных. Каждый пользователь в рабочей группе имеет свою учетную запись, в которой зафиксированы его имя, пароль и (дополнительный сюрприз от Microsoft) пользовательские настройки среды Access. Из пользователей могут формироваться подгруппы («группы» в интерактивной документации русской версии Access; мы будем пользоваться термином «подгруппа», чтобы избежать путаницы с «рабочей группой»). Каждая подгруппа также имеет свою учетную запись.

Права доступа к конкретным объектам базы данных присваиваются либо пользователям, либо целиком подгруппам и определяют, что разрешено данному пользователю (пользователям) делать с данным объектом. Например, можно указать, что пользователь «Директор» имеет право просматривать таблицу «Зарплата» и изменять в ней данные, пользователь «Бухгалтер» — только просматривать, а пользователь «Склад» вообще не должен знать о ее существовании (набор прав для каждого типа объектов свой).

Учетные записи пользователей и подгрупп хранятся в специальном файле рабочей группы; он имеет расширение mdw. По умолчанию Access при установке создает в системной папке Windows файл System.mdw, содержащий учетные записи для пользователя Admin и подгрупп Admins и Users. При открытии Access по умолчанию используются установки учетной записи Admin. Информация о правах пользователей и подгрупп по отношению к тем или иным объектам баз данных хранится в файлах соответствующих баз.

Обычная последовательность действий по созданию системы защиты на уровне пользователей следующая:

  • создается новая рабочая группа;
  • в нее вносятся учетные записи пользователей и подгрупп;
  • подгруппам и пользователям присваиваются соответствующие права доступа к различным объектам базы данных;
  • все пользователи защищаемой базы данных подключаются к созданной рабочей группе.

Планирование

Однако прежде всего следует разобраться, какие подгруппы и с какими правами должны быть созданы. Для этого:

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

В результате у вас получится своеобразный план построения системы защиты. Возможно, он будет выглядеть так: слева расположены названия отделов — подгрупп, справа — имена пользователей; связи пользователей с подгруппами показаны линиями. Лично я сделал бы так, но не буду навязывать вам свои эстетические представления. Главное, чтобы схема была понятна вам и вашим коллегам.

Создание рабочей группы

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

Для формирования рабочих групп и подключения к ним служит утилита «Администратор рабочих групп MS Access»; при установке Access в папке Office 97 (по умолчанию ?Program filesMicrosoft Office?) создается ее ярлык. Откройте эту папку, запустите утилиту и в появившемся окне нажмите кнопку «Создать...». На экране появится новое окно, в котором следует ввести данные владельца рабочей группы (по умолчанию подставляется ваше имя и название вашей организации) и ее код — произвольную последовательность из не более чем 20 букв и цифр (рис. 2, слева). Нажмите кнопку «OK».

Рис. 2. Создание рабочей группы

После этого вам будет предложено задать имя файла вновь создаваемой рабочей группы и путь к нему. Путь должен указывать на выбранную папку общего доступа, а в качестве имени можно как оставить предложенное программой, так и выбрать любое другое. Нажмите кнопку «OK» и в ответ на появившийся запрос подтвердите создание файла. Утилита создаст заданный файл, о чем выдаст сообщение, и автоматически подключит к нему Access.

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

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

Учетные записи

Вновь созданная рабочая группа содержит учетные записи подгрупп Admins и Users и входящего в них пользователя Admin. Подгруппа Admins объединяет пользователей со специальными, так называемыми административными полномочиями: они могут просматривать и изменять права доступа пользователей к объектам базы; кроме того, в их ведении находятся репликация базы и изменение параметров ее запуска (заголовок, форма, открываемая при запуске, и т. д.). Нормально, чтобы этими полномочиями обладал только один человек; в любом случае не следует давать их кому попало. В подгруппу Users входят все пользователи базы.

Учетные записи всех прочих необходимых подгрупп и пользователей вам предстоит добавить. Как для пользователя, так и для подгруппы учетная запись должна иметь имя и код. Имя представляет собой строку длиной от 1 до 20 символов, причем символы ?/?, ??, ?[?, ?]?, ?:?, ?|?, ??, ?+?, ?=?, ?;?, ?,?, ??? и ?*? не допускаются; длина кода — от 4 до 20 символов (рис.3).

Рис. 3. Создание учетной записи

Удобнее начать с подгрупп. Войдите в меню «Сервис?Защита?Пользователи и группы», в открывшемся окне выберите закладку «Группы» и нажмите кнопку «Создать...». На экране появится окно создания новой учетной записи; укажите в нем имя и код подгруппы, после чего нажмите кнопку «OK».

Определив таким образом все необходимые подгруппы, перейдите на страницу «Пользователи», нажмите опять же кнопку «Создать...» и в уже знакомом вам окне создания учетной записи задайте имя и код пользователя. Затем укажите подгруппы, в которые будет входить новый пользователь. Чтобы включить пользователя в подгруппу, нужно выделить ее название в списке «Имеющиеся группы» и нажать кнопку «Добавить», после чего оно появится в списке «Участие в группе» (рис. 4). Повторите описанную процедуру для каждого пользователя.

Рис. 4. Включение пользователя в группу

Чтобы удалить пользователя из подгруппы, выделите название подгруппы в списке «Участие в группе» и нажмите кнопку «Удалить». Невозможно удалить пользователя из группы Users; кроме того, в группе Admins всегда должен быть хотя бы один пользователь.

Для удаления учетной записи нужно выбрать ее в списке пользователей или подгрупп на соответствующей странице, нажать кнопку «Удалить» и на запрос о подтверждении действия ответить «Да». Access не позволит вам удалить подгруппы Admins и Users, а также пользователя Admin. Единственный способ изменить учетную запись — удалить ее, а затем создать заново.

Права доступа

После материализации духов можно приступать к раздаче слонов — прав доступа. Загрузите базу данных, которую вы собираетесь защищать, и войдите в меню «Сервис? Защита? Разрешения». На экране появится диалоговое окно «Разрешения», открытое на одноименной странице (рис. 5). Сначала включите кнопку «Группы», чтобы задать права доступа для целых подгрупп. Выделите первую подгруппу в списке. В комбинированном списке «Тип объекта» выберите тип объектов, после чего в списке «Имя объекта» появятся имена объектов вашей базы, относящихся к этому типу. Выделите нужный объект и установите, как требуется, права доступа в наборе «Разрешения». Не забудьте сделать это для вновь создаваемых объектов.

Рис. 5. Задание прав доступа

После каждого изменения прав доступа Access будет спрашивать, изменить ли их прямо сейчас, не дожидаясь нажатия кнопки «OK». Чтобы избежать такой назойливости, можно всякий раз нажимать кнопку «Применить». Проделайте это со всеми подгруппами, а затем, включив кнопку с зависимой фиксацией «Пользователи», — с теми пользователями, которым необходимо назначить какие-либо особые права.

Обратите внимание на то, что права доступа для форм и отчетов не распространяются на таблицы или запросы, данные которых в них отображаются. Поэтому если пользователь «Чайник» имеет право только на чтение таблицы «Зарплата» и на открытие формы «Форма_зарплаты», где отображаются данные этой таблицы, то он сможет только просматривать их.

Если один пользователь входит в несколько подгрупп, его права, определенные в этих подгруппах, логически складываются друг с другом. Пусть, например, пользователь User1 принадлежит к подгруппам Group1 и Group2; пользователи из Group1 могут читать данные и макеты таблиц, а из Group2 — читать и изменять данные таблиц. В таком случае User1 сможет читать макеты таблиц и читать и изменять их данные.

Скажи пароль!

Казалось бы, теперь-то уж база данных защищена. Но попробуйте закрыть и снова открыть ее — она откроется. В чем же дело? Оказывается, чтобы активизировать систему защиты, необходимо присвоить пароль пользователю Admin.

Рис. 6. Задание пароля администратора базы

Снова войдите в меню «Сервис-Защита-Пользователи и группы» и в окне «Пользователи и группы» выберите закладку «Изменение пароля» (рис. 6). Далее нужно ввести свой текущий пароль (в данный момент его нет, поэтому вы ничего не вводите), новый пароль и еще раз новый пароль для подтверждения. Длина пароля — до 14 символов, причем регистр букв учитывается. После этого нажмите кнопку «OK» и обязательно закройте Access.

Когда вы снова запустите Access, на экране появится диалоговое окно, в котором вы должны будете ввести какое-либо из зарегистрированных имен пользователей. Если это будет имя Admin, то придется также ввести пароль. Попробуйте указать имя одного из обычных пользователей и поработать с базой данных — вы увидите, что все права доступа на самом деле действуют. Теперь при желании можно присвоить пароли другим пользователям, но для этого придется попотеть: для каждого пользователя нужно будет открыть базу данных под его именем и задать пароль в окне «Изменение пароля».

Настройка рабочих мест пользователей

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

Связь устанавливается с помощью все той же утилиты «Администратор рабочих групп». Запустите ее, нажмите кнопку «Связь...», в появившемся окне укажите путь к файлу рабочей группы и нажмите кнопку «OK» (рис. 7). Утилита откроет файл рабочей группы и выдаст соответствующее сообщение. Теперь Access на этой машине при запуске будет запрашивать имя пользователя.

Рис. 7. Установка связи с рабочей группой

Все! Система защиты на уровне пользователей построена. Чего же мы фактически добились? Главное — мы точно определили, кто с какими объектами имеет право работать и что конкретно может с ними делать. Пользователи больше не сумеют изменить или повредить конфиденциальные данные, а злоумышленники отныне обречены кусать локти от досады. Кроме того, никто не изменит код программы, а значит, ваши авторские права тоже надежно защищены. Правда, на достижение этого результата было потрачено немало сил, и защита не распространяется на отчуждаемые, «коробочные» прикладные системы.

Борьба за ущемление прав пользователей

Пользователь Admin

Вы, наверное, думаете, что надежно защитили базу данных. Ан нет! Достаточно «продвинутый» пользователь запустит «Администратора рабочих групп», создаст новый файл рабочей группы, привяжется к нему (более того, программа выполнит привязку автоматически!) и со злобной ухмылкой откроет базу, не введя ни имени, ни пароля.

Действительно, утилита создаст в новом файле рабочей группы пользователя Admin, а Access после подключения к новой, «пустой», рабочей группе откроет базу данных для этого пользователя. И если вы определили для него неограниченные права, то он их и получит.

Самое забавное в том, что пользователя Admin удалить нельзя. Однако можно предоставить ему минимальные права доступа к базе данных и удалить его из группы Admins. Так вы устраните ещё одну лазейку в защите. Но не последнюю!

Дело в том, что пользователь Admin в заново созданном файле рабочей группы по умолчанию попадает в подгруппу Admins, а значит, сможет установить себе любые права доступа к чему угодно. «Красивого» пути решения этой проблемы, насколько мне известно, нет. Остается только удалить с рабочих станций программу администратора рабочих групп (она находится в папке Windows/System и называется Wrkgadm. exe; именно на неё и указывает ярлык в папке Office 97) и средствами сети закрыть от записи файл рабочей группы на сервере.

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

Владелец объекта

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

Для смены владельца объекта откройте нужную базу данных, войдите в меню «Сервис-Защита-Разрешения» и в знакомом диалоговом окне «Разрешения» перейдите на страницу «Смена владельца» (рис. 8).

Рис. 8. Смена владельца объекта

Выберите в соответствующих списках нужный тип объекта и затем сам объект, включите кнопку «Пользователи» или «Группы» в зависимости от того, требуется ли сделать владельцем объекта пользователя или сразу подгруппу (имейте в виду, что владельцем самой базы данных может быть только пользователь), задайте нового владельца в списке «Новый владелец» и нажмите кнопку «Сменить владельца».

Рис. 9. Можно предоставить всем пользователям

права владельца на новые запросы

Внимание! Access позволяет сделать так, чтобы все пользователи автоматически получали права владельца на вновь созданные запросы (права будут распространяться на данные, но не на макет). Для этого откройте окно параметров (меню «Сервис?Параметры...») и на странице «Таблицы/запросы» включите в поле «При запуске предоставляются права» кнопку «Владельца» (рис. 9). Когда включена радиокнопка «Пользователя», защита работает обычным образом.

Чтобы выдать всем пользователям права владельца на уже существующий запрос, запустите для него конструктор запросов (выберите в окне базы данных закладку «Запросы», отметьте нужный запрос и нажмите кнопку «Конструктор»). Затем щелкните правой кнопкой мыши в верхней половине окна, где отображаются входящие в запрос таблицы (но не на самих таблицах). Выберите в контекстном меню пункт «Свойства...» и в списке свойств запроса измените значение свойства «При запуске предоставляются права». После этого закройте окно списка свойств и окно конструктора, сохранив макет.

Мастер защиты

Для облегчения работы по ущемлению прав пользователей в Access включен Мастер защиты, однако довольно примитивный. Единственное, на что он способен, — это создать новую, защищенную базу данных, чьи объекты имеют ограничения на доступ со стороны пользователей из группы Users. Вы задаете типы объектов, к которым следует ограничить доступ, и имя базы, а Мастер делает свое дело.

Для создания сколько-нибудь развитой системы защиты Мастер подходит плохо. Но если вы все-таки решили отдаться на его милость, не делайте владельцем новой базы пользователя Admin. Если у вас нет другого пользователя с административными полномочиями, создайте его, а затем удалите пользователя Admin из подгруппы Admins и перезапустите Access для нового пользователя-администратора. Теперь можно войти в меню «Сервис-Защита-Мастер...» и следовать указаниям Мастера.

И напоследок...

Вот и все. Теперь вы знаете, как защитить базу данных Access 97 от недозволенного доступа. Вы сможете создать защиту двух уровней: простую, без разграничения прав пользователей, и сложную, разветвленную, не написав при этом ни строчки кода и не привлекая дополнительных программных продуктов. Тем самым мы лишний раз убедились в том, что Access таит в себе немало продвинутых возможностей, о которых не говорится в книжках для «чайников».

Конечно, в мире нет ничего идеального, и система защиты Access не является исключением: в ней хватает «дыр», которые нелегко будет заткнуть. Но ведь Access и не предназначается для построения высокозащищённых систем — для этого существуют SQL-серверы. Не стоит ожидать слишком многого от настольных СУБД, но и не стоит их недооценивать. И надо же, в конце концов, когда-то выходить из «чайникового» состояния!