Биллинговая система Nodeny

Главная категория => Nodeny Plus => Тема начата: md5 от 16 Мая 2019, 15:19:19



Название: Переход с 50.32 на +
Отправлено: md5 от 16 Мая 2019, 15:19:19
И так ребят, не знаю у кого как но у меня при переходе на плюсовую версию не работают пароли!

И так по документу from_50.32_to_n_plus.txt делаю переход...
В старой бд в таблице users

Код:
`passwd` tinytext NOT NULL,

В + версии

Код:
ALTER TABLE `users` MODIFY COLUMN passwd VARCHAR(64) NOT NULL;

Зайти в л/к можно только указав логин без пароля
Только после изменения пароля можно зайти в л/к под логином и паролем

Как это вылечить ?


Название: Re: Переход с 50.32 на +
Отправлено: zeny от 16 Мая 2019, 15:21:04
Подобная ситуация и у нас была. Решали изменением кодировки. На форуме уже обсуждалось, но разработчик внятного ничего не ответил.


Название: Re: Переход с 50.32 на +
Отправлено: Cell от 16 Мая 2019, 15:47:33
Если без секса хотите, то удалите в скрипте перехода вот эту строку

Цитировать
ALTER TABLE `users` MODIFY COLUMN passwd VARCHAR(64) NOT NULL;



Название: Re: Переход с 50.32 на +
Отправлено: md5 от 16 Мая 2019, 16:24:52
В том то и дело что оставлял даже так как есть...
Ничего не поменялось


Название: Re: Переход с 50.32 на +
Отправлено: Cell от 16 Мая 2019, 18:16:46
В том то и дело что оставлял даже так как есть...
Ничего не поменялось
Короче, я делал так:
1) расшифровывал пароли одним запросом прямо в то же поле
2) делал бэкап базы
3) зашифровывал пароли назад (пусть еще поработают)
4) заливал бэкап в новую базу
5) зашифровывал пароли одним запросом
6) накатывал исправленным (писал выше как) инсталятором исправления в базе.
Как-то так. Каждый раз делаешь и каждый раз что-то новенькое выскакивает,  зависит от версии мускула по ходу дела.


Название: Re: Переход с 50.32 на +
Отправлено: Efendy от 17 Мая 2019, 10:42:24
Да, норм вариант сначала расшифровать пароли, сделать бекап, залить куда надо, зашифровать


Название: Re: Переход с 50.32 на +
Отправлено: Jovani от 02 Ноября 2020, 12:51:39
Поделитесь пожалуйста запросом
расшифровки паролей одним запросом прямо в то же поле
и зашифровки паролей одним запросом.
Столкнулся с проблемой когда переношу базу, пропадают пароли,
поле passwd имеет Сравнение cp1251_general_ci, а вот все остальное имеет сравнение utf8_general_ci.

Получится ли таким спопсобом?
Хочу расшифровать столбец passwd.
Поменять сравнение на utf8_general_ci.
И снова зашифровать.

Буду благодарен


Название: Re: Переход с 50.32 на +
Отправлено: goletsa от 03 Ноября 2020, 14:06:04
Расшифровка
Код:
UPDATE users SET passwd=AES_DECRYPT(passwd, 'hardpass');
Зашифровка обратно
Код:
UPDATE users SET passwd=AES_ENCRYPT(passwd, 'hardpass');

PS: У меня пароли не пропадают почему-то, сейчас тоже с миграцией с 50.32 на ND2.0 мучаюсь.


Название: Re: Переход с 50.32 на +
Отправлено: Jovani от 22 Ноября 2020, 18:43:05
Расшифровка
Код:
UPDATE users SET passwd=AES_DECRYPT(passwd, 'hardpass');
Зашифровка обратно
Код:
UPDATE users SET passwd=AES_ENCRYPT(passwd, 'hardpass');

PS: У меня пароли не пропадают почему-то, сейчас тоже с миграцией с 50.32 на ND2.0 мучаюсь.


