Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Выборка данных в зависимости от пользователя 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.13 c
15-1330664086
CleriC
2012-03-02 08:54
2013.03.22
HotKey в среде Delphi (не могу назначить)


6-1261335712
Vladimir
2009-12-20 22:01
2013.03.22
Передача записи по сети через сокеты


2-1347507525
turbo
2012-09-13 07:38
2013.03.22
Как перевести дату в нормальный формат?


2-1335429750
Daryma
2012-04-26 12:42
2013.03.22
Access & Delphi 7


2-1340128237
karambos
2012-06-19 21:50
2013.03.22
Работа с TBitMap