Главная страница
    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.067 c
2-1330981721
Зарубка
2012-03-06 01:08
2013.03.22
Подмена данных в idHtppProxyServer


2-1340180219
vasa777
2012-06-20 12:16
2013.03.22
число записей при sql запросе


15-1340569805
Юрий
2012-06-25 00:30
2013.03.22
С днем рождения ! 25 июня 2012 понедельник


15-1352478014
Chorus
2012-11-09 20:20
2013.03.22
Извините. Последний вопрос по C++


15-1340130061
Дмитрий С
2012-06-19 22:21
2013.03.22
Посоветуйте удобную TODO програмку.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский