Форум: "Базы";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизВыборка данных в зависимости от пользователя MS SQL Найти похожие ветки
← →
newman (2010-08-25 22:04) [0]Необходимо обеспечить наличие в БД некоторого набора свойств для пользователя MS SQL, вполне устроит таблица с определенным набором полей. Допустим, это будет таблица
T_User_Prop (IdUser, AccessLevel)
Далее, при реализации представлений необходимо обеспечить выборку данных в зависимости от свойств пользователя, т.е. запрос должен выглядеть примерно следующим образом:
Select *
From …
Where AccessLevel In (Select AccessLevel From T_User_Prop Where IdUser = PIdUser)
Вопрос в том, как определить какой пользователь пытается выполнить запрос, т.е. как получить значение PIdUser.
Причем необходимо обеспечить такое поведение при использовании любого клиентского приложения.
← →
Правильный$Вася (2010-08-25 22:15) [1]в Оракле это называется Row Level Security и встроено в сам движок
есть ли подобное у мелкомягких, не знаю
тем более версия не указана
← →
newman (2010-08-25 22:25) [2]Версия MS SQL 2000
Дело в том, что выборка должна осуществляться в зависимости от принадлежности пользователя к некоторому подразделению, на данный момент подразделений 50, но в некоторые моменты времени некоторым сотрудникам необходимо предоставлять выборки по нескольким подразделениям, кроме того будут пользователи, которым необходимо выполнять выборки по всей базе.
В оракле я как раз и подсмотрел конструкцию
Select *
From …
Where AccessLevel In (Select AccessLevel From T_User_Prop Where IdUser = PIdUser)
Только там вместо PIdUser было что-то типа GetUserId() и работало при использовании любого клиента, хоть SQL Plus
← →
Правильный$Вася (2010-08-25 23:26) [3]
> В оракле я как раз и подсмотрел конструкцию
Row Level Security не требует таких извращений, поскольку работает на уровне ядра
т.е. один и тот же запрос типаSELECT * FROM tbl
вернет разным пользователям разный результат в зависимости от правил безопасности, которые для них установлены
и эти правила прописаны специальным образом админом, а не зашиваются в запрос
← →
newman (2010-08-26 01:02) [4]Хорошо, что так хорошо все в оракле, но мне нужно в MS SQL.
← →
stas © (2010-08-26 09:00) [5]APP_NAME(), приложение
HOST_NAME(), хост
SUSER_SNAME() юзер
Только я не понял, откуда MSSQL должен знать кто в каком подразделении работает.
← →
zubr (2010-08-26 13:30) [6]Посмотрите как предлагает это делать микрософт, для сайтов и т.п. приложений
http://msdn.microsoft.com/en-us/library/aa478948.aspx
← →
Кщд (2010-08-26 13:57) [7]>Правильный$Вася (25.08.10 23:26) [3]
думается, что Oracle как раз и дополняет пользовательский запрос чем-то типа:
Where AccessLevel In (Select AccessLevel From T_User_Prop Where IdUser = PIdUser)
и никакой магии уровня ядра - обыкновенный запрос, к которому RLS прикрепляет доп. фильтр
← →
Кщд (2010-08-26 14:12) [8]>zubr (26.08.10 13:30) [6]
Эта схема данных имеет прямое отношение к RLS?
Вопрос автора читали?
← →
Игорь Шевченко © (2010-08-26 15:44) [9]в Oracle это называется Virtual Private Database
← →
Petr V. Abramov © (2010-08-26 16:14) [10]
> Игорь Шевченко © (26.08.10 15:44) [9]
по-моему, всю дорогу как-то label security называлось (уже с магией уровня ядра, не dbms_rls)
← →
Игорь Шевченко © (2010-08-26 16:46) [11]
> по-моему, всю дорогу как-то label security называлось
Это trusted oracle
← →
Petr V. Abramov © (2010-08-26 17:07) [12]
> Игорь Шевченко © (26.08.10 16:46) [11]
ну да, она же Элла Кальценбобер, она же Манька-Облигация
← →
Правильный$Вася (2010-08-26 18:29) [13]
> Кщд (26.08.10 13:57) [7]
правильно, но это делается так, что ни пользователь, ни программист об этом не знает, а долько БД-админ
> Petr V. Abramov © (26.08.10 16:14) [10]
label security - это так сказать "проба пера", замененная позже на RLS и не рекомендуемая для новых разработок
← →
newman (2010-08-26 19:57) [14]
> APP_NAME(), приложение
HOST_NAME(), хост
SUSER_SNAME() юзерТолько
> я не понял, откуда MSSQL должен знать кто в каком подразделении
> работает.
спасибо попробую, но уже через неделю - отпуск однако :-)
MSSQL узнает из таблицы которую я сделаю, и установлю связь пользователь = подразделение
← →
Petr V. Abramov © (2010-08-27 11:20) [15]
> Правильный$Вася (26.08.10 18:29) [13]
> label security - это так сказать "проба пера", замененная
> позже на RLS и не рекомендуемая для новых разработок
проба вполне удачная, правда, сам в продакшн не гонял. И мне лично нравится гораздо больше, чем RLS. почему ее загнобили, мне не сильно понятно, может, потому что спросом не пользовалась из-за вроде бы аховой цены.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.067 c