Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.192 c
6-1258710157
Scarlett
2009-11-20 12:42
2013.03.22
Post из локальной HTML-страницы


15-1351974603
Юрий
2012-11-04 00:30
2013.03.22
С днем рождения ! 4 ноября 2012 воскресенье


15-1335990605
Юрий
2012-05-03 00:30
2013.03.22
С днем рождения ! 3 мая 2012 четверг


15-1340397005
Юрий
2012-06-23 00:30
2013.03.22
С днем рождения ! 23 июня 2012 суббота


15-1339959786
Artem
2012-06-17 23:03
2013.03.22
Pocket Fritz





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский