Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Mikhail
Зарегистрирован: 16.08.2012 Сообщения: 177 Откуда: Москва
|
Добавлено: Пн Янв 18, 2016 19:29 Заголовок сообщения: Проверка прав доступа [dbo].[ADFN_RoleAcc] |
|
|
Добрый вечер.
В обновленной версии, в частности в 6.05.01.03 для проверки прав доступа, например, к подразделениям, используется связка таблицы STRUCTS с представлением ACVW_STRUCTS, которое, в свою очередь, содержит функцию [dbo].[ADFN_RoleAcc] которой на входе поступают тип сущности, код подразделения, код роли и др. параметры, а на выходе 1/0 в зависимости от наличия прав доступа к объекту.
Таким образом, при открытии списка подразделений для каждой строки из левого набора выполняется соединение с ACVW_STRUCTS с запуском функции [dbo].[ADFN_RoleAcc] - все это занимает много времени и пользователи вынуждены подолгу ожидать открытие часто используемого списка.
Возможно ли оптимизировать разграничение прав доступа для обеспечения более высокого быстродействия?
Я подумал, что можно сделать и, наверное, предложил бы использовать связь с табличной функцией, которой на вход будет передаваться тип сущности, код роли, и возвращаться набор по условию:
Код: |
select
id_rec
from adtb_role_acc
where name_table = @fact --тип сущности: 'structs'
and role_code = @role_code --код роли: 'xxx_role'
|
Спасибо. |
|
Вернуться к началу |
|
 |
Joenka
Зарегистрирован: 08.11.2013 Сообщения: 77 Откуда: Moscow
|
Добавлено: Вт Янв 19, 2016 09:42 Заголовок сообщения: |
|
|
Поддерживаю. Нехитрые опыты показали, что работать стало еще более медленно, чем с представлениями (и без того с ними тормозило).
Так же анализ показал, что если использовать не скалярную функцию, а связку с запросом из функции через cross apply все работает мгновенно!
Т.е. идея в том, что бы:
1. Использовать не скалярную функцию, а табличную.
2. Для связи использовать cross apply чтобы была возможность передавать входными параметрами функции элементы из запроса.
3. Табличная функция должна безусловно возвращать top 1 1, дабы избежать ситуаций, когда добавление в запрос табличной функции приводит к "замножению" записей.
Собственно, единственное, что может помешать, это использование MS SQL ниже 2005, т.к. там cross aplly нет, но не думаю, что это столь критично, особенно в свете того, что Босс Кадровые системы обычно настаивают на использовании последних версий MS SQL! |
|
Вернуться к началу |
|
 |
DUCKKK Большой шоколадный орден

Зарегистрирован: 16.09.2009 Сообщения: 1690
|
Добавлено: Вт Янв 19, 2016 13:49 Заголовок сообщения: |
|
|
Да, знаем проблему, работаем. |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|