Warning: #1048 Столбец 'passwd' не может принимать величину NULL


Название: Re: Переход с 50.32 на +
Отправлено: Efendy от 23 Ноября 2020, 00:53:31
Проверь, что пароли правильно расшифровует:
Код:
SELECT AES_DECRYPT(passwd, 'hardpass') FROM users;
правильно показывает?


Название: Re: Переход с 50.32 на +
Отправлено: Jovani от 27 Ноября 2020, 09:20:46
У некоторых стоит NULL после расшифровки.


Название: Re: Переход с 50.32 на +
Отправлено: goletsa от 27 Ноября 2020, 12:05:55
У некоторых стоит NULL после расшифровки.
А в старом биллинге там пароль расшифровывает нормально в вебке?
И ключ шифрования вы свой используете?


Название: Re: Переход с 50.32 на +
Отправлено: Efendy от 28 Ноября 2020, 15:14:05
У некоторых стоит NULL после расшифровки.
если не много, то можно вручную потом перенести проблемные пароли. А расшифровать так:

Код:
UPDATE users SET passwd=IFNULL(AES_DECRYPT(passwd, 'hardpass'), '');


Название: Re: Переход с 50.32 на +
Отправлено: Jovani от 30 Ноября 2020, 21:37:48
после засшифровки.
Код:
Warning: #1366 Incorrect string value: '\x9Cj|\xA7\xAE\x0B...' for column 'passwd' at row 1
Warning: #1366 Incorrect string value: '\xA8\xED\x9C\xC9\xB7\x0F...' for column 'passwd' at row 2
Warning: #1366 Incorrect string value: '\xAFX\xFA 8\x85...' for column 'passwd' at row 3
Warning: #1366 Incorrect string value: '\xC0-\xA7\x89%\xDA...' for column 'passwd' at row 4
Warning: #1366 Incorrect string value: '\xFEw\x89\xE0\x83...' for column 'passwd' at row 5
Warning: #1366 Incorrect string value: '\xFA\xD5d\xAB\xB7\xE1...' for column 'passwd' at row 6
Warning: #1366 Incorrect string value: '\xBDG\x1D\x09n\xF9...' for column 'passwd' at row 7
Warning: #1366 Incorrect string value: '\xFF\x1A\xEC`\x94\x9D...' for column 'passwd' at row 8
Warning: #1366 Incorrect string value: '\xFB\xF5\xEF\xB6T\x1B...' for column 'passwd' at row 9


Название: Re: Переход с 50.32 на +
Отправлено: goletsa от 07 Декабря 2020, 19:42:23
после засшифровки.
Код:
Warning: #1366 Incorrect string value: '\x9Cj|\xA7\xAE\x0B...' for column 'passwd' at row 1
Warning: #1366 Incorrect string value: '\xA8\xED\x9C\xC9\xB7\x0F...' for column 'passwd' at row 2
Warning: #1366 Incorrect string value: '\xAFX\xFA 8\x85...' for column 'passwd' at row 3
Warning: #1366 Incorrect string value: '\xC0-\xA7\x89%\xDA...' for column 'passwd' at row 4
Warning: #1366 Incorrect string value: '\xFEw\x89\xE0\x83...' for column 'passwd' at row 5
Warning: #1366 Incorrect string value: '\xFA\xD5d\xAB\xB7\xE1...' for column 'passwd' at row 6
Warning: #1366 Incorrect string value: '\xBDG\x1D\x09n\xF9...' for column 'passwd' at row 7
Warning: #1366 Incorrect string value: '\xFF\x1A\xEC`\x94\x9D...' for column 'passwd' at row 8
Warning: #1366 Incorrect string value: '\xFB\xF5\xEF\xB6T\x1B...' for column 'passwd' at row 9

Посмотрите в 50.32, возможно там кирилица в паролях, надо убрать.


