Spec-Zone.ru › MySQL 8.4

14.13 Функции шифрования и сжатия

Таблица 14.18 Функции шифрования

Таблица 14.18 Функции шифрования
Имя Описание
AES_DECRYPT() Дешифрование с использованием AES
AES_ENCRYPT() Шифрование с использованием AES
COMPRESS() Возвращает результат в виде двоичной строки
MD5() Вычисление контрольной суммы MD5
RANDOM_BYTES() Возвращает вектор случайных байтов
SHA1(), SHA() Вычисление 160-битной контрольной суммы SHA-1
SHA2() Вычисление контрольной суммы SHA-2
STATEMENT_DIGEST() Вычисление значения хеша дайджеста запроса
STATEMENT_DIGEST_TEXT() Вычисление нормализованного дайджеста запроса
UNCOMPRESS() Разархивировать строку, сжатую ранее
UNCOMPRESSED_LENGTH() Возвращает длину строки до сжатия
VALIDATE_PASSWORD_STRENGTH() Определение силы пароля

Многие функции шифрования и сжатия возвращают строки, результат которых может содержать произвольные байты. Если вы хотите сохранить эти результаты, используйте столбец с типом данных бинарной строки VARBINARY или BLOB. Это предотвращает возможные проблемы с удалением хвостовых пробелов или преобразованием кодовой страницы, которые изменили бы значения данных, например, если вы используете небинарный тип данных строки (CHAR, VARCHAR, TEXT).

Некоторые функции шифрования возвращают строки ASCII-символов: MD5(), SHA(), SHA1(), SHA2(), STATEMENT_DIGEST(), STATEMENT_DIGEST_TEXT(). Их возвращаемое значение — строка, набор символов и сортировка которой определяются системными переменными character_set_connection и collation_connection. Это небинарная строка, если набор символов не binary.

Если приложение хранит значения из функции, такой как MD5() или SHA1(), которая возвращает строку шестнадцатеричных цифр, для более эффективного хранения и сравнения можно преобразовать шестнадцатеричное представление в двоичное с помощью UNHEX() и сохранить результат в столбце типа BINARY(N). Каждая пара шестнадцатеричных цифр требует одного байта в двоичном формате, поэтому значение N зависит от длины шестнадцатеричной строки. N составляет 16 для значения MD5() и 20 для значения SHA1(). Для SHA2(), N изменяется от 28 до 32 в зависимости от аргумента, определяющего желаемую разрядность результата.

Штраф за размер хранения шестнадцатеричной строки в столбце типа CHAR составляет, по меньшей мере, вдвое, а до восьми раз, если значение хранится в столбце, использующем набор символов utf8mb4 (где каждый символ использует 4 байта). Хранение строки также приводит к более медленным сравнениям из-за больших значений и необходимости учитывать правила набора символов и сортировки.

Предположим, что приложение сохраняет строковые значения MD5() в столбце типа CHAR(32):

CREATE TABLE md5_tbl (md5_val CHAR(32), ...);
INSERT INTO md5_tbl (md5_val, ...) VALUES(MD5('abcdef'), ...);

Для преобразования шестнадцатеричных строк в более компактную форму измените приложение на использование UNHEX() и BINARY(16) следующим образом:

CREATE TABLE md5_tbl (md5_val BINARY(16), ...);
INSERT INTO md5_tbl (md5_val, ...) VALUES(UNHEX(MD5('abcdef')), ...);

Приложения должны быть готовы к редкому случаю, когда функция хеширования генерирует одинаковое значение для двух различных входных значений. Один способ сделать обнаружение коллизий возможным — сделать столбец хеша первичным ключом.

Примечание

Стало известно об уязвимостях алгоритмов MD5 и SHA-1. Возможно, вы захотите вместо этого использовать другую одностороннюю функцию шифрования, описанную в этом разделе, например, SHA2().

Предупреждение

