Re[7]: пересылка ключей базы данных в параметрах запроса
От: Ziaw Россия  
Дата: 18.04.11 16:08
Оценка:
Здравствуйте, DOOM, Вы писали:

DOO>Здравствуйте, Ziaw, Вы писали:


Z>>Нужно везде проверять может ли пользователь иметь доступ к конкретным данным. Если может — показываем, если нет — нет. Например, если тебе нужно сделать какие-то приватные строки в таблице, сделай там поле OwnerID и ко всем запросам добавляй and (OwnerID = @CurrentUserId).

DOO>Ну дак ты все-таки объяснишь, почему надо обязательно изобретать свой велосипед, собирая по дороге все шишки до этого набитые производителями ОС и СУБД?


Если ты объяснишь мне зачем тут что-то изобретать.

База дает:

Table level crud security — приложение все равно должно знать все эти правила, чтобы UI мог дисаблить/скрывать ненужные кнопки, если приложение и так умеет делать такие проверки, зачем нам их тащить еще на уровень БД? Какой смысл поддерживать две одинаковые схемы безопасности и там и там и не допускать их рассогласовывания. Зачем удваивать вероятность ошибок определенного класса? При развитии/поддержке работающей системы хватает забот и без этого.

Column level security — в моем случае перечисление в запросе только тех колонок которые доступны пользователю. Это придется делать и в твоем случае тоже.

Row level security — в моем случае обычный предикат к запросам, в твоем случае такой же предикат, только он настривается в БД. Только вот я у себя могу в любой момент отключить этот предикат из кода приложения, а у тебя нужны не очень простые приседания.

Итак, сухой остаток: единственный плюс авторизации БД — нельзя забыть подставить предикаты безопасности в RLS. Это реализуемо и в коде приложения, например через linq.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.