Я пытаюсь смоделировать модуль аутентификации пользователя для базы данных MS SQL Server, которая будет являться серверной частью приложения Delphi UI. В принципе, я хочу иметь учетные записи пользователей, где пользователь принадлежит только к одной группе. Группа может иметь «n» количество прав.
Я также хочу добавить историю паролей в базу данных, поскольку пользователь должен будет изменить свой пароль в зависимости от настроек приложения (например, каждые 90 дней).
Я также хочу регистрировать событие при каждом входе и выходе пользователя. Я могу распространить это на дополнительные события в будущем.
Ниже вы найдете мою первую трещину в этом. Пожалуйста, дайте мне знать любые предложения, чтобы улучшить его, так как я делаю это впервые.
Видите ли вы необходимость в дополнительных атрибутах для безопасности на основе ролей и ограничениях для правил паролей / периодов истечения срока действия?
источник
Ответы:
Исходя из ваших заявленных требований, ваша модель находится в довольно хорошей форме.
Вот несколько предложений по улучшению:
Вы не говорите так явно, поэтому трудно сказать - но похоже, что вы, возможно, храните пароль пользователя напрямую. Это было бы очень плохо! Если вы посмотрите на общие базы данных аутентификации, пароли хранятся в зашифрованном виде. Вы часто видите
password
столбец иpassword_salt
столбец.Ваша
USER_LOGS
таблица имеетEvent
столбец. Вам не ясно, как это должно быть заполнено. Должна ли бытьEVENT_TYPE
таблица сUSER_LOGS
ссылками? Это может сделать для более дружественной отчетности. Типичные события включают вход в систему, выход из системы, сбой пароля, изменение пароля, сброс пароля, блокировку, разблокировку, ...Ваша
GROUP_RIGHTS
таблица не указывает, кто предоставил права. В целях ведения журнала аудита люди часто ведут учет того, кто изменил какую запись и когда. Это не может быть проблемой для вас.Вот пара вопросов относительно заявленных вами бизнес-требований, которые отличаются от шаблона безопасности на основе ролей в «учебнике» несколькими способами:
Вы уверены, что хотите, чтобы пользователи были только в одной группе? Преимущество безопасности на основе ролей состоит в том, что роли, как правило, довольно статичны, тогда как люди, выполняющие роли, приходят и уходят довольно часто. В это входит то, что некоторые люди часто «носят две шляпы».
Ваш дизайн только для грантов. Некоторые системы включают предоставление и отзыв . Это позволяет вам сказать, что широко доступное право не доступно для определенной группы.
У вас есть пользователи и аккаунты, как
USERS
в вашем дизайне. Часто существует различие между людьми и идентификаторами пользователей . Некоторые идентификаторы пользователей предназначены для групп или компьютеров, а некоторые люди используют несколько идентификаторов пользователей для разных целей. Это различие, которое было бы полезно для вас?источник
Думаю, побитовый оператор - лучший способ реализовать права пользователя. Здесь я показываю, как мы можем реализовать это с Mysql.
Ниже приведены примеры таблиц с некоторыми примерами данных:
Таблица 1 : Таблица разрешений для хранения имени разрешения вместе с ним, как 1,2,4,8..etc (кратно 2)
Вставьте некоторые данные образца в таблицу.
Таблица 2 : Таблица пользователей для хранения идентификатора пользователя, имени и роли. Роль будет рассчитана как сумма разрешений.
Пример:
если у пользователя «Ketan» есть разрешение «User-Add» (бит = 1) и «Blog-Delete» (бит-64), роль будет 65 (1 + 64).
Если пользователь «Мехата» имеет разрешение «Просмотр блога» (бит = 128) и «Удаление пользователя» (бит-4), то роль будет 132 (128 + 4).
Образец данных-
Разрешение Loding пользователя После входа в систему, если мы хотим загрузить разрешение пользователя, чем мы можем запросить ниже, чтобы получить разрешения:
Здесь user.role "&" allow.bit - побитовый оператор, который выдаст вывод как -
Если мы хотим проверить погоду, у конкретного пользователя есть разрешение на редактирование или нет.
Выход = Нет строк.
Вы также можете увидеть: http://goo.gl/ATnj6j
источник