Какова роль представлений??

Добрый вечер. Меня интересует роль представлений. Например, для tbl_Account существует vw_Acount. Для чего он используется?

Нравится

12 комментариев

Для ограничения доступа по правам пользователей.

а если я туда добавляю дополнительные условия в фильтр, где это отразится?

Если Вы непосредственно модифицируете vw_ , то это очень ненадежный способ, так как при определенных условиях представления создаются заново. Я бы их не трогал... :)

А по конкретней, при каких условиях, это очень вожно

А можно подробно описать, каким образом используется это представление. К примеру я добавила к vw_Account в условие ещё фильтр, чтобы вытягивался только один контрагент. Я так понимаю, что при загрузке клиента в разделе контрагенты я должна была увидеть только этого контрагента, но увидела всех. Или это не так работает???

Вы, очевидно, работаете в системе под пользователем с правам администратора, а представления используются только при работе обычных пользователей. Представления используются для проверки прав пользователей на отдельные записи таблицы (для администратора в такой проверке нет необходимости).

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

"Vichka" написал:К примеру я добавила к vw_Account в условие ещё фильтр, чтобы вытягивался только один контрагент.

А зачем это нужно??? Если нужно показать только одного любого контрагента в SelectQuery в Selectе укажите Выбрать первые 1 и этого достаточно. Если нужно показывать конкрентного контрагента добавьте фильтр по ID и включайте его при выборе данных.
В любом случае советую Вам прислушаться к совету Виталия и не пытатся модифицировать представления.

А я и не собиралась их модифицировать, мне просто нужно было понять их суть. Всем огромное спасибо за ответы.

Vichka, мы используем вью для реализации RLS - Row level security(Защита на уровне строк). Более подробно можно прочитать на этом ресурсе: http://www.rsdn.ru/article/db/RowLevelSecurity.xml и http://www.citforum.ru/database/oracle/lewis1/

Скажите, а почему для пользователей с правами sysadmin это не работает ?

Это сделано ради ускорения, так как администраторы должны видеть все записи, пришлось бы добавить во вью фильтр вида

where is_srvrolemember('sysadmin') = 1 or
is_member('dbowner') = 1 or
/*
стандартный фильтр
*/

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

Спасибо всем за ответы, более или менее разобралась

Показать все комментарии