| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS SQL Server > Разрешить доступ только к части записей |
| Автор: Kostt 2.3.2006, 08:13 | ||
| Здравствуйте! Существует база, состоящая из таблицы «Пользователи» (Поля: Имя в форме “Domain name\UserName” и Ф.И.О.), таблицы («Проекты») и таблиц данных, «завязанных» на таблицу «Проект» т.е. их записи образуют непересекающиеся множества, по одному на каждый проект. «Пользователи» связаны с «Проектами» таблицей «Доступ»: (ID проекта, ID пользователя, Уровень доступа( 0 – нет доступа, 1- чтение, 2-чтение и запись)). Задача – сделать так, чтобы пользователь мог работать только с теми записями, которые принадлежат проектам, для которых у него установлен доступ. Для чтения решение нашел: можно создать view, в которые выбирать данные по такому принципу:
Функция SYSTEM_USER возвращает имя пользователя сессии в форме DomainName\UserName Но эти view невозможно использовать для записи в таблицы . Предлагайте свои решения, плиз. |
| Автор: boevik 2.3.2006, 08:19 |
| Самое простое решение, для просмотра это view. А для записи в таблице, рациональнее использовать Stored Procedure. |
| Автор: Kostt 2.3.2006, 09:32 |
| Собственно, написал SP для проверки она действительно позволяет модифицировать таблицу даже если у пользователя нет прав на таблицу. Но ведь эту SP может вызвать кто угодно с любыми параметрами! Получается дыра в защите... Пытался написать SP для модификации своего VIEW - например добавление - проблема с ID... |
| Автор: boevik 2.3.2006, 10:28 |
| Но ты ведь знаешь кто вызвал процедуру и какие действия он может выполнять. При этом как ты заметил, у него нет прямого доступа к таблице поэтому нет дырки. |
| Автор: beroal 2.3.2006, 17:58 |
| Если это MS SQL Server, то твой view должен быть updatable. Т.е. его можно update-ить. |
| Автор: leniviy 5.3.2006, 22:48 |
| по-моему похожая тема уже была http://forum.vingrad.ru/index.php?showtopic=59138&hl=# |