Предложения по дизайну безопасности для списка контроля доступа в базе данных? - PullRequest
0 голосов
/ 26 мая 2009

У меня есть пользователи для моего приложения со списком контроля доступа (это обе таблицы / схемы / объекты). В настоящее время они считываются из базы данных, логические значения используются для указания того, что они могут просматривать / манипулировать. Тем не менее, любой может пойти в базу данных и изменить данные. Может кто-нибудь предложить какое-нибудь предложение о том, что я могу сделать? Я надеюсь, что у нас есть пользователи (uname + pass) и acl (empui_access, empdat_manipulate). Любые решения по обеспечению безопасности с помощью кода и т. Д. *

Ответы [ 2 ]

0 голосов
/ 26 мая 2009

Это относится к PostgreSQL, но вы, вероятно, можете получить некоторые хорошие идеи от Veil .

0 голосов
/ 26 мая 2009

Что-то вроде

table users
username: string
password_hash: hex
acl: bit array

username - это имя пользователя, 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

И в дополнение к проверке прав доступа на уровне пользователя, тестируйте группы, к которым принадлежит пользователь. Конечно, вы напишите некоторые вспомогательные функции, возможно хранимую процедуру.

Надеюсь, ты начал. Если нет, я могу дать вам более наглядный пример или более актуальный код или другую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...