Административные права предоставляют полный доступ к объектам и/или базе данных, а также разрешение на изменение прав доступа других пользователей и групп. Административными правами обладают:
Даже если в определенный момент пользователь не может выполнить какую-либо операцию из-за отсутствия прав доступа, он может иметь разрешение назначить себе эти права. Такими пользователями являются пользователи группы Admins рабочей группы базы данных и владельцы объектов.
Только пользователи группы Admins рабочей группы базы данных могут изменять параметры защиты с помощью команд меню Сервис, Защита (Tools, Security) или с помощью Мастера защиты на уровне пользователей.
ЧАСТЬ III. РАЗРАБОТКА и СОПРОВОЖДЕНИЕ ПРИЛОЖЕНИЙ ACCESS 2002 Глава 16. Особенности сетевых приложений Способы совместного использования баз данных Совместное использование базы данных Совместное использование только данных Совместное использование объектов базы данных через Интернет Совместная работа с базой данных с помощью репликации Совместный доступ к базе данных с помощью SQL Server Режимы работы с базой данных в сети Пример сетевого приложения Правила игры Сетевое решение в реализации архитектуры приложения Организация совместного доступа к данным и объектам Совместный просмотр и изменение данных Методы управления блокировками записей Предотвращение конфликтов при блокировке записей в сети Отображение обновленных данных Совместное изменение объектов Совместное использование страниц доступа к данным Организация обмена данными между компонентами сетевого приложения Программирование с использованием интерфейса DАО Создание и использование рабочей области Открытие источника данных Программное изменение структуры и схемы данных Выполнение операций с данными Программная синхронизация доступа к данным Выполнение транзакций Защита сетевого приложения Access Защита базы данных на уровне пользователей Рабочая группа пользователей базы данных Встроенные учетные записи Access Административные права доступа Право на владение объектами базы данных Установка системы защиты на уровне пользователей Использование Мастера защиты Создание и подключение файла рабочей группы Снятие защиты на уровне пользователей Создание учетных записей Назначение прав доступа Права доступа в приложении "Игра в доминирование" Ограничение разрешений для встроенных учетных записей Access Защита программного кода на VBA Выводы |
Процедура установки защиты базы данных Access на уровне пользователей автоматизирована, ее можно выполнить с помощью Мастера защиты базы данных, однако воспользоваться им смогут только пользователи группы Admins.
Чтобы защитить базу данных на уровне пользователей с помощью мастера:
Мастер защиты базы данных на уровне пользователей позволяет создать или изменить существующий файл рабочей группы (рис. 16.4). Рекомендуется создать новый файл рабочей группы и не использовать системный файл рабочей группы System, mdw. Для того чтобы изменить существующий файл рабочей группы (для защиты базы данных), необходимо зарегистрироваться с именем любого пользователя (кроме пользователя Admin), обладающего административными правами доступа к базе данных. Если зарегистрироваться с именем пользователя Admin, который по умолчанию включен в группу Admins и обладает административными правами, с помощью Мастера защиты можно будет только создать новый файл рабочей группы и нельзя будет изменить существующий.
Пока один пользователь редактирует запись, Access позволяет автоматически запретить другим пользователям изменять ее до тех пор, пока первый пользователь не закончит ее правку. Предоставление одному пользователю исключительного права доступа к записи называется блокировкой.
Существует три параметра блокировки записей в базе данных Access.
Замечание
При редактировании данных из присоединенных таблиц SQL Server через ODBC применяются параметры блокировки записей этого сервера, а установленный параметр блокировки в Access игнориуется, будто выбран параметр "отсутствие блокировки".
Чтобы установить параметр блокировки записей в сети, используемый по умолчанию:
Существует возможность выбора одного из двух уровней блокировки:
Блокировка записей. Блокируется только редактируемая запись.
С помощью системы защиты на уровне пользователя можно ограничить доступ к базе данных и отдельным ее объектам (таблицам, запросам, формам, отчетам и макросам).
В Access 97 можно было назначить также права для доступа к модулям VBA. В Access 2000 и Access 2002 защита модулей не входит в систему защиты на уровне пользователей. Защита программного проекта VBA выполняется отдельно. О том, как это сделать, рассказывается
в разд. "Защита программного кода на VBA" данной главы
(а о защите страниц доступа к данным —
в разд. "Защита совместно используемых страниц доступа к данным"этой же главы).
Способ установки прав доступа к базе данных (и ее объектам), защищенной на уровне пользователей, описан
в разд. "Назначение прав доступа к объектам базы данных" гл. 20,
поскольку это является не только задачей разработки, но и задачей администрирования.
Чтобы закрыть доступ к объектам базы данных посторонним пользователям, зарегистрированным с помощью стандартной учетной записи Admin:
Замечание
Для того чтобы обеспечить полную защиту вашей базы данных, не используйте стандартный файл рабочей группы System. mdw, создаваемый при установке Microsoft Access. Следует удостовериться, что файл рабочей группы, определяющий рабочую группу, к которой вы присоединяетесь, был создан с уникальным кодом рабочей группы, или, если это не так, следует создать новую рабочую группу.
Замечание
Если владельцем объектов в защищаемой базе данных должен быть пользователь, не входящий в группу администраторов, создайте для него учетную запись, снова перезапустите Access и зарегистрируйтесь с именем этого пользователя при открытии базы данных. Этот пользователь должен, по крайней мере, обладать правами Чтение данных (Read data) и Чтение макета (Read design) для всех объектов базы данных, которые требуется защитить.
Существует несколько способов обмена данными между компонентами приложения по сети:
Использование запросов и связанных таблиц подробно рассмотрено в других главах этой книги. Мы остановимся на программном доступе к базам данных с использованием интерфейса DАО. (06 установлении связи с таблицами см. гл. 3, об использовании запросов см. гл. 8.)
В сети доступ к одним и тем же объектам могут одновременно получить сразу несколько пользователей. Общий доступ к данным отличается от монопольного. Например, совместная правка записей в таблице/запросе или изменение структуры объекта базы данных может привести к возникновению конфликтов при сохранении изменений в источнике. В Microsoft Access существуют стандартные механизмы для поддержания совместного доступа к данным и объектам базы данных в сети и разрешения конфликтов, возникающих при сохранении изменений.
Общий доступ к базе данных означает:
База данных Access может использоваться одним пользователем на локальном компьютере или несколькими пользователями в сети. Использование базы данных в сети имеет ряд особенностей. Чтобы подготовить базу данных для использования в сети, необходимо выполнить специальную настройку среды Access, параметров базы данных и ее объектов и реализовать особенности общего доступа к данным в программном коде приложения. Об этом и пойдет речь в настоящей главе. Чтобы рассказ не был слишком абстрактным, мы рассмотрим основные вопросы на примере сетевого приложения Access "Игра в доминирование". Это приложение есть на компакт-диске с примерами к книгам серии Microsoft Office 2002, который можно приобрести в дополнение к данной книге.
В этой главе обсуждаются и вопросы разработки, и вопросы работы с сетевыми приложениями Access 2002. Среди них:
Чтобы открыть базу данных, используйте существующий объект Database или создайте новый. Объект Database представляет собой базу данных Jet (файл MDB), базу данных ISAM или источник данных ODBC, подключенный через Jet.
Доступ к текущей базе данных осуществляется с помощью объекта типа Database, возвращаемого методом CurrentDb объекта Application (который представляет приложение Access). Метод CurrentDb входит в набор глобальных методов, поэтому для его вызова можно использовать сокращенную ссылку без префикса Application с точкой (программа 16.3).
Открыть существующую базу данных можно двумя способами:
Метод OpenDatabase объекта DBEngine входит в набор глобальных методов, поэтому при использовании сокращенной ссылки на этот метод без явного указания объекта (DBEngine или Workspace) используется метод объекта DBEngine. Метод OpenDatabase возвращает ссылку на созданный объект Database и имеет следующие параметры (табл. 16.3): Database OpenDatabase(<имя>, <параметры>, <режим>, <соединение>)
Существует несколько способов отображения на экране обновленных данных, полученных из источника данных, совместно используемого в сети несколькими пользователями. Эти способы позволяют увидеть изменения, которые были выполнены другими пользователями, после того как отображенные на экране данные получены из источника.
Обновление данных можно выполнить следующими способами.
Обратимся к системе защиты приложения "Игра в доминирование". Серверная база данных содержит объекты, которые будут совместно использоваться в сети несколькими игроками. Необходимо обеспечить защищенность этих объектов в такой степени, которая позволит игрокам принять участие в игре и при этом не вмешиваться в ход игры. Клиентская база данных содержит объекты, которые будут использоваться одним игроком, имеющим собственную копию этой базы данных или открывшим базу данных клиента в режиме общего доступа. Взаимодействие с серверной базой данных осуществляется через интерфейс DАО с помощью процедур на VBA. Поэтому в клиентской базе данных имеет смысл защитить код на VBA и предоставить всем пользователям права, достаточные для использования объектов базы данных на уровне игрока. Таким образом, необходимо предоставить необходимые права группе Users и защитить проект VBA, как описано
в разд. "Защита программного кода на VBA" данной главы.
Параметры системы защиты приложения "Игра в доминирование" приведены
в приложении 2.
Замечание
В примере приложения "Игра в доминирование" на компакт-диске программный проект не защищен и может быть просмотрен любым пользователем.
"Игра в доминирование" — это состязание между несколькими игроками за захват максимальной части игрового поля. Поле состоит из клеток. Каждая клетка может быть занята одним из игроков на некоторых определенных игрой условиях. Чтобы занять некоторый участок поля, игрок делает ход. Ход может быть принят или отвергнут, в зависимости от того, занята ли эта или смежные клетки другим игроком в соответствии с принятыми правилами. Все игроки имеют общий доступ к полю и стремятся занять клетки одновременно. За занятые клетки игроку присуждаются очки. Кто успеет набрать большее число очков, тот и победитель.
Владельцем
называется учетная запись пользователя, имеющего контроль над базой данных или ее объектом. По умолчанию владельцем объекта или базы данных является пользователь, создавший их (то есть пользователь, зарегистрированный при открытии базы данных). Учетная запись группы не может быть владельцем базы данных, но может быть владельцем ее объекта. В этом случае все пользователи данной группы являются владельцами этого объекта. Владелец объекта или базы данных обладает исключительными правами, которых его нельзя лишить. Даже если ему не предоставлены определенные права доступа, он может их вернуть, изменив права доступа к объекту или базе данных для себя и других пользователей. Владелец базы данных всегда может открыть ее.
Пользователи, которые имеют разрешение на изменение прав доступа к объекту, могут изменить его владельца с помощью диалогового окна
Разрешения
(User and Group Permissions), как описано
в гл. 20,
или воссоздав данный объект его копированием, импортом или экспортом в другую базу данных
(см. разд. "Предоставление права на владение объектами базы данных" гл. 20).
Замечание
Копирование, импорт и экспорт запросов, у которых для свойства При запуске предоставляются права (Run Permissions) установлено значение Владельцы (Owner's), не приводит к изменению их владельцев. Изменение владельца запроса возможно только в том случае, если это свойство имеет значение Пользователи (User's).
Защита базы данных на уровне пользователя с помощью мастера позволяет легко изменить владельца базы данных и ее объектов, поскольку при этом создается новая база данных, в которую импортируются все объекты из исходной базы данных.
Следующие четыре параметра помогают избежать конфликтов при блокировке записей в сети:
Значения этих параметров устанавливаются в диалоговом окне Параметры (Options) на вкладке Другие (Advanced). Подробное описание этих параметров есть в справочной системе Access.
Рассмотрим в качестве примера сетевого приложения Access приложение "Игра в доминирование". Далее в этой главе на данном примере будут проиллюстрированы основные особенности разработки и использования сетевых приложений. Готовое приложение приложение "Игра в доминирование" находится на компакт-диске с примерами к комплекту книг о Microsoft Office 2002 издательства "БХВ — Петербург". Полное описание приложения, в том числе и руководство по его установке, содержится
в приложении 2.
Демонстационный пример сетевого приложения "Игра в доминирование" был разработан нами (конкретно В. Михеевой) еще в предыдущей версии Access 2000, и для иллюстрации этой главы в новом издании книги он был сохранен полностью. Тому есть две причины. Во-первых, в новой версии Access 2002 реализована полноценная поддержка формата баз данных предыдущей версии. Во-вторых, в новой версии Access 2002 не появилось особых новшеств, касающихся совместной работы с приложениями Access в сети. Основным новшеством в этом аспекте является введение широкой поддержки формата XML, в который могут быть преобразованы практически все виды объектов базы данных и проектов Access 2002. Но формат XML не является частью баз данных. Скорее, его можно назвать альтернативным представлением данных в универсальном формате для их использования в Web в масштабах глобальных и корпоративных сетей.
(Об XML подробно рассказано в гл. 12.)
Рассмотрим здесь кратко, в чем заключается суть приложения "Игра в доминирование". Общая идея в реализации этого приложения является типичным примером проектирования сетевых приложений.
Dim ws As Workspace
Dim db As Database
Set ws = DBEngine.Workspaces(0)
' Выбрали рабочую область
' Открываем базу данных:
Set db = ws.OpenDatabase ("DominationGameServer.mdb")
' Код использования базы данных ...
db.Close ' Закрыли базу данных
Set db = Nothing
' Очистили объектную переменную
' (!) Плохой код:
' рабочая область, открытая по умолчанию, будет закрыта
' ws.Close
' Set ws = Nothing
Dim ws As Workspace
Dim db As Database
' Создаем рабочую область:
Set ws = CreateWorkspace("", "Флинт", "пиастры", dbUseJet)
' Открываем базу данных:
Set db = ws.OpenDatabase("DominationGameServer.mdb")
' Код использования базы данных ...
db.Close ' Закрыли базу данных
ws. Close "'
:
' ' Закрыли рабочую область
Set db = Nothing " ' Очищаем объектные
Set ws = Nothing ' переменные
Dim db As Database
Dim rs As Recordset
' Получаем доступ к текущей базе данных:
Set db = CurrentDb
' Открываем таблицу сообщений для игрока (это связанная таблица):
Set rs = db.OpenRecordset("Сообщения", dbOpenDynaset)
' Код использования таблицы ... .
rs.Close ' Закрыли таблицу
Set rs = Nothing ' Очистили объектные переменные
Set db = Nothing
Dim db As Database
Dim fieldSize As Long, i As Long
Dim strDDL As String
' Узнаем линейный размер игрового поля, выраженный в клетках
fieldSize = CLng(get_parameter("РазмерПоля"))
' Открываем базу данных, в которой хранится нужная таблица
Set db = OpenDatabase(CurrentProject.Path & "\DominationGame.mdb")
'
Удалить старую таблицу "ПолеИгрок" strDDL = "DROP TABLE ПолеИгрок;"
' Если таблица не существует, удаление вызовет ошибку
On Error GoTo the_next_2
db.Execute strDDL the_next_2:
On Error GoTo 0
' Создать новую таблицу "ПолеИгрок"
strDDL = "CREATE TABLE ПолеИгрок ("
For i = 1 To fieldSize - 1
strDDL = strDDL & get_column_name(i) & " TEXT(20), "
Next i
strDDL = strDDL & get_column_name(fieldSize)
& "
TEXT(20) );"
db.Execute strDDL
'
Прочие действия ... db.Close
Dim db As Database
Dim fieldSize As Long, i As Long
Dim strSQL As String
Dim fid As Field
' Узнаем линейный размер игрового поля, выраженный в клетках
fieldSize = CLng(get_parameter("РазмерПоля"))
' Открываем базу данных, в которой хранится нужная таблица
Set db = OpenDatabase(CurrentProject.Path & "\DominationGame.mdb")
' Удалить старые записи в таблице "ПолеИгрок"
StrSQL = "DELETE * FROM ПолеИгрок;" db.Execute strSQL
' Удалить старые поля в таблице "ПолеИгрок"
For i = 1 То db.TableDefs("ПолеИгрок").Fields.Count
db.TableDefs("ПолеИгрок").Fields.Delete
get_column_name(i) Next i
' 'Создать новые поля в таблице "ПолеИгрок"
For i = 1 То fieldSize
Set fid = db.TableDefs("ПолеИгрок").CreateField( _
get_column_name(i), dbText, 20)
db.TableDefs("ПолеИгрок").Fields.Append fid
Next I
' Прочие действия ...
db.Close
В программе 16.5 проиллюстрировано удаление и добавление полей в таблицу "ПолеИгрок" средствами DDL с использованием интерфейса DАО. Удаление поля производится с помощью метода Delete, в качестве параметра которого указывается имя удаляемого поля. Добавление нового поля производится следующим образом. Создается новый объект Field, обладающий необходимыми характеристиками — заданным именем поля, типом и размером данных. После этого с помощью метода Append созданный объект Field добавляется в семейство Fields объекта TableDef, содержащее все поля таблицы "ПолеИгрок". Аналогично (с помощью DАО) можно выполнить создание и удаление таблиц и индексов.
' Добавляем сообщение в таблицу сообщений клиента
rs.AddNew ' Создание новой записи
rs!ИмяИгрока = playerName ' Запись значения в поле ИмяИгрока
rs!Сообщение = message ' Запись значения в поле Сообщение
rs.Update ' Сохранение изменений в источнике
rs.Bookmark = rs.LastModified
' Перемещение курсора на новую запись
' Увеличиваем счет игрока, сделавшего ход
' Делаем текущей запись, содержащую данные для нужного игрока
rs.FindFirst "[ИмяИгрока] = '" & newPlayer & "'"
rs.Edit ' Переводим запись в режим правки
rs!Счет = rs!Счет + newCount ' Изменяем значение поля Счет
rs.Update ' Сохраняем изменения
rs.Bookmark = rs.LastModified ' Делаем измененную запись текущей
playerQueryCode = rs!КодЗаявки ' Сохраняем параметры заявки
playerTrial = rs!Значение ' во временных переменных
rs.Delete ' и удаляем заявку из таблицы
Для перемещения по записям используются методы Move, MoveFirst, MoveNext, MovePrev, MoveLast объекта Recordset. Метод MoveLast перемещает курсор на последнюю запись в наборе, что приводит к загрузке в набор всех записей. После этого можно прочитать значение свойства Count объекта Recordset. Оно будет соответствовать общему количеству записей в наборе.
Замечание
Удаление записей и объектов из базы данных приводит к тому, что файл базы данных становится фрагментированным и место, занимаемое им на диске, используется нерационально. Чтобы дефрагментировать файл базы данных, используют процедуру сжатия. Ее можно выполнить с помощью команды
Сервис, Служебные программы, Сжать и восстановить базу данных
(Tools, Database Utilities, Compact and Repair Database) или программно — с помощью метода CompactDatabase объекта DBEngine. Можно также установить флажок
Сжимать при закрытии
(Compact on Close) в диалоговом окне
Параметры
(Options) (команда
Сервис, Параметры
(Tools, Options), вкладка
Общие
(General)), чтобы сжатие базы данных проводилось автоматически при ее закрытии. Подробнее процедура сжатия описана в гл. 20.
' Послать сообщение подключенному игроку
Public Sub SendMessage(message As String, playerName As String) .
' Объявления локальных объектных переменных:
Dim db As Database
Dim rs As Recordset
Dim counter As Integer
' Определяем собственную обработку ошибок:
On Error GoTo errHandler
Set db = CurrentDb
' Открываем таблицу сообщений для игрока:
Set rs = db.OpenRecordset("Сообщения", dbOpenDynaset)
On Error GoTo 0
' Добавляем сообщение в таблицу сообщений клиента:
rs.AddNew
rs!ИмяИгрока = playerName
rs!Сообщение = message
' Обработка ошибок, возникающих при совместном доступе
' к источнику данных:
On Error GoTo tryAgain
rs.Update
On Error GoTo 0
rs.Bookmark = rs.LastModified
' Закрываем открытые объекты:
closeAHHandler:
rs.Close
endHandler:
' Очищаем объектные переменные, т. к. они больше не используются:
Set rs = Nothing
Set db = Nothing
' Завершаем работу:
Exit Sub
' Синхронизация: tryAgain:
counter = counter + 1 If counter < 400 Then
doPause 5 Resume
End If
Обработка ошибок: errHandler:
Dim errMsg As String
errMsg = "Ошибка: " & Err.Number & vbCrLf & _
"Источник: " & Err.Source & vbCrLf & _ vbCrLf & Err.Description
MsgBox errMsg, vbCritical, ERR_TITLE Resume endHandler
End Sub
Public Sub doPause(seconds As Integer)
Dim var_timeStart, var_timeCurrent
Dim ftimeOut As Boolean
var_timeStart = Time() ' Время начала паузы Do
' Передать управление другим процессам операционной системы
DoEvents
var_timeCurrent = Time() ' Текущее системное время
ftimeOut = _
CDate(var timeCurrent - var timeStart) >=
CDate(TimeSerial(0, 0, seconds))
Loop Until ftimeOut End Sub
Sub ResetCount ()
Dim ws As Workspace
Dim db As Database
Dim rs As Recordset
Dim flnTrans As Boolean
On Error GoTo errHandler ;..
flnTrans = False ' Транзакция еще не началась
Set ws = DBEngine.Workspaces(0)
Set db = CurrentDb
Set rs = db.OpenRecordset("Игроки", dbOpenTable)
ws.BeginTrans ' Начало транзакции
flnTrans = True ' ' Транзакция началась
rs.MoveFirst
Do Until rs.EOF
rs.Edit
rs!Счет = 0
rs.Update
rs.MoveNext
Loop If
MsgBox("Сохранить сделанные изменения?", _
vbQuestion + vbYesNo, "Вопрос") = vbYes Then
ws.CommitTrans ' Сохранить изменения Else
ws.Rollback ' Отменить изменения
End If
exitHandle: rs.Close
Set db = Nothing
Set ws = Nothing
Exit Sub errHandler:
MsgBox "Ошибка!"
' Если ошибка возникла в процессе выполнения транзакции,
'
отменяем сделанные изменения
If flnTrans Then
ws.Rollback
End If
Resume exitHandle
End Sub
Объекты доступа к данным
(DАО, Data Access Object) — это иерархия объектов, обеспечивающая доступ к структуре базы данных и ее содержимому. В программах Visual Basic пользователь имеет возможность использовать объектный интерфейс DАО для выполнения следующих задач:
Интерфейс DАО использует рабочие области двух видов:
Для рабочей области Jet и для рабочей области ODBCDirect существуют две разные объектные модели DАО. Они приведены в
гл. 13.
Реализация модулей VBA для обмена данными между компонентами приложения "Игра в доминирование" основана на применении интерфейса DАО с использованием рабочей области ядра Jet. Поэтому в дальнейших примерах основное внимание уделено приемам программирования на DАО, применимым в рабочей области ядра Jet. Сведения о рабочей области ODBCDirect можно найти в справочной системе Access 2002.
В следующих разделах мы рассмотрим некоторые аспекты программирования с использованием DАО. Подробную информацию об интерфейсе DАО можно найти в справочной системе Access.
Внимание
В Access 2002 по умолчанию к программному проекту базы данных подключена библиотека Microsoft ActiveX Data Objects 2.1 Library. Чтобы использовать в процедурах VBA объекты доступа к данным, нужно обязательно отключить эту библиотеку и подключить библиотеку Microsoft DАО 3.6 Object Library. О подключении библиотек к программному проекту рассказано в гл. 13.
При одновременном доступе нескольких пользователей к одной и той же записи в источнике данных могут возникнуть конфликты. Например, конфликты могут возникать при выполнении метода Update или Delete объекта Recordset и метода OpenDatabase объекта Workspace или DBEngine. Предотвращение конфликтов зависит от настройки Access, касающейся методов блокировки записей, режима доступа к базе данных, периодов обновления данных.
Об установке этих параметров мы уже говорили в разд. "Организация совместного доступа к данным и объектам" этой главы.
Более подробную информацию можно найти в справочной системе Access.
При программном доступе к совместно используемым базам данных необходимо организовать собственную обработку ошибок, появляющихся при попытке выполнить операции, которые могут привести к возникновению конфликтов. В приложении "Игра в доминирование" используется метод блокировки на уровне записей, блокируются изменяемые записи. В этом случае при возникновении конфликта самым простым решением является ожидание момента, когда заблокированная запись будет освобождена другим пользователем. Этот подход достаточно просто реализовать в процедуре на VBA, используя оператор Resume для повторного выполнения действия через некоторый интервал времени (сделав паузу). Назовем этот способ
синхронизацией доступа к данным.
Рассмотрим в качестве примера синхронизации функцию отправки сервером сообщения одному из игроков (программа 16.9). Вспомогательная функция doPause, позволяющая сделать паузу в работе приложения на заданное количество секунд, приведена в программе 16.10.
Для изменения схемы данных создан
язык определения данных
(DDL, Data-Definition Language). Инструкции на языке DDL позволяют выполнять действия по изменению схемы данных и структуры объектов данных, например:
В интерфейсе DАО имеется набор специальных объектов, который является интерфейсом для доступа к средствам DDL. Таким образом, с помощью объектов DАО можно управлять структурой таблиц и схемой данных, не составляя самих инструкций на языке DDL.
Следующий пример программного кода (программа 16.4) взят из процедуры initGame сервера приложения "Игра в доминирование". Этот пример иллюстрирует использование инструкций на языке DDL для удаления таблицы со старой структурой и создания новой таблицы с заданной структурой. Аналогичные действия можно выполнить, пользуясь объектно-ориентированным интерфейсом DАО. Целью этой процедуры является изменение структуры таблицы "ПолеИгрок", поэтому, вообще говоря, можно было бы изменить набор полей этой таблицы с помощью инструкции DDL ALTER TABLE. Эта инструкция позволяет удалить или добавить в таблицу поле или составной индекс. Удаление и добавление полей в таблицу средствами DDL через интерфейс DАО представлено в программе 16.5.
Замечание
Необходимо помнить о том, что изменение структуры связанных таблиц запрещено. Поэтому в примере (программы 16.4 и 16.5) для доступа к таблице "ПолеИгрок" открывается база данных DominationGame.mdb, в которой сохранена эта таблица, а не используется текущая база данных DominationGameServer.mdb, в которой установлена связь с этой таблицей.
Рабочей группой
в Access называется группа пользователей сети, совместно использующих одну или несколько баз данных Access. Если база данных защищена на уровне пользователей, в файл рабочей группы (файл с расширением mdw) записываются учетные записи пользователей и групп, входящих в рабочую группу. Пароли пользователей также хранятся в файле рабочей группы. Учетным записям в рабочей группе могут быть назначены права доступа к базе данных и ее объектам — таблицам, запросам, формам, отчетам и макросам. Права доступа сохраняются в защищенной базе данных.
Замечание
В ранней версии Access 97 в файле рабочей группы сохранялась также информация о настройках Access, заданных пользователем в окне
Параметры
(Options). В Access 2000 и Access 2002 эти настройки сохраняются в реестре Windows, в разделах:
\HKEY_CURRENT_USER\Software\Microsoft:\0ffice\9.0\Access\Settings, \HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Access\Settings.
По умолчанию используется стандартный файл рабочей группы SYSTEM.MDW, автоматически созданный при установке Access. Этот файл находится в папке, соответствующей языку локализации Access. Для американской версии используется папка с названием \1033, для русской — \1049, она находится в папке \Program Files\Microsoft Office\Office. Создание нового файла рабочей группы и его подключение выполняются с помощью служебной программы Администратор рабочих групп (Workgroup Administrator)
(см. гл. 20).
При установке защиты на уровне пользователей, прежде чем создавать учетные записи пользователей и групп и назначать им права доступа к объектам базы данных, следует подключить соответствующий файл рабочей группы. Можно использовать стандартный файл рабочей группы или создать новый. Не рекомендуется использовать стандартный файл рабочей группы, поскольку любой другой пользователь сможет использовать собственный стандартный файл рабочей группы для доступа к базе данных. Чтобы обеспечить уникальность рабочей группы, необходимо создать с помощью программы Администратор рабочих групп (Workgroup Administrator) новый файл рабочей группы и указать уникальный идентификатор рабочей группы (см. гя. 20).
База данных может быть открыта пользователем в сети в одном из четырех режимов.
Можно указать режим открытия базы данных, используемый по умолчанию:
Заданный режим открытия по умолчанию действует только на локальном компьютере и не влияет на режим, используемый по умолчанию для открытия базы данных пользователями других компьютеров.
Кроме того, независимо от установленного режима по умолчанию, пользователь может открыть базу данных в любом режиме, указав его следующим способом:
Замечание
Можно запретить определенным пользователям сети открывать базу данных, защищенную на уровне пользователей, в монопольном режиме, для чего необходимо удалить права этих пользователей на монопольный доступ к базе данных. (Об установке прав доступа рассказано в гл. 20.)
Если база данных (файл с расширением mdb) открывается в режиме общего доступа, Microsoft Access создает
файл блокировок
с таким же именем, как база данных, но с расширением Idb, который располагается в той же папке, где хранится файл базы данных. В файле блокировок сохраняется имя компьютера (например, MYCOMP) и регистрационное имя пользователя базы данных (например, Admin) для каждого пользователя, открывшего базу данных для совместного использования. Файл блокировок используется Microsoft Access во время совместной работы пользователей с файлом базы данных. Этот файл автоматически удаляется после того, как последний пользователь закроет базу данных.
Замечание
Иногда в результате сбоев файл блокировок не удаляется автоматически. В этом случае его следует удалить самостоятельно, иначе файл баз данных будет заблокирован и пользователи не смогут открыть базу данных.
Многопользовательский доступ к данным требует организации распределения этого доступа между пользователями и обеспечения защиты этих данных в соответствии.с правами пользователей. Все эти особенности сетевых приложений реализованы в нашем примере, а методы их реализации описаны в данной главе.
Чтобы задать уровень блокировки, используемый по умолчанию, установите флажок
Блокировка записей при открытии БД
(Open databases using record-level locking) на вкладке
Другие
(Advanced) диалогового окна
Параметры
(Options) если нужна блокировка на уровне записей, или сбросьте этот флажок если нужна блокировка на уровне страниц.
Замечание
Установленный параметр начнет действовать, когда база данных будет открыта заново с помощью команды Файл, Открыть (File, Open), а не с помощью списка последних использованных файлов.
Внимание
Блокировка на уровне записей действует только при доступе к данным через формы, страницы таблиц и запросов или с помощью объекта Recordset. Данный режим не влияет на выполнение запросов и инструкций SQL.
Мастер защиты позволяет:
Мастер создает новую защищенную базу данных и импортирует в нее все объекты исходной базы данных, сохраняя резервную копию незащищенной базы данных с прежним именем (по умолчанию), но с расширением bak вместо mdb. После завершения работы мастера на экране отображается отчет о защите базы данных, содержащий всю указанную в окнах мастера информацию, необходимую для восстановления файла рабочей группы. Этот отчет рекомендуется распечатать или сохранить в формате снимка отчета, чтобы по сохраненной информации потом можно было восстановить файл рабочей группы в случае его повреждения
(см. разд. "Создание и восстановление файла рабочей группы" гл. 20 и разд. "Снимки отчетов" гл. 6).С
помощью мастера в файл рабочей группы Domination.mdw, созданный для "Игры в доминирование", были добавлены учетные записи пользователей, перечисленные в табл. 16.8.
Даже из столь абстрактного описания логики игры можно сделать выводы о том, что архитектура приложения должна представлять собой несколько компонентов, взаимодействующих между собой в сети. Вот основные характеристики задачи, которые являются аргументами в пользу сетевого решения:
Таким образом, наше приложение имеет
многокомпонентную,
или так называемую
многоуровневую
архитектуру. Для таких задач типичным решением бывает обычно
двух-
или
трехуровневая
архитектура, когда приложение состоит из двух или трех типов взаимодействующих компонентов, среди которых выделяются: "обслуживающие" и "потребляющие" компоненты (серверы и клиенты). Серверный компонент может обслуживать от одного до нескольких клиентов одновременно. При необходимости вводят третий тип компонента — "промежуточный" серверный компонент между клиентским компонентом и основным серверным компонентом, чтобы разгрузить слишком нагруженный логикой обработки данных основной серверный компонент.
Замечание
Большее количество уровней встречается реже, обычно в области специализированных сетевых и коммуникационных задач.
Описанную архитектуру называют
клиент-серверной.
Наше приложение имеет такую архитектуру. Его разделение на компоненты выглядит следующим образом:
Access предоставляет две возможности для реализации приложений с такой архитектурой:
Замечание
Сетевое приложение Access может состоять и из одного компонента, не разделенного на части клиент и сервер, — одной базы данных с разрешенным общим доступом. Но это не эффективное решение.
В этой главе мы говорим о первом способе — сетевых базах данных.
Сетевое приложение Access "Игра в доминирование" должно будет обслуживать нескольких игроков — разных пользователей в сети. Предположим, пользователи работают в одноранговой сети. Рабочие станции пользователей, принимающих участие в игре, можно разделить на две категории: клиенты и серверы. На сервере выполняется ядро игры — управляющий компонент приложения. На клиентских рабочих станциях устанавливается компонент, предоставляющий пользователю интерфейс для участия в игре. Таким образом, приложение "Игра в доминирование" представляет собой распределенную базу данных Access с архитектурой "клиент-сервер", которая может быть использована даже в одноранговой сети. Все участники одной игры подключаются к одному серверу по схеме "звезда" (рис. 16.2).
Бывают ситуации, когда необходимо снять защиту базы данных на уровне пользователей. Это требуется, например, чтобы сделать базу данных доступной всем или если администрирование базы данных с течением времени стало затруднительным из-за резкого увеличения числа пользователей и возникла необходимость перераспределить пользователей по группам, назначив им права доступа по новой схеме.
Снятие защиты на уровне пользователей может выполнить только пользователь, обладающий административными правами. Процедура снятия защиты на уровне пользователей включает в себя два этапа.
Итак, чтобы снять защиту базы данных на уровне пользователей:
Замечание
Теперь защита базы данных полностью снята. Любой пользователь Access сможет использовать базу данных и получить полный доступ к ее объектам: таблицам, запросам, формам, отчетам и макросам. Эти права доступа действуют для любого файла рабочей группы, поскольку учетная запись Admin везде одинаковая. Текущий файл рабочей группы, подключенный к Access в момент создания новой базы данных (шаг 6), определяет группу Admins администраторов новой базы данных.
Портфельная репликация Windows позволяет использовать для работы с файлом (в том числе с базой данных) два компьютера: например, компьютер в офисе и переносной компьютер. Можно создавать реплики (специальные копии) базы данных Access для хранения на разных компьютерах и синхронизировать изменения в них. Аналогично несколько пользователей могут работать со своими копиями — репликами базы данных, которые могут быть синхронизированы по сети, с помощью удаленного доступа к сети или через Интернет. Репликация баз данных Access описана в гл. 18.
Чтобы предоставить совместный доступ к базе данных Access, поместите ее на файловый сервер или в общую папку на рабочей станции. Это самый простой метод обеспечения совместного доступа к базе данных и всем ее объектам: формам, отчетам, запросам, макросам и модулям. Он подходит, если нужно, чтобы все пользователи могли использовать одни и те же объекты базы данных одинаковым способом.
Поместив базу данных в общую папку на файловом сервере или рабочей станции, убедитесь в том, что установлен параметр, определяющий открытие базы данных по умолчанию в режиме совместного доступа. Об установке этого параметра рассказано
в разд. "Режимы работы с базой данных в сети" этой главы.
Для работы с базой данных в сети необходимо выполнить локальную или сетевую установку Access либо установить исполняемую версию Access.
Объекты базы данных можно предоставить в совместное использование через Интернет, создав на их основе страницы HTML следующих видов:
Страницы HTML можно отобразить в программе просмотра Интернета, такой как Internet Explorer. (О работе с базами данных Access через Интернет см. гл. 12.)
Со страницами доступа к данным могут работать несколько пользователей в сети. Страницы могут быть отображены с помощью программы просмотра Интернета или в сообщении электронной почты. Для этого источник данных для страницы — базу данных Access или SQL Server — требуется поместить в общую папку на рабочей станции или на сервере сети.
В приложении "Игра в доминирование" для отображения текущего состояния игрового поля в момент инициализации новой игры создается страница доступа к данным "Игровое поле", которая сохраняется в той же папке, что и приложение "Сервер игры". Эта папка должна быть доступна в сети, чтобы игроки — пользователи приложения "Клиент игры" — могли подключиться к игре и просмотреть страницу "Игровое поле" с помощью программы Internet Explorer.
Если база данных, являющаяся источником данных для страницы, будет перемещена в другое место, необходимо соответствующим образом изменить параметры соединения страницы с источником данных. Для этого при работе со страницей в режиме Конструктора в окне
Список полей
(Field List) нажмите кнопку
Свойства подключения для страницы
(Page connection properties). В появившемся диалоговом окне на вкладке
Соединение
(Connection) введите в поле ввода, предназначенное для указания источника данных, имя и полный путь к базе данных в соответствии с соглашением об именах UNC. Укажите имя сетевого ресурса, а не имя подключенного сетевого диска, поскольку оно может измениться.
Имя ресурса в формате UNC состоит из четырех частей: имени сервера ресурсов, имени общей папки на сервере, пути к ресурсу и имени ресурса:
\\servername\share\path\filename.
Чтобы изменить путь к странице доступа к данным, указанный в ярлыке страницы в базе данных Access, в окне базы данных щелкните по ярлыку страницы доступа к данным правой кнопкой мыши и в контекстном меню выберите команду
Сцойства
(Properties). Откроется окно свойств ярлыка, введите в поле ввода путь к файлу страницы (файлу HTML). Рекомендуем указывать относительные пути в таких случаях. Например, для страниц, хранящихся в той же папке, что и база данных, укажите только имя файла страницы без абсолютного пути к ней. Например: Обзор товapoв.htm
Хотя источником данных для страницы может быть только база данных Access или SQL Server, можно организовать доступ через страницу к данным других форматов, используя связанные таблицы в базах данных Access.
Замечание
Защита совместно используемых страниц доступа к данным описана в справочной системе Access. Для максимальной защиты страницы доступа к данным поместите базу данных, которая является источником данных для нее, на тот же Web-сервер, на котором хранится эта страница.
Можно предоставить совместный доступ в сети лишь к таблицам в базе данных Access. Для этого необходимо разделить базу данных на файл объектов данных и файл объектов приложения. Разделение базы данных с помощью мастера описано
в гл. 19.
После разделения базы данных поместите файл объектов данных на файловый сервер или в общую папку на рабочей станции, чтобы предоставить общий доступ к таблицам, а файл объектов приложений — на компьютер пользователя в виде локальной копии. В этом случае производительность базы данных будет несколько выше, чем при совместном доступе ко всей базе данных, поскольку по сети будут передаваться только данные из таблиц. При этом отдельный пользователь может настроить формы, отчеты и прочие объекты из файла объектов приложения в соответствии со своими индивидуальными потребностями. Эти изменения не отразятся на остальных пользователях, которые используют свои локальные копии файла объектов приложения.
Внесение изменений в объекты базы данных при работе в сети характеризуется следующими особенностями.
Например, при добавлении полей в форму следует до обновления формы добавить поля в базовый запрос.
Если в сети организации установлена СУБД SQL Server, ее можно использовать для совместной работы с базой данных Access. Для этого необходимо создать клиент-серверное приложение на основе базы данных Access. В результате станут доступны мощные средства СУБД SQL Server. Можно преобразовать существующую базу данных Access в клиент-серверное приложение с помощью мастера (гл. 19) или создать новое приложение в архитектуре "клиент-сервер" (гл. 17).
Предположим, база данных открыта в режиме общего доступа несколькими пользователями в сети. При этом несколько пользователей могут одновременно работать с одним и тем же набором записей. При попытке изменить определенную запись, в то время как ее редактирует другой пользователь или она удалена другим пользователем, возникает конфликт совместного доступа к источнику данных.
При совместном доступе к базе данных Microsoft Access помогает отследить состояние записи во время ее правки и позволяет убедиться в том, что используемые данные были обновлены. В тот момент, когда несколько пользователей пытаются одновременно изменить одну и ту же запись, Access отображает сообщение, позволяющее разрешить возникший конфликт. Например, при попытке сохранить изменения в записи, заблокированной в этот момент другим пользователем, отображается сообщение с именем этого пользователя.
Access помогает отследить состояние записи, отображая специальный символ в области выделения текущей записи. Возможные символы приведены в табл. 16.1.
Обе иерархии объектов DАО: для рабочей области Jet и для рабочей области ODBCDirect — начинаются с объекта DBEngine. Этот объект содержит свойства и методы, позволяющие управлять рабочими областями. Свойство DefaultType объекта DBEngine позволяет определять или устанавливать тип рабочей области, создаваемой по умолчанию.
Объект DBEngine в качестве свойства содержит семейство Workspaces всех открытых рабочих областей. Можно выбрать элемент этого семейства, указав индекс или имя, чтобы получить доступ к конкретной рабочей области (программа 16.1).
Чтобы создать новую рабочую область ядра Jet или рабочую область ODBCDirect, используют метод CreateWorkspace (программа 16.2) объекта DBEngine с соответствующим параметром. Метод CreateWorkspace возвращает ссылку на объект типа workspace и имеет следующие параметры (табл. 16.2):
Workspace CreateWorkspace(<имя>, <пользователь>, <пароль>, <тип>)
Подключение файла рабочей группы Domination.mdw можно провести двумя способами: с помощью программы Администратор рабочих групп (Workgroup Administrator) или с помощью параметра командной строки /wrkgrp. В первом случае файл рабочей группы присоединяется к Access и используется для всех баз данных, открывавмых в нем. Во втором случае файл рабочей группы присоединяется к конкретной базе данных и не используется для других баз данных, открываемых в Access. Второй способ намного удобнее, если требуется параллельно работать и с защищенными, и с незащищенными базами данных на одном компьютере или если используются разные файлы рабочих групп для разных защищенных баз данных. Создание и подключение файла рабочей группы Domination. mdw описано в разд. "Использование файла рабочей группы " гл. 20.
Управление учетными записями, как и назначение прав доступа, является задачей администрирования защищенной базы данных, хотя, помимо управления учетными записями, существует достаточно широкий спектр других задач, за выполнение которых отвечает администратор. О задачах администрирования рассказано в гл. 20.
Базы данных Microsoft Access могут использоваться одновременно несколькими пользователями в сети. Предоставить общий доступ к базе данных можно несколькими способами:
Символ | Значение | ||
|
Данная запись является текущей и в настоящий момент еще не была изменена. |
||
|
Данная запись заблокирована другим пользователем. Ее нельзя изменить. При попытке внести изменения выдается звуковой сигнал |
||
|
Запись изменена, но изменения еще не сохранены в источнике данных. В этом случае другие пользователи не видят текущих изменений в данной записи. Если запись заблокирована, другие пользователи не смогут ее изменить. Для того чтобы освободить запись и сделать ее доступной для других пользователей, следует сохранить или отменить внесенные изменения |
||
Параметр
|
Тип
|
Описание
|
||
<пользователь> | String | Имя пользователя, который будет владельцем создаваемой рабочей области. Определяет значение свойства UserName объекта Workspace | ||
<пароль> | String | Пароль пользователя. Он необходим для создания рабочей области. Пароль может включать до 14 символов. Это могут быть любые символы, кроме символа ASCII с кодом 0 (Null). Определяет значение свойства Password объекта Workspace | ||
<тип> | <константа> |
Необязательный параметр. Задает тип создаваемой рабочей области. В качестве значения можно использовать константу dbUseJet для создания рабочей области ядра Jet или константу dbUseODBC для создания рабочей области ODBCDirect. По умолчанию создается рабочая область того типа, который задан значением свойства DefaultType объекта DBEngine |
||
<имя>
|
String |
Уникальное имя создаваемой рабочей области. Определяет значение свойства Name объекта Workspace |
||
Несколько рабочих областей разных типов могут быть открыты одновременно. В момент создания рабочей области начинается сеанс работы с ней. После выполнения всех необходимых действий в рабочей области нужно завершить сеанс, закрыв рабочую область с помощью метода Close объекта Workspace.
Параметр
|
Тип
|
Обязательный или нет |
Описание
|
||
<имя> |
String |
Обязательный |
Имя файла существующей базы |
||
|
|
данных (возможно, включая полный |
|||
|
|
путь с указанием имени диска или |
|||
|
|
сетевого ресурса) или имя источни- |
|||
|
|
ка данных ODBC (DSN) |
|||
<параметры> |
Variant |
Необязательный |
Используется для задания специаль- |
||
|
|
ных параметров базы данных. Напри- |
|||
|
|
мер, в рабочей области Jet применяет- |
|||
|
|
ся значение True, если нужно открыть |
|||
|
|
базу данных в режиме монопольного |
|||
|
|
доступа, или значение False, если |
|||
|
|
нужно открыть базу данных в режиме |
|||
|
|
общего доступа. Значение False |
|||
|
|
устанавливается по умолчанию. Пара- |
|||
|
|
метры, используемые в рабочей об- |
|||
|
|
ласти ODBCDirect, описаны в справоч- |
|||
|
|
ной системе Access |
|||
<режим> |
Variant |
Необязательный |
Задается значение True, если нуж- |
||
|
(подтип |
но открыть базу данных только для |
|||
|
Boolean) |
чтения, или значение False, если |
|||
|
|
нужно открыть базу данных для чте- |
|||
|
|
ния и записи. По умолчанию исполь- |
|||
|
|
зуется значение False |
|||
<соединение> |
Variant |
Необязательный |
Строка соединения (connection |
||
|
(подтип |
string). Используется для указания |
|||
|
String) |
параметров соединения с источни- |
|||
|
|
ком данных, включая пароль |
|||
Аналогично создать и открыть новую базу данных можно: D с помощью метода CreateDatabase объекта Workspace; П с помощью метода CreateDatabase объекта DBEngine. Глобальным является метод CreateDatabase объекта DBEngine.
Метод CreateDatabase создает новый объект Database, добавляет его в семейство Databases открытых баз данных в рабочей области, сохраняет базу данных на диске и возвращает открытый объект Database. Этот метод используется только в рабочей области ядра Microsoft Jet. Метод CreateDatabase имеет следующие параметры (табл. 16.4):
Database CreateDatabase (<имя>, <порядок>, <параметры>)
Замечание
В программе на VBA для ссылки на метод CreateDatabase объекта DBEngine можно использовать сокращенную ссылку или указать префикс DBEngine с точкой. А для ссылки на метод объекта Workspace необходимо указать конкретную рабочую область, например:
' Использование метода объекта DBEngine:
Set dbl = CreateDatabase(...)
Set db2 = DBEngine.CreateDatabase(...)
' Использование метода объекта Workspace:
Set db3 = Workspaces(0).CreateDatabase(...)
Параметр
|
Тип | Обязательный или нет |
Описание
|
||
<порядок> | Variant |
Обязательный |
Строковое выражение, опреде-(подтип ляющее порядок символов, кото-String) рый будет использоваться в операциях сравнения и сортировки в создаваемой базе данных. Допускается также создание пароля для нового объекта Database путем слияния строки пароля (начинающейся с символов ";pwd=") с константой в аргументе <порядок>, например: DbLangCyrillic & " ; р\»го>=МойПароль " |
||
<параметры> | <константы> | Необязательный | Константа или комбинация констант, которая определяет один или несколько параметров: версию формата данных и режим шифрования или дешифрования базы данных во время сжатия. Константы приведены в справке Access | ||
<имя> | String | Обязательный | Имя файла создаваемой базы данных. Следует указать полный путь и имя файла, например "С: \dbl .mdb" или "\\serverl\sharel\dirl\dbl". Если пользователь не указывает расширение имени, автоматически добавляется расширение mdb. Данный метод позволяет создавать только файлы mdb. | ||
Чтобы получить доступ к данным в открытой одним из перечисленных способов базе данных, необходимо открыть набор записей. Набор записей может представлять собой все записи таблицы или часть записей таблицы, удовлетворяющих указанному условию, или результат выборки из нескольких таблиц. Чтобы открыть набор записей в базе данных, используйте метод OpenRecordset объекта Database (см. программу 16.3). Этот метод возвращает ссылку на созданный объект Recordset и имеет следующие параметры (табл. 16.5):
Recordset OpenRecordset(<источник>,<тип>, <параметры>, <блокировки>)
Замечание
С помощью метода OpenRecordset в базе данных можно открыть связанную таблицу (точно так же, как и таблицу, хранящуюся в базе данных), указав ее имя.
Параметр |
Тип | Обязательный или нет |
Описание
|
||
<источник> |
String Обязательный Источник записей для нового |
||||
|
объекта Recordset. В качестве |
||||
|
источника записей можно ука- |
||||
|
зать имя таблицы или запроса, а |
||||
|
также инструкцию SQL, которая |
||||
|
возвращает записи |
||||
<тип> |
<константа> | Необязательный |
Константа, указывающая тип от- |
||
|
крываемого объекта Recordset. |
||||
|
Эти константы приведены в |
||||
|
табл. 16.6 |
||||
<параметры> |
<константы> | Необязательный |
Произвольная комбинация определенных констант, задающих |
||
|
характеристики нового объекта |
||||
|
Recordset. Эти константы при- |
||||
|
ведены в справочной системе |
||||
|
Access |
||||
<блокировки> |
<константа> | Необязательный |
Константа, определяющая тип |
||
|
блокировки объекта Recordset. |
||||
|
Возможные константы перечис- |
||||
|
лены в справке Access |
||||
Константа
|
Тип набора записей
|
||
DbOpenTable
|
Открытие табличного обьекта Recordset (только в рабочей области ядра Microsoft Jet) |
||
DbOpenDynaset | Открытие объекта Recordset типа динамического набора записей, аналогичного указателю ключевого набора записей ODBC | ||
DbOpenDynamic |
Открытие обьекта Recordset динамического типа, аналогичного динамическому указателю ODBC (только
в
рабочей области ODBCDirect) |
Константа
|
Тип набора записей
|
||
DbOpenSnapshot |
Открытие объекта Recordset типа статического набора записей, аналогичного указателю статического набора записей ODBC |
||
DbOpenForwardOnly | Открытие объекта Recordset типа статического набора записей с последовательным доступом |
Далее приведен пример открытия таблицы, взятый из программного кода сервера приложения "Игра в доминирование" (программа 16.3).
Метод
|
Описание
|
||
BeginTrans |
Обозначает начало транзакции. Транзакции могут быть вложенными |
||
CommitTrans | Обозначает конец транзакции. В этот момент все изменения сохраняются в источнике без возможности их отмены | ||
RollBack | Завершение транзакции и отмена результата ее выполнения. Записи в источнике возвращаются в прежнее состояние, отмеченное командой BeginTrans |
Все базы данных, открытые в рабочей области, имеют общую область действия транзакций. Это значит, что действие методов BeginTrans, CommitTrans и RollBack объекта Workspace распространяется на все базы данных в семействе Databases объекта Workspace.
Рассмотрим пример программы на VBA с использованием механизма выполнения транзакций (программа 16.11). В приложении "Игра в доминирование" механизм транзакций не используется.
Имя пользователя
|
Пароль
|
Код пользователя
|
Группы, в которые входит пользователь
|
||
Флинт |
пиастры |
Adk j 7uLn61 8 4 FTAwopW |
Admins, Users |
||
Джим |
без пароля |
jAv06BLSS2d6KnN5X80 |
Users |
||
Ливси |
без пароля |
4yF3yNprLXhlzmS3iBC |
Users |
||
Треллони |
без пароля |
QfnFceqtWpVTbWRnSOq |
Users |
||
Admin |
game |
<уже существовал> |
Users |
||
Мастер защищает все выбранные на определенном этапе объекты базы данных, отбирает у группы Users все разрешения на доступ к этим объектам либо оставляет данной группе заданные ограниченные права доступа, а затем зашифровывает базу данных. Межтабличные связи и любые связанные таблицы воссоздаются в защищенной базе данных.
С этого момента только пользователи, входящие в группу Admins, учетные записи которых сохранены в файле рабочей группы, созданном или присоединенном с помощью мастера, будут иметь полный доступ к защищенным объектам в базе данных. А текущий пользователь, обладающий административными правами, становится владельцем базы данных и всех ее объектов. Для того чтобы управлять доступом к защищенным объектам, следует предоставить соответствующие разрешения учетным записям пользователей и/или групп.
Если понадобится изменить параметры защиты, Мастер защиты можно использовать неоднократно. Еще раз отметим, что для применения Мастера защиты необходимо обладать административными правами доступа к базе данных.
Рассмотрим систему защиты приложения "Игра в доминирование". Напомним, что приложение "Игра в доминирование" состоит из клиентской и серверной частей, реализованных в виде отдельных баз данных Access. В серверной базе данных хранится информация о текущем состоянии игры. Игроки, обращающиеся к серверу через клиентские приложения, имеют ограниченные права доступа к объектам серверной базы данных. Эти ограничения необходимы, чтобы игроки имели равные возможности в игре и не могли повлиять на состояние игры недопустимым образом. Поэтому необходима специальная защита серверной части приложения по схеме защиты на уровне пользователей. В то же время, нет особой необходимости в специальной защите клиентской части приложения. Можно разрешить любому пользователю сети- воспользоваться приложением-клиентом, чтобы подключиться к приложению "Игра в доминирование". Однако, чтобы пользователь клиентского приложения мог зарегистрироваться на сервере, он должен иметь учетную запись Р единой рабочей группе пользователей приложения. Таким образом, необходимо создать один файл . рабочей группы, содержащий информацию обо всех участниках Игры в доминирование, который необходимо использовать для работы как с серверной, так и с клиентской частью приложения. Так мы и поступили — создали файл Domination.mdw.
Рассмотрим основные этапы установки защиты сетевого приложения Access на примере защиты приложения "Игра в доминирование".
Замечание
Прежде чем приступить к защите собственного приложения Access, сделайте копию системного файла SYSTEM.MDW и копию пока не защищенного приложения. Это необходимо, поскольку удивительно легко заблокировать приложение от себя самого. Системный файл рабочих групп, использующийся в Access 2002 по умолчанию, находится в папке, относительный путь к которой указан в реестре Windows, в разделах:
HKEY_CURRENT_USER\Software\Microsoft\0fficeUO.0\Access\Jet\ 4.0\Engines\SystemDB
HKEY_USERS\.DEFAULT\Software\Microsof t:\0ffice\10.0\Access\Jet\ 4.0\Engines\SystemDB
Процесс установки защиты на уровне пользователей для любой базы данных Access можно разделить на следующие этапы:
Для защиты очередного приложения необязательно требуется создание нового файла рабочей группы. Хорошим стилем является создание и использование одного файла рабочей группы для ряда приложений Access, с которыми работает одна и та же группа пользователей, например сотрудники одного отдела.
В следующих разделах описаны все действия, связанные с установкой защиты на уровне пользователей. Их можно выполнить самостоятельно средствами Access или с помощью Мастера защиты баз данных Access. Мастер предлагает пользователю выполнить последовательность шагов, соответствующих перечисленным этапам установки защиты. Мастер защиты очень удобен в использовании как для начинающих пользователей, так и для профессионалов, поэтому рассмотрим сначала способ установки защиты с помощью мастера, а затем поговорим о прочих средствах Access, позволяющих настроить систему защиты базы данных на уровне пользователей.
В любой рабочей группе пользователей базы данных Microsoft Access существуют стандартные учетные записи:
Их нельзя удалить, но можно изменить права доступа, назначенные им по умолчанию.
Пользователь Admin по умолчанию включен и в группу Users, и в группу Admins. Любой добавляемый в рабочую группу пользователь автоматически включается в группу Users. Эта группа представляет собой всех пользователей Access. Никакой пользователь не может быть удален из группы Users.
Группа Admins представляет собой группу администраторов всех баз данных, используемых рабочей группой. Этой группе автоматически предоставляются полные права на доступ к этим базам данных. В каждый момент времени группа Admins должна содержать, по крайней мере, одну учетную запись пользователя.
Пользователь Admin представляет собой администратора всех баз данных Access. Однако, используя конкретный файл рабочей группы для защиты конкретной базы данных, пользователя Admin можно удалить из группы Admins и назначить ему и группе Users ограниченные права доступа к объектам защищаемой базы данных. Таким образом, база данных становится защищенной от доступа с помощью учетной записи Admin, используемой по умолчанию.
Права доступа к объектам конкретной базы данных, назначенные пользователю Admin и группе Users, остаются прежними при подключении любого файла рабочей группы. А права доступа, назначенные группе Admins, зависят от файла рабочей группы, подключенного к базе данных в данный момент. Например, защита базы данных сервера приложения "Игра в доминирование" проведена при подключении специально созданного для этого файла рабочей группы Domination.mdw. Группе Admins назначены максимальные права доступа ко всем объектам этой базы данных. Если открыть названную базу данных с использованием стандартного файла рабочей группы System.mdw, у группы Admins не будет никаких прав на объекты этой базы данных.
Внимание
При установке защиты необходимо помнить о сохранении прав доступа, назначенных встроенным учетным записям Admin и Users при подключении стандартного файла рабочей группы Access, чтобы сделать систему защиты базы данных неуязвимой.
Для изменения данных в источнике создан
язык структурированных запросов
(SQL, Structure Query Language). Инструкции на языке SQL позволяют выполнять действия по изменению данных, например — добавлять, изменять или удалять записи в таблице или запросе, выбирать набор записей из источника, удовлетворяющий заданному условию.
В следующих примерах приведены приемы программного изменения данных в открытом наборе записей (программы 16.6—16.8). Переменная rs соответствует открытому набору записей — объекту типа Recordset.
Транзакцией
называется операция обмена данными между клиентом и сервером. Методы объекта Workspace, использующиеся для выполнения транзакций, представлены в табл. 16.7.
Защита на уровне пользователей
предназначена для предоставления разным пользователям разного уровня доступа к объектам приложения. Пользователи могут объединяться в группы внутри рабочей группы. Группам, как и пользователям, могут быть назначены определенные права доступа к объектам базы данных.
Существует два типа прав доступа, предоставляемых пользователю: явные и неявные.
Явные права доступа —
те, что назначены непосредственной учетной записи пользователя.
Неявные права доступа —
те, что назначены учетной записи группы, в которую входит этот пользователь. Добавление пользователя в группу приводит к предоставлению пользователю прав, назначенных группе. Удаление пользователя из группы лишает пользователя этих прав.
Права пользователя на доступ к объекту складываются из его явных и неявных прав. В системе защиты на уровне пользователей Microsoft Access, в отличие от системы защиты на уровне пользователей файловой системы NTFS, применяется политика "наименьших ограничений". Это означает следующее: если пользователю (который может входить в разные группы, обладающие различными правами доступа) назначены и разрешающие и запрещающие права к некоторому объекту базы данных Access, то доступ к объекту пользователю предоставляется.
Группы пользователей делают управление правами доступа более удобным. Вместо того чтобы каждый раз при введении нового пользователя в рабочую группу прелоетавлять ему все необходимые права к объектам базы данных, можно назначить эти права группе. Тогда процесс предоставления заданных прав доступа сведется к добавлению нового пользователя в эту группу.
Защита программного кода на VBA
Защитить программный проект VBA можно с помощью пароля:
Установленные параметры начнут действовать только при следующем открытии базы данных.
Есть другой способ защиты программного кода приложения Access — можно создать файл, содержащий откомпилированную версию программного проекта и всех объектов базы данных (файл с расширением mde) или проекта Access (файл с расширением ade). Открыв этот файл, пользователи могут использовать все созданные в нем объекты, изменять данные и выполнять макросы и процедуры VBA, но не будут иметь возможности изменить структуру объектов или программный код. Такой файл имеет намного меньший размер по сравнению с исходным файлом базы данных или проекта. Права доступа и прочие обстоятельства, необходимые пользователю для возможности создания файла mde или ade, приведены в справочной системе Access 2002.
Внимание
Создать файл МОЕ или ADE можно только на основе базы данных или проекта Access в формате Access 2002. Если ваша база данных (или проект) сохранена в формате Access 2000, потребуется сначала преобразовать ее в формат Access 2002 (см. гл. 19).
Чтобы создать файл МDЕ на основе базы данных в формате Access 2002:
Чтобы создать файл ADE на основе проекта в формате Access 2002:
Выбор политики защиты и установка защиты — предмет разработки приложения. А настройка схемы защиты приложения в соответствии с текущими потребностями в процессе использования приложения — задача
администрирования. Администратор
управляет составом пользователей и групп пользователей приложения и предоставляет им необходимые права доступа к объектам приложения по мере необходимости.
Разработчик
приложения предварительно определяет политику защиты приложения, выполняет установку защиты приложения и подготавливает приложение к использованию — определяет начальный состав пользователей и групп пользователей приложения и выполняет начальное распределение между ними прав доступа к объектам приложения. Таким образом, в процессе установки защиты приложения разработчик, помимо прочих действий, в определенный момент выполняет функции администратора.
Действия, которые выполняет администратор защищенного приложения, описаны
в гл. 20.
В этой главе мы расскажем о действиях, выполняемых разработчиком, связанных с установкой защиты и определением политики защиты приложения.
Определение политики защиты включает решение следующих вопросов:
Например, разработчик может решить, предоставить ли разрешение другим пользователям просматривать или выполнять запрос без изменения данных или структуры запроса, задать ли права по умолчанию для всех запросов.
Администратор приложения обладает всеми необходимыми правами для изменения политики защиты приложения, но необходимости в этом не должно возникать. Ведь в задачу разработчика приложения входить выбор наиболее подходящей политики защиты, которая удовлетворяет требованиям, предъявляемым к приложению, и упрощает процесс администрирования.