Пароли или другие конфиденциальные значения, передаваемые в качестве аргументов функциям шифрования, отправляются на сервер MySQL в виде открытого текста, если не используется подключение SSL. Кроме того, такие значения отображаются во всех журналах MySQL, в которые они записываются. Чтобы избежать таких случаев раскрытия, приложения могут шифровать конфиденциальные значения на стороне клиента перед отправкой на сервер. Те же соображения относятся к ключам шифрования. Чтобы избежать раскрытия, приложения могут использовать хранимые процедуры для шифрования и дешифрования значений на стороне сервера.

  • AES_DECRYPT(crypt_str,key_str[,init_vector][,kdf_name][,salt][,info | iterations])

    Эта функция расшифровывает данные с использованием официального алгоритма AES (Advanced Encryption Standard). Дополнительную информацию см. в описании AES_ENCRYPT().

    Операторы, использующие AES_DECRYPT(), небезопасны для репликации на основе операторов.

  • AES_ENCRYPT(str,key_str[,init_vector][,kdf_name][,salt][,info | iterations])

    AES_ENCRYPT() и AES_DECRYPT() реализуют шифрование и дешифрование данных с использованием официального алгоритма AES (Advanced Encryption Standard), ранее известного как “Rijndael”. Стандарт AES допускает различные длины ключей. По умолчанию эти функции реализуют AES с длиной ключа 128 бит. Можно использовать длины ключей 196 или 256 бит, как описано ниже. Длина ключа представляет собой компромисс между производительностью и безопасностью.

    AES_ENCRYPT() шифрует строку str с использованием строки ключа key_str и возвращает двоичную строку, содержащую зашифрованный результат. AES_DECRYPT() дешифрует зашифрованную строку crypt_str с использованием строки ключа key_str и возвращает исходную (двоичную) строку в шестнадцатеричном формате. (Чтобы получить строку в виде открытого текста, приведите результат к типу CHAR. В качестве альтернативы, запустите клиент mysql с параметром --skip-binary-as-hex, чтобы все двоичные значения отображались как текст.) Если любой из аргументов функций имеет значение NULL, функция возвращает NULL. Если AES_DECRYPT() обнаружит неверные данные или некорректную обработку, она возвращает NULL. Однако AES_DECRYPT() может вернуть значение, отличное от NULL (возможно, мусор), если входные данные или ключ неверны.

    Эти функции поддерживают использование функции вывода ключа (KDF) для создания криптографически надёжного секретного ключа из информации, переданной в key_str. Полученный ключ используется для шифрования и дешифрования данных, и он хранится в экземпляре MySQL Server, и пользователям он недоступен. Использование KDF настоятельно рекомендуется, так как оно обеспечивает лучшую безопасность, чем указание собственного заранее созданного ключа или его вычисление более простым способом, когда вы используете функцию. Функции поддерживают HKDF (доступна в OpenSSL 1.1.0), для которой вы можете указать необязательный соль и контекстно-специфическую информацию для включения в материал ключа, и PBKDF2 (доступна в OpenSSL 1.0.2), для которой вы можете указать необязательный соль и установить количество итераций, используемых для получения ключа.

    AES_ENCRYPT() и AES_DECRYPT() позволяют управлять режимом блочного шифрования. Переменная системы block_encryption_mode управляет режимом для алгоритмов блочного шифрования. Её значение по умолчанию равно aes-128-ecb, что обозначает шифрование с использованием длины ключа 128 бит и режимом ECB. Описание разрешённых значений этой переменной см. в разделе 7.1.8 «Переменные системы сервера». Необязательный аргумент init_vector используется для предоставления вектора инициализации для режимов блочного шифрования, которые его требуют.

    Операторы, использующие AES_ENCRYPT() или AES_DECRYPT(), небезопасны для репликации на основе операторов.

    Если AES_ENCRYPT() вызывается из клиента mysql, двоичные строки отображаются с использованием шестнадцатеричной нотации, в зависимости от значения параметра --binary-as-hex. Дополнительную информацию об этом параметре см. в разделе 6.5.1 «mysql — Клиент командной строки MySQL».

    Аргументы функций AES_ENCRYPT() и AES_DECRYPT() следующие:

  • str

    Строка для AES_ENCRYPT() для шифрования с использованием строки ключа key_str или ключа, полученного из неё с помощью указанной функции вывода ключа (KDF). Строка может быть любой длины. Заполнение автоматически добавляется к str, чтобы оно было кратно блоку, как требуется алгоритмами, основанными на блоках, такими как AES. Это заполнение автоматически удаляется функцией AES_DECRYPT().

    crypt_str

    Зашифрованная строка для AES_DECRYPT() для расшифровки с использованием строки ключа key_str или ключа, полученного из неё с помощью указанной функции вывода ключа (KDF). Строка может быть любой длины. Длина crypt_str может быть вычислена по длине исходной строки по формуле:

    16 * (trunc(string_length / 16) + 1)
    
    key_str

    Ключ шифрования или входные данные, используемые в качестве основы для вывода ключа с помощью функции вывода ключа (KDF). Для одного и того же набора данных используйте одно и то же значение key_str для шифрования с помощью AES_ENCRYPT() и расшифровки с помощью AES_DECRYPT().

    Если вы используете KDF, key_str может быть любой произвольной информацией, например, паролем или фразой. В последующих аргументах функции вы указываете имя KDF, а затем добавляете дополнительные параметры для повышения безопасности в соответствии с KDF.

    При использовании KDF функция создаёт криптографически сильный секретный ключ из информации, переданной в key_str, а также из любого соли или дополнительной информации, которую вы предоставляете в других аргументах. Полученный ключ используется для шифрования и расшифровки данных, и он сохраняется в экземпляре MySQL Server и недоступен пользователям. Использование KDF крайне рекомендуется, так как оно обеспечивает большую безопасность, чем указание собственного готового ключа или вывод его более простым способом, как вы используете функцию.

    Если вы не используете KDF, для длины ключа 128 бит наиболее безопасный способ передачи ключа в аргумент key_str заключается в создании истинно случайного значения 128 бит и передаче его как двоичного значения. Например:

    INSERT INTO t
    VALUES (1,AES_ENCRYPT('text',UNHEX('F3229A0B371ED2D9441B830D21A390C3')));
    

    Для создания ключа AES можно использовать фразу, хешируя её. Например:

    INSERT INTO t
    VALUES (1,AES_ENCRYPT('text', UNHEX(SHA2('My secret passphrase',512))));
    

    Если вы превысите максимальную длину ключа 128 бит, возвращается предупреждение. Если вы не используете KDF, не передавайте пароль или фразу напрямую в key_str, сначала хешируйте их. Предыдущие версии этого документа предлагали первый подход, но он больше не рекомендуется, так как показанные здесь примеры более безопасны.

    init_vector

    Вектор инициализации для режимов шифрования блоков, которые его требуют. Переменная системы block_encryption_mode управляет режимом. Для одного и того же набора данных используйте одно и то же значение init_vector для шифрования с помощью AES_ENCRYPT() и расшифровки с помощью AES_DECRYPT().

    Примечание

    Если вы используете KDF, вы должны указать вектор инициализации или пустую строку для этого аргумента, чтобы получить доступ к последующим аргументам для определения KDF.

    Для режимов, требующих вектора инициализации, он должен быть 16 байтами или длиннее (байты сверх 16 игнорируются). Возникает ошибка, если init_vector отсутствует. Для режимов, которые не требуют вектора инициализации, он игнорируется, и генерируется предупреждение, если init_vector указан, если вы не используете KDF.

    Значение по умолчанию для переменной системы block_encryption_mode равно aes-128-ecb или режиму ECB, который не требует вектора инициализации. Альтернативные разрешенные режимы шифрования блоков CBC, CFB1, CFB8, CFB128 и OFB все требуют вектора инициализации.

    Случайную строку байтов для использования в качестве вектора инициализации можно сгенерировать, вызвав RANDOM_BYTES(16).

    kdf_name

    Название функции вывода ключа (KDF) для создания ключа из входных данных, переданных в key_str, и других аргументов, соответствующих KDF. Необязательно.

    Для одного и того же набора данных используйте одно и то же значение kdf_name для шифрования с помощью AES_ENCRYPT() и расшифровки с помощью AES_DECRYPT(). При указании kdf_name необходимо указать init_vector, используя либо допустимый вектор инициализации, либо пустую строку, если режим шифрования не требует вектора инициализации.

    Поддерживаются следующие значения:

    hkdf

    HKDF, доступная с OpenSSL 1.1.0. HKDF извлекает псевдослучайный ключ из исходных данных, а затем расширяет его в дополнительные ключи. С HKDF вы можете указать необязательный соль (salt) и контекстно-специфическую информацию, например, данные приложения (info), для включения в исходные данные.

    pbkdf2_hmac

    PBKDF2, доступная с OpenSSL 1.0.2. PBKDF2 применяет псевдослучайную функцию к исходным данным и повторяет этот процесс большое количество раз для получения ключа. С PBKDF2 вы можете указать необязательный соль (salt) для включения в исходные данные и задать количество итераций для получения ключа (iterations).

    В этом примере HKDF указана как функция вывода ключа, и предоставлены соль и контекстная информация. Аргумент для вектора инициализации включён, но пустой строкой:

    SELECT AES_ENCRYPT('mytext','mykeystring', '', 'hkdf', 'salt', 'info');
    

    В этом примере PBKDF2 указана как функция вывода ключа, предоставлена соль, и количество итераций удвоено по сравнению с рекомендуемым минимумом:

    SELECT AES_ENCRYPT('mytext','mykeystring', '', 'pbkdf2_hmac','salt', '2000');
    
    salt

    Соль, передаваемая функции вывода ключа (KDF). Необязательно. Как HKDF, так и PBKDF2 могут использовать соль, и их использование рекомендуется для предотвращения атак, основанных на словарях общих паролей или таблицах радуг.

    Соль состоит из случайных данных, которые для безопасности должны отличаться для каждой операции шифрования. Случайную строку байтов для использования в качестве соли можно сгенерировать, вызвав RANDOM_BYTES(). Этот пример генерирует соль длиной 64 бита:

    SET @salt = RANDOM_BYTES(8);
    

    Для одного и того же набора данных используйте одно и то же значение salt для шифрования с помощью AES_ENCRYPT() и расшифровки с помощью AES_DECRYPT(). Соль можно безопасно хранить вместе с зашифрованными данными.

    info

    Контекстно-специфическая информация для HKDF для включения в исходные данные, такие как информация об приложении. Необязательно; доступно при указании hkdf как имени KDF. HKDF добавляет эту информацию к исходным данным, указанным в key_str, и соли, указанной в salt, для создания ключа.

    Для одного и того же набора данных используйте одно и то же значение info для шифрования с помощью AES_ENCRYPT() и расшифровки с помощью AES_DECRYPT().

    iterations

    Количество итераций для PBKDF2 при создании ключа. Необязательно; доступно при указании pbkdf2_hmac как имени KDF. Более высокое значение обеспечивает большую устойчивость к атакам методом перебора, потому что для злоумышленника это более вычислительно затратно, но то же самое обязательно верно и для процесса вывода ключа. Значение по умолчанию, если вы не указали этот аргумент, равно 1000, что является минимальным рекомендуемым значением по стандарту OpenSSL.

    Для одного и того же набора данных используйте одно и то же значение iterations для шифрования с помощью AES_ENCRYPT() и расшифровки с помощью AES_DECRYPT().

    mysql> SET block_encryption_mode = 'aes-256-cbc';
    mysql> SET @key_str = SHA2('My secret passphrase',512);
    mysql> SET @init_vector = RANDOM_BYTES(16);
    mysql> SET @crypt_str = AES_ENCRYPT('text',@key_str,@init_vector);
    mysql> SELECT CAST(AES_DECRYPT(@crypt_str,@key_str,@init_vector) AS CHAR);
    +-------------------------------------------------------------+
    | CAST(AES_DECRYPT(@crypt_str,@key_str,@init_vector) AS CHAR) |
    +-------------------------------------------------------------+
    | text                                                        |
    +-------------------------------------------------------------+
    
  • COMPRESS(string_to_compress)

    Сжимает строку и возвращает результат в виде двоичной строки. Эта функция требует, чтобы MySQL был скомпилирован с библиотекой сжатия, такой как zlib. В противном случае возвращаемое значение всегда равно NULL. Возвращаемое значение также равно NULL, если string_to_compress равно NULL. Сжатую строку можно разархивировать с помощью UNCOMPRESS().

    mysql> SELECT LENGTH(COMPRESS(REPEAT('a',1000)));
            -> 21
    mysql> SELECT LENGTH(COMPRESS(''));
            -> 0
    mysql> SELECT LENGTH(COMPRESS('a'));
            -> 13
    mysql> SELECT LENGTH(COMPRESS(REPEAT('a',16)));
            -> 15
    

    Содержимое сжатой строки хранится следующим образом:

    • Пустые строки хранятся как пустые строки.

    • Непустые строки хранятся как 4-байтовый размер несжатой строки (старший байт — первый), за которым следует сжатая строка. Если строка оканчивается пробелом, добавляется дополнительный . символ, чтобы избежать проблем с обрезкой конечных пробелов, если результат будет сохранён в столбце типа CHAR или VARCHAR. (Однако использование недвоичных типов данных строк, таких как CHAR или VARCHAR, для хранения сжатых строк не рекомендуется, так как может произойти преобразование набора символов. Используйте столбец бинарного типа VARBINARY или BLOB вместо этого.)

    Если COMPRESS() вызывается из клиента mysql, двоичные строки отображаются в шестнадцатеричном формате в зависимости от значения --binary-as-hex. Дополнительную информацию об этом параметре см. в Разделе 6.5.1, «mysql — Клиентская программа командной строки MySQL».

  • MD5(str)

    Вычисляет контрольную сумму MD5 длиной 128 бит для строки. Значение возвращается в виде строки из 32 шестнадцатеричных цифр или NULL, если аргумент был NULL. Возвращаемое значение, например, может использоваться в качестве ключа хеширования. См. примечания в начале этого раздела о том, как эффективно хранить значения хешей.

    Возвращаемое значение — строка в наборе символов соединения.

    Если режим FIPS включен, MD5() возвращает NULL. См. Раздел 8.8, «Поддержка FIPS».

    mysql> SELECT MD5('testing');
            -> 'ae2b1fca515949e5d54fb22b8ed95575'
    

    Это “алгоритм MD5 для вычисления дайджеста сообщения (RSA Data Security, Inc.)”.

    См. примечание относительно алгоритма MD5 в начале этого раздела.

  • RANDOM_BYTES(len)

    Эта функция возвращает двоичную строку из len случайных байтов, сгенерированных с помощью генератора случайных чисел библиотеки SSL. Допустимые значения для len находятся в диапазоне от 1 до 1024. При значениях вне этого диапазона возникает ошибка. Возвращает NULL, если len равно NULL.

    RANDOM_BYTES() может использоваться для предоставления начального вектора для функций AES_DECRYPT() и AES_ENCRYPT(). Для использования в этом контексте len должно быть по крайней мере 16. Допускаются и более крупные значения, но байты сверх 16 игнорируются.

    RANDOM_BYTES() генерирует случайное значение, что делает ее результат не детерминированным. Следовательно, операторы, использующие эту функцию, небезопасны для репликации на основе операторов.

    Если RANDOM_BYTES() вызывается из клиента mysql, двоичные строки отображаются в шестнадцатеричном формате в зависимости от значения --binary-as-hex. Дополнительную информацию об этом параметре см. в Разделе 6.5.1, «mysql — Клиентская программа командной строки MySQL».

  • SHA1(str), SHA(str)

    Вычисляет контрольную сумму SHA-1 длиной 160 бит для строки, как описано в RFC 3174 (алгоритм безопасного хеширования). Значение возвращается в виде строки из 40 шестнадцатеричных цифр или NULL, если аргумент является NULL. Одно из возможных применений этой функции — в качестве ключа хеширования. См. примечания в начале этого раздела о том, как эффективно хранить значения хешей. SHA() является синонимом SHA1().

    Возвращаемое значение — строка в наборе символов соединения.

    mysql> SELECT SHA1('abc');
            -> 'a9993e364706816aba3e25717850c26c9cd0d89d'
    

    SHA1() можно считать более безопасной с криптографической точки зрения альтернативой MD5(). Однако см. примечание относительно алгоритмов MD5 и SHA-1 в начале этого раздела.

  • SHA2(str, hash_length)

    Вычисляет семейство хеш-функций SHA-2 (SHA-224, SHA-256, SHA-384 и SHA-512). Первый аргумент — строка открытого текста, которую нужно хешировать. Второй аргумент указывает желаемую длину результата в битах, которая должна иметь значение 224, 256, 384, 512 или 0 (что эквивалентно 256). Если любой из аргументов NULL или длина хеша не соответствует одному из разрешенных значений, возвращаемое значение равно NULL. В противном случае результатом функции является значение хеша, содержащее желаемое количество бит. См. примечания в начале этого раздела о том, как эффективно хранить значения хешей.

    Возвращаемое значение — строка в наборе символов соединения.

    mysql> SELECT SHA2('abc', 224);
            -> '23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7'
    

    Эта функция работает только в том случае, если MySQL был настроен с поддержкой SSL. См. Раздел 8.3, «Использование защищённых соединений».

    SHA2() можно считать криптографически более безопасной, чем MD5() или SHA1().

  • STATEMENT_DIGEST(statement)

    Принимая SQL-запрос в виде строки, возвращает значение хеша дайджеста запроса в виде строки в наборе символов соединения или NULL, если аргумент является NULL. Связанная функция STATEMENT_DIGEST_TEXT() возвращает нормализованный дайджест запроса. Дополнительную информацию о дайджестах запросов см. в Разделе 29.10, «Дайджесты и выборка запросов Performance Schema».

    Обе функции используют синтаксический анализатор MySQL для анализа запроса. При неудачном анализе возникает ошибка. Сообщение об ошибке включает ошибку анализа только в том случае, если запрос предоставлен в виде литеральной строки.

    Переменная системы max_digest_length определяет максимальное количество байтов, доступных для этих функций для вычисления нормализованных дайджестов запросов.

    mysql> SET @stmt = 'SELECT * FROM mytable WHERE cola = 10 AND colb = 20';
    mysql> SELECT STATEMENT_DIGEST(@stmt);
    +------------------------------------------------------------------+
    | STATEMENT_DIGEST(@stmt)                                          |
    +------------------------------------------------------------------+
    | 3bb95eeade896657c4526e74ff2a2862039d0a0fe8a9e7155b5fe492cbd78387 |
    +------------------------------------------------------------------+
    mysql> SELECT STATEMENT_DIGEST_TEXT(@stmt);
    +----------------------------------------------------------+
    | STATEMENT_DIGEST_TEXT(@stmt)                             |
    +----------------------------------------------------------+
    | SELECT * FROM `mytable` WHERE `cola` = ? AND `colb` = ?  |
    +----------------------------------------------------------+
    
  • STATEMENT_DIGEST_TEXT(statement)

    Принимая SQL-запрос в виде строки, возвращает нормализованный дайджест запроса в виде строки в наборе символов соединения или NULL, если аргумент является NULL. Дополнительные обсуждения и примеры см. в описании связанной функции STATEMENT_DIGEST().

  • UNCOMPRESS(string_to_uncompress)

    Разархивирует строку, сжатую функцией COMPRESS(). Если аргумент не является сжатым значением, результат равен NULL; если string_to_uncompress равно NULL, результат также равен NULL. Эта функция требует, чтобы MySQL был скомпилирован с библиотекой сжатия, такой как zlib. В противном случае возвращаемое значение всегда равно NULL.

    mysql> SELECT UNCOMPRESS(COMPRESS('any string'));
            -> 'any string'
    mysql> SELECT UNCOMPRESS('any string');
            -> NULL
    
  • UNCOMPRESSED_LENGTH(compressed_string)

    Возвращает длину сжатой строки до сжатия. Возвращает NULL, если compressed_string равно NULL.

    mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));
            -> 30
    
  • VALIDATE_PASSWORD_STRENGTH(str)

    Принимая на вход строку с паролем, эта функция возвращает целое число, указывающее силу пароля, или NULL, если аргумент является NULL. Значение возврата находится в диапазоне от 0 (слабый) до 100 (сильный).

    Оценка пароля функцией VALIDATE_PASSWORD_STRENGTH() выполняется компонентом validate_password. Если этот компонент не установлен, функция всегда возвращает 0. Для получения информации об установке validate_password, см. Раздел 8.4.3, «Компонент проверки паролей». Для проверки или настройки параметров, влияющих на тестирование паролей, проверьте или установите системные переменные, реализованные validate_password. См. Раздел 8.4.3.2, «Параметры и переменные проверки паролей».

    Пароль проходит все более строгие проверки, и возвращаемое значение отражает пройденные проверки, как показано в следующей таблице. Кроме того, если системная переменная validate_password.check_user_name включена, а пароль совпадает с именем пользователя, VALIDATE_PASSWORD_STRENGTH() возвращает 0 независимо от того, как настроены другие системные переменные validate_password.

    Тест пароля Значение возврата
    Длина < 4 0
    Длина ≥ 4 и < validate_password.length 25
    Удовлетворяет политике 1 (LOW) 50
    Удовлетворяет политике 2 (MEDIUM) 75
    Удовлетворяет политике 3 (STRONG) 100

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/encryption-functions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API