"Текущий пользователь не имеет достаточно прав..."

Добрый день!

В БД создана некая таблица.
Таблица отнесена в группу "Сервисы".
Для вывода реестра записей таблицы (с возможностью редактирования одного из полей) создано окно.
Особенность: наполнение таблицы происходит не через датасет, а через INSERT посредством ExecuteCustomSQL(...).

Под пользователем с админскими правами все работает отлично.
Под обычным - ошибка: "Текущий пользователь не имеет достаточно прав для редактирования..."
При том, что все права на группу таблиц "Сервисы" ему выданы.

На уровне БД права выставляются корректно.
Под данным пользователем доступны все операции над записью.

В связи с вышеописанным вопрос: какова логика работы функции Connector.CurrentUser.GetCanUpdateTableGroup(ParentTableGroup)?
Что она проверяет, куда смотреть?

Версия - 3.3.1.38.

Нравится

21 комментарий

А доступ раздавали через Администрирование или средствами СУБД. Можете попробовать исключить пользователя из группы "Все пользователи", а потом добавить и перераздать доступ на группу таблиц "Сервисы" в резделе [Администрирование], т.е. снять все опции и проставить.

В Insert, который выполняется с помощью Connector.DBEngine.ExecuteCustomSQL(), Вы, наверное, прописали имя таблицы. Под пользователем администрируемые таблицы заменяются на view в сервисах, но не в подобных запросах, поэтому возникает ошибка. Вам следует создать сервис InserQuery, повторяющий то, что Вы прописали запросом.

"Татьяна Адамчук" написал:А доступ раздавали через Администрирование или средствами СУБД.

Нет, все делается средствами Террасофт.

Попробовал исключить/включить пользователя и перевыдать права.
Не помогает.
Есть ли возможность узнать, что конкретно проверяет функция, указанная в исходном сообщении?

"Раловец Ольга" написал:Вам следует создать сервис InserQuery, повторяющий то, что Вы прописали запросом.

Да, делаю INSERT напрямую в таблицу.
Как я понимаю, Террасофт всегда делает так же.
Представления, которые вы упоминаете, используются только для выборки данных, если не ошибаюсь.
Создаются они только в случае "Администрирования по записям" - что мне не нужно.
Данная опция отключена.

InsertQuery, насколько я понимаю, не позволяет вставить несколько десятков записей одним запросом.
Делать же цикл и вставлять по одной - рука не поднимается. :)

Дмитрий, приведите пожалуйста код который приводит к ошибке.

Получаем Key из SelectDataWindow и вносим изменения...

function UpdateAccount(Key) {
	var Dataset = dlData.Dataset;
	Dataset.Edit();
	Dataset.ValAsGUID('FoundAccountID') = Key;
	Dataset.Post();
	RefreshDataset(Dataset);
}

Сложности в том, что не получается настроить права так, чтобы функция GetCanUpdateTableGroup(...) вернула true.
Остальное - следствие.
В случае, если бы форма была сделана на основе шаблона Террасофт, сообщения бы вообще не было, так как была бы исключена сама возможность редактирования.

Дмитрий, а ExecuteCustomSQL Вы выполняете когда? И прикрепите пожалуйста сервис таблицы на основе которой построен Dataset.

Да и забыл: какая СУБД?

"Осауленко Александр" написал:Дмитрий, а ExecuteCustomSQL Вы выполняете когда?

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

Дмитрий, какая у Вас СУБД?

Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86) Feb 9 2007 22:47:07 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Подключитесь под пользователем к серверу mssql через Managment Studio и выполните запрос на Вашей базе:

SELECT * FROM [dbo].[fn_CurrentUserTableGroupRoleList] ()
WHERE [SQLObjectName] = N'TG_ITSERVICE'
GO

И посмотрите что вернет запрос.

Сервисы TG_ITSERVICE TG_ITSERVICE 1 1 1 1

С правами нормально. Приложите сервисы SelectQuery и Dataset на котором возникает ошибка.

Вы подключились под пользователем, под которым возникает ошибка?

"Осауленко Александр" написал:Вы подключились под пользователем, под которым возникает ошибка?

Да. Проверил.

А что возвращает функция Connector.CurrentUser.GetCanUpdateTableGroup("TG_ITSERVICE") под пользователем? И какая у пользователя лицензия?

Функция возвращает false;
Лицензия... Авторизация SQL Server, если вы про это.

Нет я имел ввиду лицензия Terrasoft.

Лицензия именная TS XRM + SD User 3.X.

TS XRM + SD User 3.X.
Ключевое слово я выделил. Эта лицензия предполагает работу в модуле "Сервисы", но только на чтение.

Ясно.
Так и думал, что все просто. :)

Спасибо за уделенное время!

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