Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Проверка прав доступа [dbo].[ADFN_RoleAcc]

 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: Администрирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
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
Сообщения: 1585

СообщениеДобавлено: Вт Янв 19, 2016 13:49    Заголовок сообщения: Ответить с цитатой

Да, знаем проблему, работаем.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> SQL: Администрирование Часовой пояс: GMT + 4
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU