Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Как ограничить "область видимости" запроса? (stiff) 21/06/2005 - 03:59:04
      Re: Как ограничить, или виртуальные частные базы (Валентин) 21/06/2005 - 12:56:18
      Re: Как ограничить, или виртуальные частные базы (stiff) 21/06/2005 - 16:30:32
      Re: Как ограничить, или виртуальные частные базы (Dinky) 21/06/2005 - 22:34:15
      Re: Как ограничить, или виртуальные частные базы (stiff) 21/06/2005 - 22:42:53
      Re: Как ограничить, или виртуальные частные базы (Dinky) 21/06/2005 - 22:49:23
      Re: Как ограничить, или виртуальные частные базы (stiff) 21/06/2005 - 23:21:06
      Re: Как ограничить, или виртуальные частные базы (Dinky) 22/06/2005 - 01:53:35
      Re: Как ограничить, или виртуальные частные базы (stiff) 22/06/2005 - 02:44:22
      Re: Как ограничить, или виртуальные частные базы (Alec) 22/06/2005 - 11:01:34
      Re: Раздача слонов, крео (Валентин) 22/06/2005 - 16:14:28
      Re: Раздача слонов, крео (stiff) 22/06/2005 - 17:02:39
      Re: Раздача слонов, крео (Валентин) 22/06/2005 - 17:08:08
      Re: О вопросе (Валентин) 22/06/2005 - 17:09:44
      Re: О вопросе (stiff) 22/06/2005 - 17:24:32
      Re: Вариант реализации (Валентин) 22/06/2005 - 18:54:03
      Re: Вариант реализации (stiff) 22/06/2005 - 19:16:02
      Re: Вариант реализации (Валентин) 23/06/2005 - 10:29:30
      Re: Ошибка Can't find messagefile (AndreR) 24/06/2005 - 16:53:12
      Re: Ошибка Can't find messagefile (AndreR) 24/06/2005 - 16:59:05

> Original message text:
> From: stiff - 21/06/2005 - 03:59:04
> Subject:Как ограничить "область видимости" запроса?
> -----------------
> Возможно ли ограничить "область видимости" sql запроса одной или несколькими таблицами в базе? (СУБД mySQL)
> Задача - выполнить "небезопасный" запрос в движке сайта. И как средство борьбы с sqlinjection.
>
> Спрашивал у людей, они предложили фильтр запросов через рег. выр. или "лучше это шаблоны разрешенных запросов, остальное блокировать, только в такой модели оно будет действительно безопасно видел что-то в этом духе:) но без исходников, а работающую модель у хостера".
>
>


From: Валентин - 22/06/2005 - 16:14:28
Subject:Раздача слонов, крео
-----------------
Виртуальные частные базы данных - теория, реализованная на практике в ORACLE 9i, 10i и можно в 8i, но реализовано достаточно криво и некрасиво.
Говорить, что в MySQL нет виртуальных частных баз - ничего не говорить, виртуальные частные базы - это видимое пространство из таблиц для конкретных пользователей и ничего более.

Средствами MySQL можно разграничить доступ к базе, таблице, столбцу, но не строке, т.е. пользовательно просто получит ошибку доступа при попытке просмотра.

Для нормальной реализации прежде всего прописывается, что собственно нужно, т.е. как должна быть ограничена видимость данных у пользователей, по каким критериям.
Определяется модель схемы видимости данных.
Рисуется структура
Пользователи
Таблица доступа
Справочники - ключи видимости (например)
Прайс-лист - применение ключей видимости по справочнику товара (например).

На пальцах написать не могу, т.к. такой уровень доступа планировал, расписывал, но не реализовывал из-за ненадобности пока.
Для справочников, если они древовидные - то запрос достаточно сложный. Принцип действия такой разрешен доступ к ветвям, определенным в табличке доступов, и ко всем товарам в ветви. Кроме этого доступ может быть на видимость, но не быть на изменение - это определяет характер связи в табличке доступа...
Для документов проще - табличка линейная, фильтруешь в запросе по невидимому пользователю критерию и все.

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

Для того, чтобы упростить работу с подобными схемами лучше переходить на 5.0.х и там хранимыми функциями доставать нужные ключи в запрос, тогда логику безопасности можно убрать в базу и на клиенте не беспокоится выяснением всяких разных моментов...

например я так достаю конкретный ключ юзера так

CREATE FUNCTION `lf_Get_UserID`()
RETURNS tinyint(4)
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT '#Visor'
BEGIN
DECLARE UserID TINYINT;

select ID,ID_Owners
into UserID, @ID_Owners
from `adm_users`
where name=CONVERT(LEFT(CURRENT_USER()
,locate('@'
,CONVERT(CURRENT_USER() USING cp1251))-1) USING cp1251);
IF UserID is NULL THEN
SET UserID:=1; /*админа всегда нужно ставить, если некого :)*/
END IF;

RETURN UserID;

/*
Извлекает ключ юзера по сессии коннекта
*/
END;



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
22746



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |