14.07.2020, 21:42 | #1 |
Участник
|
AX2009 возможно ли добавить пользователя в таб. UserInfo из SQL
Привет.
Подскажите возможно ли просто скопировать пользователей из одной базы в другую? Это можно сделать в рамках SQL ? Я так понял речь идет о таблице UserInfo. Если через SQL невозможно создать пользователей то возможно ли в базе назначения через Job ? Спрашиваю т.к. может быть не все так просто с добавлением пользователей.. |
|
15.07.2020, 08:00 | #2 |
Administrator
|
Через Job - пожалуйста. Только не забудьте еще пользователя включить в какую-нибудь группу прав, а то у него прав не будет.
Через SQL - тут есть общий нюанс, применимый к любой таблице в АХ в любой версии. Дело в том, что система при создании записи генерит значение поля RecId, которое должно быть уникально в пределах таблицы. В момент генерации система не смотрит на то, какие значения в таблице уже есть (работает некоторый внутренний счетчик), т.о. если Вы создадите запись внешними средствами, то потенциально есть риск того, что когда-то АХ захочет создать запись с Вашим значением RecId, а база данных не даст это сделать из-за уникального индекса. Дальше будет тупик, потому что не создав запись - АХ не сдвинет счетчик, а следовательно без удаления Вашей записи - больше записей в систему не вставить. Счетчики по каждой таблице по коду таблицы лежат в таблице SystemSequences. По идее - их надо там сдвигать (после модификации таблицы нужен рестарт АОСа), но надо обязательно проверять - помогло ли. В более ранних версиях даже существовали средства (класс SystemSequnces в System Documentation) внутри системы управления этими счетчиками, но на каком-то этапе они перестали работать (на каком - не помню)
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: oleggy (1). |
15.07.2020, 08:03 | #3 |
Administrator
|
Я такой подход применял в назначениях групп прав. Из SQL назначал пользователю права, затем заходил в систему, их из системы удалял и заново создавал. Актуально было при разворачивании бекапа БД, в котором у меня не было прав для целей получения прав (предполагалось, что человеческим путем в силу ряда обстоятельств эта задача не решалась)
__________________
Возможно сделать все. Вопрос времени |
|
15.07.2020, 11:22 | #4 |
Участник
|
Спасибо.
А вы не могли бы скинуть сюда пример такого джоба который создает нескольких пользователей и добавляет права. Или существующий джоб какой то, которым вы пользуетесь. А так же если возможно как вы через SQL назначали пользователю права. Тоже интересно. |
|
15.07.2020, 11:54 | #5 |
Administrator
|
Эммм... вот не под рукой у меня AX2009. Писал пост по памяти. А в следующих версиях названия таблиц поменялись и немножко стало всё немножко по-другому
__________________
Возможно сделать все. Вопрос времени |
|
16.07.2020, 15:26 | #6 |
Участник
|
Цитата:
Уже D730 появилась?) Потому как в D365FO этот класс есть и активно используется в том числе в движке батчей Не говоря уже о предыдущих версиях
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: sukhanchik (15). |
16.07.2020, 16:42 | #7 |
Administrator
|
Большое спасибо. Честное слово - не знал. В 2012 мне показалось, что этот класс похоронили, по крайней мере с т.з. работоспособности (но оставили в АОТе)
__________________
Возможно сделать все. Вопрос времени |
|
16.07.2020, 19:44 | #8 |
Участник
|
Цитата:
Сообщение от sukhanchik
Я такой подход применял в назначениях групп прав. Из SQL назначал пользователю права, затем заходил в систему, их из системы удалял и заново создавал. Актуально было при разворачивании бекапа БД, в котором у меня не было прав для целей получения прав (предполагалось, что человеческим путем в силу ряда обстоятельств эта задача не решалась)
|
|
16.07.2020, 19:51 | #9 |
Участник
|
Цитата:
Да. Не только. Нужно учесть 3 таблицы: UserInfo, SysUserInfo и UserGroupList. Просмотрите их содержимое и поймете как, что и зачем. Цитата:
Цитата:
Цитата:
Цитата:
Приведу код генерации RecId, без которого может возникнуть зависон на недельку-другую в поисках решения. PHP код:
__________________
// no comments Последний раз редактировалось dech; 16.07.2020 в 19:59. |
|
|
За это сообщение автора поблагодарили: sukhanchik (15). |
16.07.2020, 23:27 | #10 |
Участник
|
Цитата:
https://axapta.mazzy.ru/lib/startupcmd_ax4/ по security-соображениям в публичной аксапте исключены startup-команды, которые добавляют пользователей, как и команды, которые меняют права пользователей. но вы можете добавить свою команду или расширить команду autoRun которая добавляет аксаптовскими средствами пользователей так, как вы считаете правильным и безопасным. Естественно, изнутри Аксапты можно обращаться к любым объектам аксапты. в том числе и к стандартным классам, которые добавляют пользователей. а также изнутри Аксапты можно сделать и запрос к любому ODBC-источнику. https://docs.microsoft.com/en-us/dyn...artup-commands https://docs.microsoft.com/en-us/pre...868423(v=ax.50) https://docs.microsoft.com/en-us/pre...870082(v=ax.50) Последний раз редактировалось mazzy; 16.07.2020 в 23:47. |
|
|
За это сообщение автора поблагодарили: oleggy (1). |
17.07.2020, 20:50 | #11 |
Участник
|
Таки нашел у себя скрипт.
X++: SET NOCOUNT ON -- automatically add admins DECLARE @RecId BIGINT DECLARE @RecCount INT CREATE TABLE #AdminUsers ( Id NVARCHAR(5) NOT NULL, SecId NVARCHAR(124) NOT NULL, Alias NVARCHAR(20) NOT NULL, Name NVARCHAR(40) NOT NULL, Email NVARCHAR(80) NOT NULL, Domain NVARCHAR(255) NOT NULL DEFAULT 'your-domain.com' ) CREATE NONCLUSTERED INDEX IX_ID ON #AdminUsers (Id) -- add admin users here: INSERT INTO #AdminUsers VALUES ('Vasya', 'S-1-5-21-3902653788-3936360043-4268998436-25184', 'PupkinV', 'Pupkin, Vasily', 'vasily.pupkin@your-domain.com', DEFAULT) SELECT @RecCount = COUNT(*) FROM #AdminUsers -- UserInfo EXEC ppoGetRecId 65531, @RecCount, @RecId OUTPUT DELETE UserInfo WHERE Id IN (SELECT Id FROM #AdminUsers) INSERT INTO UserInfo ([RecId], [Id], [Sid], [NetworkAlias], [NetworkDomain], [Company], [Enable], [Name], [Language], [HelpLanguage], [CompilerWarningLevel], [DebugInfo]) SELECT ROW_NUMBER() OVER(ORDER BY Id) - 1 + @RecId, [Id], [SecId], [Alias], [Domain], 'clt', 1, [Name], 'EN-US', 'EN-US', 4, 16 FROM #AdminUsers -- SysUserInfo EXEC ppoGetRecId 956, @RecCount, @RecId OUTPUT DELETE SysUserInfo WHERE Id IN (SELECT Id FROM #AdminUsers) INSERT INTO SysUserInfo (RecId, Id, HelpTheme, DocuHandlingActive, DocuToolbarButtonActive, EventPollFrequency, EventPopUps, Email) SELECT ROW_NUMBER() OVER(ORDER BY Id) - 1 + @RecId, [Id], 'Dynamics', 1, 0, 15, 1, [Email] FROM #AdminUsers -- UserGroupList EXEC ppoGetRecId 65529, @RecCount, @RecId OUTPUT DELETE UserGroupList WHERE UserId (SELECT Id FROM #AdminUsers) INSERT INTO UserGroupList (RecId, UserId, GroupId) SELECT ROW_NUMBER() OVER(ORDER BY Id) - 1 + @RecId, [Id], 'Admin' FROM #AdminUsers DROP TABLE #AdminUsers
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: oleggy (1). |
22.07.2020, 07:10 | #12 |
Участник
|
Цитата:
Сообщение от dech
Запустив SQL-скрипт, мы создавали нужное количество записей с аккаунтами разработчиков автоматически.
В основном есть 2 серьезные проблемы, это генерация RecId и извлечение SID пользователя в ActiveDirectory средствами SQL. Вторую проблему мы решили, захардкодив SID каждого разработчика. При копировании, проблем возникнуть не должно. Или у вас разрабы не имеют никакого доступа к проду? Даже учеток с заполненным sid пусть и выключенных? Последний раз редактировалось oleggy; 22.07.2020 в 07:13. |
|
30.07.2020, 18:54 | #13 |
Участник
|
Цитата:
Наше дело работать в DEV-среде. Сидим на птичьих правах. :-)
__________________
// no comments |
|
05.08.2020, 09:01 | #14 |
Участник
|
Цитата:
Да сами проверьте! |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|