Как известно, портал на базе Liferay можно сконфигурировать таким образом, чтобы пользователи аутентифицировались по протоколу LDAP с использованием того, или иного LDAP-сервера. Эта опция очень часто используется - благо, в панели управления порталом реализован удобный интерфейс настройки аутентификации.
При всём этом, она содержит в себе одни хорошо скрытые от начинающего администратора "грабли" - если он включил в Панели управления принудительную аутентификацию пользователей через LDAP и ошибся где-то в настройках соединения с сервером, после закрытия портальной сессии в браузере он не сможет больше зайти на портал и, соответственно, не сможет отключить LDAP-аутентификацию. Получается замкнутый круг - чтобы отключить LDAP, нужно зайти на портал под администратором, а чтобы зайти под администратором, нужно отключить LDAP. Обычно, осознав это, начинающий администратор начинает паниковать и совершает много необдуманных поступков вплоть до сноса портала и переустановки его "с нуля".
![Паника!](/documents/10136/22343/panic.gif/8fa4d362-a098-4633-8852-8acbceee2b5f?t=1442527434183)
Тем не менее, решение есть - т.к. портал сохраняет все свои настройки в БД, можно изменить конфигурацию прямо там, не аутентифицируясь на портале. Об этом способе решения проблемы отключения "криво" сконфигурированной LDAP-аутентификации и пойдёт речь в моей сегодняшней заметке.
Постановка задачи
Итак, представим, что мы начинающий администратор портала на Liferay. Для конкретики возьмём Liferay 6.1.2, использующий в качестве хранилища данных БД под управлением M$ SQL Server (довольно часто используемая сегодня конфигурация).
Мы зашли на портал, открыли Панель управления и наконфигурировали что-то непонятное в настройках LDAP-аутентификации:
![Какой-то странный LDAP-сервер](/documents/10136/22343/scr_800.png/26d0336d-c068-4c6c-b334-505b8f5eaa1c?t=1442527681955)
После этого мы вышли с портала и поняли, что авторизоваться мы больше не можем - LDAP сконфигурирован некорректно, вследствие чего аутентификация работать перестала:
![Не пущает!](/documents/10136/22343/scr_801.png/3f10b410-2090-43c0-8783-a2bc6c3b995d?t=1442527790336)
Ищем нужные таблицы
Не будем паниковать и попробуем отключить LDAP-аутентификацию напрямую в БД. Для начала, нам нужно определить, где портал хранит информацию о том, используется ли LDAP. Установим на тестовую машину "чистый" Liferay 6.1.2 и посмотрим, что меняется в БД при включении и отключении LDAP-аутентификации.
Чтобы не проделывать лишнюю работу, скачаем портал в бандле с Tomcat'ом и посмотрим отличия в дефолтной БД на базе HSQL. В этом варианте данные хранятся в файле прямо в виде SQL-запросов; соответственно, даже дамп снимать не надо - достаточно просто сравнить два состояния БД.
Итак, запускаем портал и кликаем "Finish" в мастере конфигурации:
![Мастер конфигурации](/documents/10136/22343/setup-wizard.png/ea88d5f3-3950-4080-a3f9-ee68509e61b9?t=1442527966956)
Теперь снимаем бэкап базы - создаём резервную копию файла $PORTAL_HOME/data/hsql/lportal.log
, в котором хранится БД:
jek@jek-laptop:~/liferay-portal-6.1.2-ce-ga3/data$ cp hsql/lportal.log lportal.default.log
Идём в Панель управления, включаем LDAP (просто устанавливаем 2 флажка):
![Включаем LDAP](/documents/10136/22343/scr_802.png/71f015f0-46db-4493-84a3-a9ddca8d6567?t=1442528059936)
На всякий случай, снова снимаем бэкап базы:
jek@jek-laptop:~/liferay-portal-6.1.2-ce-ga3/data$ cp hsql/lportal.log lportal.ldap.log
Теперь сравниваем 2 состояния БД:
jek@jek-laptop:~/Загрузки/liferay-portal-6.1.2-ce-ga3/data$ diff lportal.default.log lportal.ldap.log
4818,4856d4817
< DELETE FROM ACCOUNT_ WHERE ACCOUNTID=7
< INSERT INTO ACCOUNT_ VALUES(7,1,5,'','2013-08-16 11:59:46.048000','2015-09-16 21:54:05.983000',0,'Liferay','Liferay, Inc.','','','','','','','')
< DELETE FROM LAYOUTSETPROTOTYPE WHERE LAYOUTSETPROTOTYPEID=10412
< INSERT INTO LAYOUTSETPROTOTYPE VALUES('556cb5ea-a3d9-49cd-a15f-c9cf38efc04b',10412,1,'2015-09-16 21:33:24.312000','2015-09-16 21:54:05.986000','<?xml version=''1.0'' encoding=''UTF-8''?><root available-locales="en_US" default-locale="en_US"><Name language-id="en_US">Community Site</Name></root>','Site with Forums, Calendar and Wiki','layoutsUpdateable=true\u000a','1')
< DELETE FROM LAYOUTSETPROTOTYPE WHERE LAYOUTSETPROTOTYPEID=10438
< INSERT INTO LAYOUTSETPROTOTYPE VALUES('cc046471-e626-4608-ab6e-a245a79fefa4',10438,1,'2015-09-16 21:33:25.396000','2015-09-16 21:54:05.986000','<?xml version=''1.0'' encoding=''UTF-8''?><root available-locales="en_US" default-locale="en_US"><Name language-id="en_US">Intranet Site</Name></root>','Site with Documents, Calendar and News','layoutsUpdateable=true\u000a','1')
< DELETE FROM PORTALPREFERENCES WHERE PORTALPREFERENCESID=10248
> INSERT INTO PORTALPREFERENCES VALUES(10248,1,1,'<portlet-preferences><preference><name>ldap.auth.enabled</name><value>true</value></preference><preference><name>ldap.auth.required</name><value>true</value></preference><preference><name>ldap.server.ids</name><value></value></preference><preference><name>admin.email.password.reset.subject</name><value>[$PORTAL_URL$]: Reset Your Password</value></preference><preference><name>admin.email.user.added.subject</name><value>[$PORTAL_URL$]: Your New Account</value></preference><preference><name>admin.email.password.sent.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Your new password for [$PORTAL_URL$] is [$USER_PASSWORD$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]The request for a new password was made from [$REMOTE_ADDRESS$] / [$REMOTE_HOST$] with the browser [$USER_AGENT$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.verification.subject</name><value>[$PORTAL_URL$]: Email Address Verification</value></preference><preference><name>admin.default.role.names</name><value>Power User[$NEW_LINE$]User</value></preference><preference><name>admin.email.password.sent.subject</name><value>[$PORTAL_URL$]: Your New Password</value></preference><preference><name>admin.email.password.reset.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]You can reset your password for [$PORTAL_URL$] at [$PASSWORD_RESET_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]The request for a new password was made from [$REMOTE_ADDRESS$] / [$REMOTE_HOST$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.verification.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Please verify your email address for [$PORTAL_URL$] at [$EMAIL_VERIFICATION_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Your verification code is [$EMAIL_VERIFICATION_CODE$] Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.user.added.no.password.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Welcome! You recently created an account at [$PORTAL_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.user.added.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Welcome! You recently created an account at [$PORTAL_URL$]. Your password is [$USER_PASSWORD$]. Enjoy!<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference></portlet-preferences>')
< COMMIT
< DELETE FROM PORTALPREFERENCES WHERE PORTALPREFERENCESID=10248
> INSERT INTO PORTALPREFERENCES VALUES(10248,1,1,'<portlet-preferences><preference><name>company.security.strangers.verify</name><value>false</value></preference><preference><name>ldap.auth.enabled</name><value>true</value></preference><preference><name>ldap.auth.required</name><value>true</value></preference><preference><name>ldap.server.ids</name><value></value></preference><preference><name>admin.email.password.reset.subject</name><value>[$PORTAL_URL$]: Reset Your Password</value></preference><preference><name>admin.email.user.added.subject</name><value>[$PORTAL_URL$]: Your New Account</value></preference><preference><name>admin.email.password.sent.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Your new password for [$PORTAL_URL$] is [$USER_PASSWORD$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]The request for a new password was made from [$REMOTE_ADDRESS$] / [$REMOTE_HOST$] with the browser [$USER_AGENT$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.verification.subject</name><value>[$PORTAL_URL$]: Email Address Verification</value></preference><preference><name>admin.default.role.names</name><value>Power User[$NEW_LINE$]User</value></preference><preference><name>company.security.strangers.with.mx</name><value>true</value></preference><preference><name>company.security.auto.login</name><value>true</value></preference><preference><name>company.security.site.logo</name><value>true</value></preference><preference><name>admin.email.password.sent.subject</name><value>[$PORTAL_URL$]: Your New Password</value></preference><preference><name>admin.email.password.reset.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]You can reset your password for [$PORTAL_URL$] at [$PASSWORD_RESET_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]The request for a new password was made from [$REMOTE_ADDRESS$] / [$REMOTE_HOST$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>company.security.send.password</name><value>true</value></preference><preference><name>admin.email.verification.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Please verify your email address for [$PORTAL_URL$] at [$EMAIL_VERIFICATION_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Your verification code is [$EMAIL_VERIFICATION_CODE$] Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.user.added.no.password.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Welcome! You recently created an account at [$PORTAL_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.user.added.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Welcome! You recently created an account at [$PORTAL_URL$]. Your password is [$USER_PASSWORD$]. Enjoy!<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>company.security.strangers</name><value>true</value></preference><preference><name>company.security.auth.type</name><value>emailAddress</value></preference></portlet-preferences>')
Видим, что нужные нам конфиги хранятся в таблице PORTALPREFERENCES
(в виде аццкого XML). Уже результат!
Определяем нужные параметры инициализации портала
Тем не менее, это ещё не совсем то, что нам нужно - нам нужно промоделировать ситуацию, когда LDAP сначала был включён, а потом его отключили, а не наоборот. OK - снова идём в Панель управления, отключаем LDAP (оба флажка) и снимаем бэкап:
jek@jek-laptop:~/liferay-portal-6.1.2-ce-ga3/data$ cp hsql/lportal.log lportal.noldap.log
Снова сравниваем 2 состояния БД:
jek@jek-laptop:~/liferay-portal-6.1.2-ce-ga3/data$ diff lportal.noldap.log lportal.ldap.log
4818,4856d4817
< DELETE FROM ACCOUNT_ WHERE ACCOUNTID=7
< INSERT INTO ACCOUNT_ VALUES(7,1,5,'','2013-08-16 11:59:46.048000','2015-09-16 21:54:05.983000',0,'Liferay','Liferay, Inc.','','','','','','','')
< DELETE FROM LAYOUTSETPROTOTYPE WHERE LAYOUTSETPROTOTYPEID=10412
< INSERT INTO LAYOUTSETPROTOTYPE VALUES('556cb5ea-a3d9-49cd-a15f-c9cf38efc04b',10412,1,'2015-09-16 21:33:24.312000','2015-09-16 21:54:05.986000','<?xml version=''1.0'' encoding=''UTF-8''?><root available-locales="en_US" default-locale="en_US"><Name language-id="en_US">Community Site</Name></root>','Site with Forums, Calendar and Wiki','layoutsUpdateable=true\u000a','1')
< DELETE FROM LAYOUTSETPROTOTYPE WHERE LAYOUTSETPROTOTYPEID=10438
< INSERT INTO LAYOUTSETPROTOTYPE VALUES('cc046471-e626-4608-ab6e-a245a79fefa4',10438,1,'2015-09-16 21:33:25.396000','2015-09-16 21:54:05.986000','<?xml version=''1.0'' encoding=''UTF-8''?><root available-locales="en_US" default-locale="en_US"><Name language-id="en_US">Intranet Site</Name></root>','Site with Documents, Calendar and News','layoutsUpdateable=true\u000a','1')
< DELETE FROM PORTALPREFERENCES WHERE PORTALPREFERENCESID=10248
< INSERT INTO PORTALPREFERENCES VALUES(10248,1,1,'<portlet-preferences><preference><name>ldap.server.ids</name><value></value></preference><preference><name>admin.email.password.reset.subject</name><value>[$PORTAL_URL$]: Reset Your Password</value></preference><preference><name>admin.email.user.added.subject</name><value>[$PORTAL_URL$]: Your New Account</value></preference><preference><name>admin.email.password.sent.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Your new password for [$PORTAL_URL$] is [$USER_PASSWORD$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]The request for a new password was made from [$REMOTE_ADDRESS$] / [$REMOTE_HOST$] with the browser [$USER_AGENT$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.verification.subject</name><value>[$PORTAL_URL$]: Email Address Verification</value></preference><preference><name>admin.default.role.names</name><value>Power User[$NEW_LINE$]User</value></preference><preference><name>admin.email.password.sent.subject</name><value>[$PORTAL_URL$]: Your New Password</value></preference><preference><name>admin.email.password.reset.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]You can reset your password for [$PORTAL_URL$] at [$PASSWORD_RESET_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]The request for a new password was made from [$REMOTE_ADDRESS$] / [$REMOTE_HOST$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.verification.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Please verify your email address for [$PORTAL_URL$] at [$EMAIL_VERIFICATION_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Your verification code is [$EMAIL_VERIFICATION_CODE$] Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.user.added.no.password.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Welcome! You recently created an account at [$PORTAL_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.user.added.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Welcome! You recently created an account at [$PORTAL_URL$]. Your password is [$USER_PASSWORD$]. Enjoy!<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference></portlet-preferences>')
< COMMIT
< DELETE FROM PORTALPREFERENCES WHERE PORTALPREFERENCESID=10248
< INSERT INTO PORTALPREFERENCES VALUES(10248,1,1,'<portlet-preferences><preference><name>company.security.strangers.verify</name><value>false</value></preference><preference><name>ldap.server.ids</name><value></value></preference><preference><name>admin.email.password.reset.subject</name><value>[$PORTAL_URL$]: Reset Your Password</value></preference><preference><name>admin.email.user.added.subject</name><value>[$PORTAL_URL$]: Your New Account</value></preference><preference><name>admin.email.password.sent.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Your new password for [$PORTAL_URL$] is [$USER_PASSWORD$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]The request for a new password was made from [$REMOTE_ADDRESS$] / [$REMOTE_HOST$] with the browser [$USER_AGENT$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.verification.subject</name><value>[$PORTAL_URL$]: Email Address Verification</value></preference><preference><name>admin.default.role.names</name><value>Power User[$NEW_LINE$]User</value></preference><preference><name>company.security.strangers.with.mx</name><value>true</value></preference><preference><name>company.security.auto.login</name><value>true</value></preference><preference><name>company.security.site.logo</name><value>true</value></preference><preference><name>admin.email.password.sent.subject</name><value>[$PORTAL_URL$]: Your New Password</value></preference><preference><name>admin.email.password.reset.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]You can reset your password for [$PORTAL_URL$] at [$PASSWORD_RESET_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]The request for a new password was made from [$REMOTE_ADDRESS$] / [$REMOTE_HOST$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>company.security.send.password</name><value>true</value></preference><preference><name>admin.email.verification.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Please verify your email address for [$PORTAL_URL$] at [$EMAIL_VERIFICATION_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Your verification code is [$EMAIL_VERIFICATION_CODE$] Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.user.added.no.password.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Welcome! You recently created an account at [$PORTAL_URL$].<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>admin.email.user.added.body</name><value>Dear [$TO_NAME$],<br />[$NEW_LINE$]<br />[$NEW_LINE$]Welcome! You recently created an account at [$PORTAL_URL$]. Your password is [$USER_PASSWORD$]. Enjoy!<br />[$NEW_LINE$]<br />[$NEW_LINE$]Sincerely,<br />[$NEW_LINE$][$FROM_NAME$]<br />[$NEW_LINE$][$FROM_ADDRESS$]<br />[$NEW_LINE$][$PORTAL_URL$]</value></preference><preference><name>company.security.strangers</name><value>true</value></preference><preference><name>company.security.auth.type</name><value>emailAddress</value></preference></portlet-preferences>')
Видим, что из конфигурации "исчезли" 2 параметра - ldap.auth.enabled
и ldap.auth.required
. То же самое нам нужно сделать и на продакшне!
Отключаем LDAP-аутентификацию
Останавливаем портал на продкашне. Открываем SQL Server Management Studio, цепляемся к базе. Сходу пишем такой запрос:
UPDATE [lportal].[dbo].[PortalPreferences]
SET preferences = REPLACE(preferences,'<preference><name>ldap.auth.enabled</name><value>true</value></preference>','')
WHERE preferences like '%<preference><name>ldap.auth.enabled</name><value>true</value></preference>%';
UPDATE [lportal].[dbo].[PortalPreferences]
SET preferences = REPLACE(preferences,'<preference><name>ldap.auth.required</name><value>true</value></preference>','')
WHERE preferences like '%<preference><name>ldap.auth.required</name><value>true</value></preference>%';
Получаем на выходе ругань о несовместимости типов:
Msg 8116, Level 16, State 1, Line 2
Argument data type ntext is invalid for argument 1 of replace function.
Гуглим, находим вопрос на StackOverflow. Правим запросы:
UPDATE [lportal].[dbo].[PortalPreferences]
SET preferences = CAST(REPLACE(CAST(preferences as NVarchar(MAX)),'<preference><name>ldap.auth.enabled</name><value>true</value></preference>','') AS NText)
WHERE preferences like '%<preference><name>ldap.auth.enabled</name><value>true</value></preference>%';
UPDATE [lportal].[dbo].[PortalPreferences]
SET preferences = CAST(REPLACE(CAST(preferences as NVarchar(MAX)),'<preference><name>ldap.auth.required</name><value>true</value></preference>','') AS NText)
WHERE preferences like '%<preference><name>ldap.auth.required</name><value>true</value></preference>%';
Запросы отработали нормально! Осталось сбросить пароль суперпользователю. Для этого воспользуемся советом, описанным в заметке моего коллеги, и установим нужному пользователю хэш пароля "test" прямо в БД. Для этого найдём запись пользователя в БД и установим ему в поле password_
значение qUqP5cyxm6YcTAhz05Hph5gvu9M=
.
Запускаем портал, пытаемся авторизоваться - ура, теперь всё прошло успешно!
![Аутентификация прошла успешно](/documents/10136/22343/scr_803.png/7d79e038-4dc9-442b-815c-7b9c553a7d9b?t=1442528155052)