Новый администратор Битрикс через SQL: клон пользователя, группы и права доступа
Идея
Служебный или запасной вход удобно собрать как копию учётной записи, у которой уже есть нужные группы и строки в b_user_access (часто это первая учётка или логин вида admin). Числовой ID новой строки заранее неизвестен — его выдаёт автоинкремент, после чего его читают из LAST_INSERT_ID() в той же сессии клиента MySQL.
Клонирование строки b_user
Перечень полей ниже соответствует распространённой схеме «1С-Битрикс: Управление сайтом»; если у вас добавлялись пользовательские столбцы, расширьте список. Во вставке участвуют все поля кроме ID. Во LOGIN и EMAIL на время вставки подставляются уникальные временные значения, чтобы не упереться в уникальные индексы; окончательные задаёт UPDATE.
INSERT INTO `b_user` (
`TIMESTAMP_X`, `LOGIN`, `PASSWORD`, `CHECKWORD`, `ACTIVE`, `NAME`, `LAST_NAME`, `EMAIL`, `LAST_LOGIN`, `DATE_REGISTER`, `LID`,
`PERSONAL_PROFESSION`, `PERSONAL_WWW`, `PERSONAL_ICQ`, `PERSONAL_GENDER`, `PERSONAL_BIRTHDATE`, `PERSONAL_PHOTO`, `PERSONAL_PHONE`, `PERSONAL_FAX`, `PERSONAL_MOBILE`, `PERSONAL_PAGER`,
`PERSONAL_STREET`, `PERSONAL_MAILBOX`, `PERSONAL_CITY`, `PERSONAL_STATE`, `PERSONAL_ZIP`, `PERSONAL_COUNTRY`, `PERSONAL_NOTES`,
`WORK_COMPANY`, `WORK_DEPARTMENT`, `WORK_POSITION`, `WORK_WWW`, `WORK_PHONE`, `WORK_FAX`, `WORK_PAGER`, `WORK_STREET`, `WORK_MAILBOX`, `WORK_CITY`, `WORK_STATE`, `WORK_ZIP`, `WORK_COUNTRY`, `WORK_PROFILE`, `WORK_LOGO`, `WORK_NOTES`,
`ADMIN_NOTES`, `STORED_HASH`, `XML_ID`, `PERSONAL_BIRTHDAY`, `EXTERNAL_AUTH_ID`, `CHECKWORD_TIME`, `SECOND_NAME`, `CONFIRM_CODE`, `LOGIN_ATTEMPTS`, `LAST_ACTIVITY_DATE`, `AUTO_TIME_ZONE`, `TIME_ZONE`, `TIME_ZONE_OFFSET`
)
SELECT
`TIMESTAMP_X`,
CONCAT('_tmp_', UNIX_TIMESTAMP(), '_', `LOGIN`),
`PASSWORD`, `CHECKWORD`, `ACTIVE`, `NAME`, `LAST_NAME`,
CONCAT(UNIX_TIMESTAMP(), '+tmp@', `EMAIL`),
`LAST_LOGIN`, `DATE_REGISTER`, `LID`,
`PERSONAL_PROFESSION`, `PERSONAL_WWW`, `PERSONAL_ICQ`, `PERSONAL_GENDER`, `PERSONAL_BIRTHDATE`, `PERSONAL_PHOTO`, `PERSONAL_PHONE`, `PERSONAL_FAX`, `PERSONAL_MOBILE`, `PERSONAL_PAGER`,
`PERSONAL_STREET`, `PERSONAL_MAILBOX`, `PERSONAL_CITY`, `PERSONAL_STATE`, `PERSONAL_ZIP`, `PERSONAL_COUNTRY`, `PERSONAL_NOTES`,
`WORK_COMPANY`, `WORK_DEPARTMENT`, `WORK_POSITION`, `WORK_WWW`, `WORK_PHONE`, `WORK_FAX`, `WORK_PAGER`, `WORK_STREET`, `WORK_MAILBOX`, `WORK_CITY`, `WORK_STATE`, `WORK_ZIP`, `WORK_COUNTRY`, `WORK_PROFILE`, `WORK_LOGO`, `WORK_NOTES`,
`ADMIN_NOTES`, `STORED_HASH`, `XML_ID`, `PERSONAL_BIRTHDAY`, `EXTERNAL_AUTH_ID`, `CHECKWORD_TIME`, `SECOND_NAME`, `CONFIRM_CODE`, `LOGIN_ATTEMPTS`, `LAST_ACTIVITY_DATE`, `AUTO_TIME_ZONE`, `TIME_ZONE`, `TIME_ZONE_OFFSET`
FROM `b_user`
WHERE `LOGIN` = 'admin' AND `ACTIVE` = 'Y'
LIMIT 1;
SELECT LAST_INSERT_ID() AS `new_user_id`;
SET @new_uid := LAST_INSERT_ID();
UPDATE `b_user`
SET `LOGIN` = 'new_admin_login',
`NAME` = 'Reserve admin',
`EMAIL` = 'new-admin@site.example'
WHERE `ID` = @new_uid;
Группы и b_user_access
Состав групп и расширенные права переносят с эталона @src_uid (часто 1). Привязки у нового пользователя предварительно очищаются, чтобы не смешивать с прошлыми попытками.
SET @src_uid := 1;
DELETE FROM `b_user_group` WHERE `USER_ID` = @new_uid;
INSERT INTO `b_user_group` (`USER_ID`, `GROUP_ID`, `DATE_ACTIVE_FROM`, `DATE_ACTIVE_TO`)
SELECT @new_uid, `GROUP_ID`, `DATE_ACTIVE_FROM`, `DATE_ACTIVE_TO`
FROM `b_user_group` WHERE `USER_ID` = @src_uid;
DELETE FROM `b_user_access` WHERE `USER_ID` = @new_uid;
INSERT INTO `b_user_access` (`USER_ID`, `PROVIDER_ID`, `ACCESS_CODE`)
SELECT @new_uid, `PROVIDER_ID`, `ACCESS_CODE`
FROM `b_user_access` WHERE `USER_ID` = @src_uid;
Пароль и отдельное повышение прав
Разумно задать доступный пароль через форму восстановления по почте (/auth/forgot.php?forgot_password=yes) или штатный скрипт восстановления администратора из обучающего курса 1С-Битрикс. Если нужно лишь добавить права уже существующему USER_ID, административная группа имеет GROUP_ID = 1:
INSERT INTO `b_user_group` (`USER_ID`, `GROUP_ID`)
VALUES (42, 1);
Число 42 здесь — пример осознанного существующего идентификатора; оно не связано с только что созданной строкой.
Осторожность
- Работайте на бэкапе или в транзакции с проверкой результата перед
COMMIT. - После правок в БД может понадобиться сброс связанного кеша авторизации.
- Для промышленной политики пользователей предпочтительны штатные средства; прямой SQL оставляют для аварии и документированного отката.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии