Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: как в БД реализованы права доступа на уровне отдельных записей?  (Прочитано 31968 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Axe Ilshat
Гость
« Ответ #30 : 07-01-2006 14:30 » 

С П А С И Б О ! ! ! Улыбаюсь
Извини за беспокойство.
Блин, мне давно пора привыкать читать мануалы от авторов...
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #31 : 10-01-2006 07:37 » 

Оказывается БД абсолютно пофигу кто запускает процедуру, главное что бы на запуск было разрешение. Она от рута работает чтоли??? Я в шоке. Это настолько нелогично, когда процедура работает от другого имени даже не требуя авторизации...
А что здесь шокирующего? Т.е. ты хочешь иметь базу где-то, и на уровне ОС - раздавать права?
А кто будет раздавать права на процедуры?
Поэтому в СУБД и реализован доступ к функциям и процедурум, а также к таблицам и т.д. на уровне СУБД.

В твоем случае, не обязательно создавать view, достаточно усложнить запрос с использованием функции USER(), но в общем-то об этом уже сказал RXL
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #32 : 12-01-2006 10:55 » 

Решал я такую задачку на MS SQL 2000.

Идея: У каждой записи есть  поле AccessID  в котором хранится Обстрактный ID доступа.
Есть таблица вида
Код:
TABLE [twk_Logins_log] [id_log] [int] ,[Login_name] [varchar] (50) 

Далее был вид 
Код:
SELECT     dbo.twk_Tariffs.*
FROM         dbo.twk_Logins_log INNER JOIN
                      dbo.twk_Tariffs ON dbo.twk_Logins_log.id_log = dbo.twk_Tariffs.AccessID
WHERE     (dbo.twk_Logins_log.Login_name = SYSTEM_USER)

В результате пользователь получал доступ только к своим запесям и скрипты были построены так что при добавлении записи id_log подставлялся атоматически тригером. те. клиентское приложение воббще не знало об его существовани.

Когда потребовалось добавить групы и все прочие причендалы сделал так
Код:
 
SELECT   *
FROM         dbo.twk_Tariffs WHERE     dbo.twk_Access(AccessID,  SYSTEM_USER)=1


А в функции dbo.twk_Access уже анализировал имеет ли право пользователь видеть эту запись, соотвественно в поле  AccessID могло стоять либо id пользователя либо id группы, dbo.twk_Access возвращает еденицу в том случае если AccessID равно id пользователя или id  одной из групп в которые входит пользователь.
(код к сожалению не приведу ибо нет подруками проъекта ) И соотвественно придумать структуру для хранения  информации какие есть пользователи и вкакие группы они входят можете сами.

Минусы втом что запись можно было расшарить только для одной группы и все пользователи кому она нужна должны были входить в эту группу....хотя им никто не запрещал состоять в нескольких группах
Записан

Да да нет нет все остальное от лукавого.
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines