Spec-Zone .ru
спецификации, руководства, описания, API

6.3.7.2. SHA 256 Плагинов Аутентификации

С MySQL 5.6.6 MySQL обеспечивает плагин аутентификации, который реализует SHA 256 хеширований для паролей учетной записи пользователя. Следующая таблица показывает сменные имена на сторонах сервера и сторонах клиента.

Таблица 6.10. MySQL SHA 256 Плагинов Аутентификации

Серверное имя плагина sha256_password
Клиентское имя плагина sha256_password
Имя объектного файла библиотеки Ни один (плагины встраиваются),

Сторона сервера sha256_password плагин встраивается в сервер, не должен быть загружен явно, и не может быть отключен, разгружая его. Точно так же клиенты не должны определить расположение клиентского плагина.

Отметить

Использование sha256_password плагин требует, чтобы MySQL был создан с возможностями SSL. См. Раздел 6.3.9, "Используя SSL для Безопасных Соединений".

Чтобы установить учетную запись, которая использует SHA 256 хеширующих паролей, используйте следующую процедуру.

  1. Создайте учетную запись и определите, что она аутентифицирует использование sha256_password плагин:

    CREATE USER 'sha256user'@'localhost' IDENTIFIED WITH sha256_password;
  2. Установите old_passwords системная переменная к 2, чтобы выбрать SHA 256 хеширований пароля представляет в виде строки PASSWORD() функция;

    SET old_passwords = 2;
  3. Установите пароль учетной записи:

    SET PASSWORD FOR 'sha256user'@'localhost' = PASSWORD('sha256P@ss');

Альтернативно, запустите сервер с набора плагина аутентификации значения по умолчанию к sha256_password. Например, поместите эти строки в файл параметра сервера:

[mysqld]default-authentication-plugin=sha256_password

Это вызывает sha256_password плагин, который будет использоваться по умолчанию для новых учетных записей и наборов old_passwords к 2. В результате возможно установить пароль во время создания учетной записи с CREATE USER оператор:

mysql> CREATE USER 'sha256user2'@'localhost'
        IDENTIFIED BY 'sha256P@ss2';Query OK, 0 rows affected (0.06 sec)

В этом случае сервер присваивается sha256_password плагин к учетной записи и шифрует пароль, используя SHA 256. (Другое последствие - то, что, чтобы создать учетную запись, которая использует различный плагин аутентификации, следует определить тот плагин в CREATE USER оператор, затем набор old_passwords соответственно для плагина перед использованием SET PASSWORD установить пароль учетной записи.)

Если old_passwords имеет значение кроме 2, ошибка происходит для попыток установить пароль для учетной записи, которая требует SHA 256 паролей:

mysql> SET old_passwords = 0;mysql> SET PASSWORD FOR 'sha256user'@'localhost' = PASSWORD('sha256P@ss');ERROR 1827 (HY000): The password hash doesn't have the expected format.Check if the correct password algorithm is being used with thePASSWORD() function.

Для получения дополнительной информации о old_passwords и PASSWORD(), см. Раздел 5.1.4, "Системные Переменные Сервера", и Раздел 12.13, "Шифрование и Функции Сжатия".

Учетные записи в mysql.user таблица, которые используют SHA 256 паролей, может быть идентифицирована как строки с 'sha256_password' в plugin столбец и SHA 256 хэшей пароля в authentication_string столбец.

MySQL может быть создан или с yaSSL или с OpenSSL и sha256_password сменные работы с дистрибутивами, созданными, используя любой пакет. Значение по умолчанию должно использовать yaSSL. Если MySQL создается, используя OpenSSL вместо этого, шифрование RSA доступно и sha256_password реализует дополнительные возможности в следующем списке. (Чтобы включить этим возможностям, следует также следовать за процедурой конфигурации RSA, данной позже в этом разделе.)

Для клиентов, которые используют sha256_password плагин, пароли никогда не представляются как открытый текст, соединяясь с сервером. То, как передача пароля происходит, зависит от того, используется ли соединение SSL и доступно ли шифрование RSA:

