Настройка базы данных и прав доступа - PullRequest
1 голос
/ 23 января 2009

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

Соответственно, нам необходимо создать систему контроля доступа, которая контролирует права пользователей для определенных записей базы данных, т.е. изменяет запросы к базе данных так, чтобы отображались только конкретные записи. Например, для пользователя на уровне города должны отображаться только те записи, которые относятся к конкретному городу пользователя, а для пользователя на национальном уровне должны отображаться записи для ВСЕХ ГОРОДОВ в стране.

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

Любая помощь будет оценена.

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 24 января 2009

Дизайн приложения зависит от требований безопасности.

Например, информация хранится в нескольких базах данных или в одной базе данных? Важно ли предоставлять каждому ТИПУ пользователя схему базы данных, которая представляет их конкретные разрешения? Очевидно, ответы на эти вопросы показывают, нужна ли вам более безопасная система для доступа к базе данных.

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

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

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

Независимо от того, что вы реализуете в базе данных в целях безопасности, вам также, очевидно, потребуется использовать механизм сеанса для хранения аутентифицированного в данный момент пользователя и его типа. Простой способ изменить функциональность для конкретного пользователя - это инкапсулировать доступные действия каждого пользователя (функции или методы чтения) и их атрибуты (или свойства) в классе для представления конкретного пользователя. Таким образом, если два человека нажмут на Dashboard.php, они увидят именно те данные, к которым у них есть доступ.

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

1 голос
/ 23 января 2009

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

Установите приложение для подключения к базе данных с помощью специальной учетной записи пользователя, которая предоставляет ему только те разрешения, которые необходимы для всего приложения. Оставайтесь в безопасности ВНУТРИ приложения, основываясь на пользователях и ролях, определенных приложением, и на простом настраиваемом API.

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

...