У меня есть пользователи для моего приложения с списком контроля доступа (это как таблицы, так и схемы/объекты). В настоящее время они считываются из базы данных, значения Boolean используются для указания того, что они могут просматривать/манипулировать. Тем не менее, каждый может по-прежнему перейти к базе данных и изменить данные. Может ли кто-нибудь предложить какое-то предложение о том, что я могу сделать? Надеюсь, я поняла, что у нас есть пользователи (uname + pass) и acl (empui_access, empdat_manipulate). Любые любопытное решения в области безопасности с помощью кода и т.д. ...Предложения по дизайну безопасности для контроля доступа Список в базе данных?
ответ
Что-то вроде
table users
username: string
password_hash: hex
acl: bit array
имя пользователя это имя пользователя, password_hash является хэш пароля, с зерном соли. Неправильно хранить простой пароль, но вы уже это знали, не так ли?
ACL объявлен как строка, но используется как бит-массив. Каждый бит представляет собой определенное разрешение. 1 означает, что пользователь имеет разрешение, 0 означает, что он этого не делает. Чтобы проверить значение определенного бита, вы делаете бит-мудрый И на acl. Если результат отличен от нуля, доступ предоставляется. Если результат равен нулю, доступ запрещен.
Например:
// permission to read employee data
public const long READ_EMPL_DATA = 0x01
...
{
User user = database.GetSomeUser();
// test for READ_EMPL_DATA permission
if (0 != (user.ACL & READ_EMPL_DATA)) {
// access granted
} else {
// access denied
}
// give READ_EMPL_DATA permission
if (0 != (user.ACL & READ_EMPL_DATA))
user.ACL = user.ACL & READ_EMPL_DATA
}
Чтобы добавить поддержку группы, добавьте пару таблиц.
table group
groupname: string
acl: bit array
table user_group
user_id: id
group_id: id
И в дополнение к тестированию на уровне пользователя, проверьте группы, к которым принадлежит пользователь. Конечно, вы напишете некоторые вспомогательные функции, возможно, хранимую процедуру.
Надеюсь, вам это удалось. Если нет, я могу дать вам более наглядный пример или более актуальный код или другую помощь.
не может кто-нибудь изменить ваш бит-массив (я использовал его раньше) из db, и он может изменить права пользователя? – abmv
Это еще одна проблема. Да, кто-то с правильными разрешениями может изменить это значение. Но опять же, этот человек также мог изменить пароль. Речь идет о защите вашей базы данных, и у SQL Server уже есть решение для этого. Например, вы можете предоставить разрешения на чтение гостевых пользователей на наши 3 таблицы, но без прав на запись, они не могут вносить изменения. – DonkeyMaster
Этот acl не связан с db, это требование для бизнеса – abmv
Это относится к PostgreSQL, но вы, вероятно, можете получить хорошие идеи от Veil.
- 1. Предложения по дизайну базы данных
- 2. Список контроля доступа «Редактирование правил безопасности Odoo»
- 3. Предложения по дизайну форума
- 4. База данных по дизайну безопасности приложений
- 5. Предложения по дизайну для агрегирования данных в реальном времени?
- 6. Общие предложения по дизайну для нового проекта
- 7. Как сделать дискреционный список контроля доступа (DACL) для .Net-безопасности?
- 8. Предложения по дизайну WPF/MVVM
- 9. Наследование таблицы: предложения по дизайну?
- 10. Предложения по дизайну многопоточности Python
- 11. Предложения по дизайну пользовательского интерфейса в android
- 12. Предложения по дизайну на C++
- 13. Предложения по дизайну семейного дерева?
- 14. Шаблоны/предложения по дизайну для обработки разрешений
- 15. Предложения по дизайну для развертывания Django
- 16. Предложения по дизайну интерфейса для iPad iPad
- 17. Нужны предложения по дизайну для вложенных условий
- 18. Предложения по дизайну базы данных для конфигурируемого продукта eshop
- 19. Нужны предложения по дизайну для общего класса данных обучения
- 20. Предложения по календарной базе данных
- 21. Список контроля доступа Drupal
- 22. Предложения по дизайну элементов списка Android
- 23. безопасности и контроля доступа в приложении MVC
- 24. Предложения по дизайну, необходимые для журнала или истории транзакций
- 25. Предложения по безопасности
- 26. Комментарии/Предложения по дизайну базы данных - Управление складом Управление запасами
- 27. Предложения по дизайну моей страницы входа
- 28. PHP список контроля доступа для сокрытия ссылки
- 29. Список контроля доступа (ACL) для EJB
- 30. Laravel 5.2 Список контроля доступа
В чем вы работаете? SQL Server? MySQL? Oracle? Есть много разных прав? Много пользователей? Разные уровни доступа для каждого права? – DonkeyMaster
никаких проблем с базой данных я мог бы использовать, это связано с дизайном кодирования. – abmv