Название: Re: Переход с 50.32 на +
Отправлено: Efendy от 08 Декабря 2020, 00:33:35
Да, видно, что бока скорее всего в кириллических паролях. Биллингу пофик на самом деле. Просто mysql разных версий и/или кодировок не хочет корректно их преобразовывать. Если паролей не много, я бы вручную проблемные перенес. Если много, то можно на старом сервере преобразовать пароли и уже тогда экспортировать всю базу в файл.


Название: Re: Переход с 50.32 на +
Отправлено: Jovani от 11 Декабря 2020, 08:58:24
А как найти все проблемные? Или исключить их с запроса.


Название: Re: Переход с 50.32 на +
Отправлено: Efendy от 12 Декабря 2020, 15:36:17
Попробуй так:
Код:
SELECT id, name FROM users WHERE AES_DECRYPT(passwd, 'hardpass') IS NULL;


Название: Re: Переход с 50.32 на +
Отправлено: Jovani от 22 Декабря 2020, 11:29:37
Спасибо, исправил всех.
Но есть такие что в билинге нет, а вот в базе они присутствуют.


Название: Re: Переход с 50.32 на +
Отправлено: Efendy от 22 Декабря 2020, 20:28:52
это нормально, это служебные записи


Название: Re: Переход с 50.32 на +
Отправлено: goletsa от 12 Января 2021, 20:53:18
Подскажите, при миграции хочу добавить одну из функций от ND+, но не удается.

Код:
DROP FUNCTION IF EXISTS strSplit;
CREATE FUNCTION strSplit(x MEDIUMTEXT, delim MEDIUMTEXT, pos int) RETURNS MEDIUMTEXT
RETURN
    TRIM(BOTH '\r' FROM TRIM(
    REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1), delim, '')
));

Код:
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

Отключить логирование не хочется, хочу сделать master-slave рекпликацию в перспективе, а это вроде как требует активные логи.


Название: Re: Переход с 50.32 на +
Отправлено: Efendy от 13 Января 2021, 01:23:00
Попробуй сначала выполнить:
Код:
DELIMITER $$
а после выполнения твоего sql выполнить:
Код:
$$
DELIMITER ;


Название: Re: Переход с 50.32 на +
Отправлено: goletsa от 19 Января 2021, 12:42:35
Попробуй сначала выполнить:
Код:
DELIMITER $$
а после выполнения твоего sql выполнить:
Код:
$$
DELIMITER ;

Такая же ошибка.
Код:
root@localhost [db]> DROP FUNCTION IF EXISTS strSplit;
Query OK, 0 rows affected (0.02 sec)

root@localhost [db]> DELIMITER $$
root@localhost [db]> CREATE FUNCTION strSplit(x MEDIUMTEXT, delim MEDIUMTEXT, pos int) RETURNS MEDIUMTEXT
    -> RETURN
    ->     TRIM(BOTH '\r' FROM TRIM(
    ->     REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1), delim, '')
    -> ));
    ->
    -> $$
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
root@localhost [db]> DELIMITER ;

Относительно работает если явно указать что это DETERMINISTIC например, но я не знаю насколько правильно так делать для этой функции.
Код:
DROP FUNCTION IF EXISTS strSplit;
CREATE FUNCTION strSplit(x MEDIUMTEXT, delim MEDIUMTEXT, pos int) RETURNS MEDIUMTEXT
DETERMINISTIC
RETURN
    TRIM(BOTH '\r' FROM TRIM(
    REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1), delim, '')
));

Ну и функция не то чтобы прямо моя, взята отсюда http://nodeny.com.ua/wiki/index.php/Radius_%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D1%8B



Название: Re: Переход с 50.32 на +
Отправлено: Efendy от 20 Января 2021, 00:56:08
Цитировать
Подпрограмма считается “deterministic”, если она всегда дает один и тот же результат для одних и тех же входных параметров, и “not deterministic” в противном случае
Т.е ты правильно указал DETERMINISTIC