|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
22746
|
|