Как упомянуто ранее, шифрование пароля RSA доступно, только если MySQL был создан, используя OpenSSL. Импликация для дистрибутивов MySQL, созданных, используя yaSSL, - то, что SHA, 256 паролей могут использоваться только, когда клиенты получают доступ к серверу, используя соединение SSL. Для получения информации о соединении с сервером, используя SSL, см. Раздел 6.3.9, "Используя SSL для Безопасных Соединений".

Предполагая, что MySQL был создан с OpenSSL, следующая процедура описывает, как включить шифрованию RSA паролей во время клиентского процесса соединения:

  1. Создайте файлы с открытым ключом и с закрытым ключом RSA. Выполните эти команды в то время как зарегистрировано в системную учетную запись, используемую, чтобы выполнить сервер MySQL, таким образом, файлы будут принадлежать той учетной записи:

    openssl genrsa -out mykey.pem 1024openssl rsa -in mykey.pem -pubout > mykey.pub
  2. Установите режимы доступа для файлов ключей. Закрытый ключ должен быть читаемым только сервером:

    chmod 400 mykey.pem

    Открытый ключ может быть свободно распределен клиентским пользователям:

    chmod 444 mykey.pub
  3. В файле параметра сервера сконфигурируйте соответствующие системные переменные с именами файлов ключей. Если Вы помещаете файлы в каталог серверных данных, Вы не должны определить их имена полного пути:

    [mysqld]sha256_password_private_key_path=mykey.pemsha256_password_public_key_path=mykey.pub

    Если файлы не находятся в каталоге данных, или сделать их расположения явными в значениях опции, используйте имена полного пути:

    [mysqld]sha256_password_private_key_path=/usr/local/mysql/mykey.pemsha256_password_public_key_path=/usr/local/mysql/mykey.pub
  4. Перезапустите сервер, затем соединитесь с ним и проверьте Rsa_public_key значение переменной состояния. Значение будет отличаться от того показанного здесь, но должно быть непустым:

    mysql> SHOW STATUS LIKE
                        'Rsa_public_key'\G*************************** 1. row ***************************Variable_name: Rsa_public_key        Value: -----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDO9nRUDd+KvSZgY7cNBZMNpwX6MvE1PbJFXO7u18nJ9lwc99Du/E7lw6CVXw7VKrXPeHbVQUzGyUNkf45Nz/ckaaJaaLgJOBCIDmNVnyU54OT/1lcs2xiyfaDMe8fCJ64ZwTnKbY2gkt1IMjUAB5Ogd5kJg8aV7EtKwyhHb0c30QIDAQAB-----END PUBLIC KEY-----

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

После того, как сервер был сконфигурирован с файлами ключей RSA, клиенты могут соединиться с ним использующий учетные записи, которые аутентифицируют с sha256_password плагин. Как упомянуто ранее, такие учетные записи могут использовать любого соединение SSL (когда RSA не используется), или простое соединение, которое шифрует пароль, используя RSA. Предположите для следующего обсуждения, что SSL не используется. Соединение с сервером не включает специальной подготовки на стороне клиента. Например:

shell> mysql -u sha256user -pEnter password: sha256P@ss

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

Сервер отправляет открытый ключ клиенту как необходимый, но если копия открытого ключа RSA доступна на хосте клиента, клиент может использовать это, чтобы сохранить цикл обработки в клиент-серверном протоколе:

shell> mysql -u sha256user -p
        --server-public-key-path=file_name

Значение с открытым ключом в файле, названном --server-public-key-path опция должна быть тем же самым как значением ключа в серверном файле, названном sha256_password_public_key_path системная переменная. Если файл ключей содержит допустимое значение с открытым ключом, но значение является неправильным, ошибка доступа запрещен происходит. Если файл ключей не содержит допустимый открытый ключ, клиентская программа не может использовать его. В этом случае сервер отправляет открытый ключ клиенту как будто нет --server-public-key-path опция была определена.

Клиентские пользователи могут получить открытый ключ RSA два пути: