Как контролировать права пользователя на базу данных Access? - PullRequest
7 голосов
/ 09 февраля 2009

Какой самый простой способ разрешить одному пользователю доступ для записи и всем остальным доступ только для чтения к базе данных MS Access в локальной сети?

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

Ответы [ 6 ]

9 голосов
/ 10 февраля 2009

Некоторые мысли об управлении правами пользователей на хранилище данных Jet:

  1. если вы действительно хотите заблокировать, вы никогда не будете управлять им с помощью Jet, поскольку он по своей природе уязвим, потому что пользователь должен иметь WRITE-доступ к файлу MDB.

  2. если вы довольны управлением правами на данные в вашем приложении переднего плана, вы можете предоставить разные интерфейсы (один для пользователей WRITE и один для READ-ONLY).

  3. если вы не используете формат ACCDB, вы можете использовать безопасность уровня пользователя Jet. Это удивительно сложная технология, если вы действительно хотите заблокировать доступ к данным - вы должны следовать всем инструкциям, изложенным в официальном документе Jet Security, до письма, иначе ваши данные будут открыты для всех, у кого есть стандартный файл рабочей группы Jet. И даже когда вы закончите, он будет взломать (хотя и не потратит $$$ на покупку взломанного программного обеспечения). Кстати, пароли базы данных до Access 2007 были совершенно бесполезны и легко взламывались. Access 2007 повышает безопасность, повышая уровень шифрования данных, но пароль базы данных вызывает много проблем и не позволяет иметь более одного уровня доступа (если вы не предоставите два разных интерфейса с разными паролями - ср. # 2).

  4. если вы просто хотите использовать Jet ULS для управления доступом в своем внешнем интерфейсе, вы можете добавить своих пользователей в группы, а затем проверить членство в группах в ваших интерфейсных объектах пользовательского интерфейса (т. Е. Формах) и указать НАПИСАТЬ разрешение пользователям, входящим в группу пользователей, предоставляющую такой уровень доступа. Самый простой способ сделать это, предполагая, что у вас больше пользователей READ-ONLY, чем тех, у кого есть разрешение WRITE, состоит в том, чтобы пользователи READ-ONLY вошли в систему как пользователь по умолчанию (т.е. вы ничего не делаете для их настройки) и имели WRITE пользователи входят в систему как пользователь с правами WRITE. Другими словами, если они не вошли в систему как пользователь "admin", они имеют полный доступ WRITE.

  5. другой альтернативой является использование групп безопасности NTFS. Код API для этого находится в Access Web , но для его реализации требуется администратор Windows. Опять же, вы будете ограничивать доступ в вашем приложении перед тем, как фактически ограничивать права пользователей в MDB.

Только Jet ULS позволяет вам запретить редактированию ваших данных пользователю ТОЛЬКО ДЛЯ ЧТЕНИЯ (который не взломал файл вашей рабочей группы). Все пользователи должны иметь сетевой доступ к вашему внутреннему MDB, но вы можете затруднить им доступ к данным, даже не прыгая через трудности в реализации Jet ULS. Вот некоторые шаги, чтобы сделать это (и да, все они являются формой «безопасности от неясности» и только замедляют пользователя READ-ONLY, решившего взломать ваш бэкэнд):

  1. Щелкните правой кнопкой мыши каждую таблицу на своем бэкэнде и включите атрибут HIDDEN. Это также можно сделать в коде (см. SetHiddenAttribute в справке). Естественно, если конечный пользователь устанавливает свои параметры доступа для отображения скрытых таблиц, это ничего не изменит. Но большинство конечных пользователей не знают об этом, и если ваши пользователи запускают ваше приложение во время выполнения, у них не будет возможности.

  2. Измените свойства запуска внутренней базы данных на , а не , чтобы отобразить окно базы данных, и на , а не используйте специальные ключи. Код для настройки свойств запуска можно найти в разделе справки «AllowBypassKey».

  3. В вашем бэк-энде создайте макрос с именем AutoExec с помощью одной команды Quit. Если специальные ключи отключены, невозможно предотвратить выполнение этого макроса, и как только пользователь попытается открыть серверную часть (даже если он удерживает клавишу SHIFT, т. Е. Стандартное нажатие клавиши для обхода всех процедур запуска) база данных (и экземпляр Access) закроются.

Теперь все эти вещи могут быть отменены кем-то, кто знает, что они делают. Если бы вы предоставили мне бэкэнд для реализации этих вещей, я бы занялся этим через 5 минут, просто запустив код в другой базе данных Access, чтобы изменить все эти свойства запуска, чтобы дать мне доступ.

Но ваши конечные пользователи, вероятно, не имеют такого уровня знаний. Любой такой пользователь, который, вероятно, должен быть пользователем ЗАПИСАТЬ, нет? :)

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

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

Последнее всего:

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

6 голосов
/ 09 февраля 2009

Самый простой способ - использовать разрешения для общего ресурса. Предоставьте доступ на запись группе и поместите пользователей, которые должны писать в базу данных, в эту группу. Поместите всех остальных в группу чтения. Это предполагает, что у вас есть домен Windows, конечно.

Здесь - это сайт, на котором есть некоторая информация о защите баз данных Access. Он имеет дело с Access 2000, может быть больше вариантов для более новых версий.

1 голос
/ 27 января 2012

Этот разговор может быть немного старым, но по некоторым причинам у меня недавно возникла такая же проблема. Он не подойдет всем, потому что он опирается не на M $ SQL Server, а на MySQL. Используйте коннектор MySQL ODBC (доступен здесь: http://dev.mysql.com/downloads/connector/odbc/), и храните свои таблицы на сервере MySQL. Права пользователя Access на таблицы будут наследоваться от прав пользователя MySQL. Довольно легко настроить ...

1 голос
/ 10 февраля 2009

Я думаю, что можно использовать соединение ODBC для использования Access в качестве интерфейса практически для любой базы данных. Например, я успешно настроил базу данных SQL Server 2008 Express Edition для 2 пользователей, одного для чтения и записи и одного только для чтения. Мне удалось подключиться к базе данных из Access, открыв источник данных ODBC. Таким образом, пользователь может иметь знакомые ему функции создания отчетов и слияния писем на основе Office. Но с любым сервером базы данных вы хотите.

1 голос
/ 09 февраля 2009

Это нахальный ответ, но если вам нужна лучшая безопасность, серьезно подумайте о переходе на более надежную СУБД.

0 голосов
/ 09 февраля 2009

Фактически, НЕТ функциональной безопасности для базы данных доступа .

Ссылка ниже продает программное обеспечение, которое "восстановит" вашу базу данных доступа, даже если у нее есть пароль.

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

http://www.stellarinfo.com/access-recovery.htm

И прежде чем вы даже подумаете: нет, я не работаю на них.

...