Цитата:
Сообщение от
oleggy
Привет.
Подскажите возможно ли просто скопировать пользователей из одной базы в другую?
Да, это возможно.
Цитата:
Сообщение от
oleggy
Это можно сделать в рамках SQL ?
Да.
Цитата:
Сообщение от
oleggy
Я так понял речь идет о таблице UserInfo.
Не только. Нужно учесть 3 таблицы: UserInfo, SysUserInfo и UserGroupList. Просмотрите их содержимое и поймете как, что и зачем.
Цитата:
Сообщение от
oleggy
Если через SQL невозможно создать пользователей то возможно ли в базе назначения через Job ?
Оба способа вполне работоспособны. У нас DEV база копируется с PROD'а, соответственно, изначально там не предусмотрены разработчики. Запустив SQL-скрипт, мы создавали нужное количество записей с аккаунтами разработчиков автоматически.
Цитата:
Сообщение от
oleggy
Спрашиваю т.к. может быть не все так просто с добавлением пользователей..
В основном есть 2 серьезные проблемы, это генерация RecId и извлечение SID пользователя в ActiveDirectory средствами SQL. Вторую проблему мы решили, захардкодив SID каждого разработчика. При копировании, проблем возникнуть не должно.
Цитата:
Сообщение от
oleggy
Спасибо.
А вы не могли бы скинуть сюда пример такого джоба который создает нескольких пользователей и добавляет права. Или существующий джоб какой то, которым вы пользуетесь.
Просмотрите оборзевателем 3 таблицы, на которые я указал. Там нет ничего сложного, посмотрите также метод SysUserInfo.initValue().
Цитата:
Сообщение от
oleggy
А так же если возможно как вы через SQL назначали пользователю права. Тоже интересно.
Легко, смотрите записи в таблице UserGroupList. Примеров приводить не буду, это довольно просто.
Приведу код генерации RecId, без которого может возникнуть зависон на недельку-другую в поисках решения.
PHP код:
CREATE PROCEDURE [dbo].[ppoGetRecId] (@TableId INT, @hop BIGINT, @RecId BIGINT OUTPUT)
AS
BEGIN
SET NOCOUNT ON
SET @RecId = NULL
-- if record not exists
IF NOT EXISTS
(SELECT * FROM SYSTEMSEQUENCES
WHERE DataAreaId = 'dat'
AND Id = -1
AND TabId = @TableId)
INSERT INTO SYSTEMSEQUENCES
(ID, NEXTVAL, MINVAL, MAXVAL, CYCLE, NAME, TABID, DATAAREAID, RECVERSION, RECID)
VALUES (-1, 1, 1, 9223372036854775807, 0, 'SEQNO', @TableId, 'dat', 1, -1)
-- end of if
UPDATE SYSTEMSEQUENCES
SET @RecId = A.NextVal,
NextVal = A.NextVal + @HOP
FROM SYSTEMSEQUENCES A
WHERE A.ID = -1 AND A.DATAAREAID = 'dat' AND A.TABID = @TableId
SELECT ISNULL(@RecId, 0) AS RecId
END
P.S. Параметр @hop - это размер выделяемой порции, выделять RecId под несколько записей - обычное дело в AX.