Spec-Zone .ru
спецификации, руководства, описания, API
|
MySQL обеспечивает плагин аутентификации, который реализует SHA 256 хеширований для паролей учетной записи пользователя. Следующая таблица показывает сменные имена на сторонах сервера и сторонах клиента.
Таблица 6.10. MySQL SHA 256 Плагинов Аутентификации
Серверное имя плагина | sha256_password |
Клиентское имя плагина | sha256_password |
Имя объектного файла библиотеки | Ни один (плагины встраиваются), |
Сторона сервера sha256_password
плагин встраивается в сервер, не должен быть
загружен явно, и не может быть отключен, разгружая его. Точно так же клиенты не должны определить расположение
клиентского плагина.
Использование sha256_password
плагин требует, чтобы MySQL был создан с
возможностями SSL. См. Раздел 6.3.9, "Используя SSL
для Безопасных Соединений".
Чтобы установить учетную запись, которая использует SHA 256 хеширующих паролей, используйте следующую процедуру.
Создайте учетную запись и определите, что она аутентифицирует использование sha256_password
плагин:
CREATE USER 'sha256user'@'localhost' IDENTIFIED WITH sha256_password;
Установите old_passwords
системная переменная к 2,
чтобы выбрать SHA 256 хеширований пароля представляет в виде строки PASSWORD()
функция;
SET old_passwords = 2;
Установите пароль учетной записи:
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, данной позже в этом
разделе.)
Для клиента возможно передать пароли к серверу, используя шифрование RSA во время клиентского процесса соединения, как описано позже.
Сервер представляет две дополнительных системных переменные, sha256_password_private_key_path
и sha256_password_public_key_path
. Это предназначается, что администратор
базы данных установит их в имена файлов с открытым ключом и с закрытым ключом RSA при запуске сервера.
Сервер представляет переменную состояния, Rsa_public_key
, это выводит на экран значение с открытым ключом RSA.
mysql
и mysqltest клиентские программы поддерживают a --server-public-key-path
опция для того, чтобы определить файл с открытым ключом RSA явно.
Для клиентов, которые используют sha256_password
плагин, пароли никогда не
представляются как открытый текст, соединяясь с сервером. То, как передача пароля происходит, зависит от того,
используется ли соединение SSL и доступно ли шифрование RSA:
Если соединение SSL используется, пароль отправляется как открытый текст, но не может шпиониться, потому что соединение шифруется, используя SSL.
Если соединение SSL не используется, но шифрование RSA доступно, пароль отправляется в пределах незашифрованного соединения, но пароль RSA-шифруется, чтобы предотвратить шпионение. Когда сервер получает пароль, он дешифрует это. Скремблирование используется в шифровании, чтобы предотвратить повторные атаки.
Если соединение SSL не используется, и шифрование RSA не доступно, sha256_password
плагин вызывает попытку подключения перестать работать,
потому что пароль не может быть отправлен, не будучи представленным как открытый текст.
Как упомянуто ранее, шифрование пароля RSA доступно, только если MySQL был создан, используя OpenSSL. Импликация для дистрибутивов MySQL, созданных, используя yaSSL, - то, что SHA, 256 паролей могут использоваться только, когда клиенты получают доступ к серверу, используя соединение SSL. Для получения информации о соединении с сервером, используя SSL, см. Раздел 6.3.9, "Используя SSL для Безопасных Соединений".
Предполагая, что MySQL был создан с OpenSSL, следующая процедура описывает, как включить шифрованию RSA паролей во время клиентского процесса соединения:
Создайте файлы с открытым ключом и с закрытым ключом RSA. Выполните эти команды в то время как зарегистрировано в системную учетную запись, используемую, чтобы выполнить сервер MySQL, таким образом, файлы будут принадлежать той учетной записи:
openssl genrsa -out mykey.pem 1024openssl rsa -in mykey.pem -pubout > mykey.pub
Установите режимы доступа для файлов ключей. Закрытый ключ должен быть читаемым только сервером:
chmod 400 mykey.pem
Открытый ключ может быть свободно распределен клиентским пользователям:
chmod 444 mykey.pub
В файле параметра сервера сконфигурируйте соответствующие системные переменные с именами файлов ключей. Если Вы помещаете файлы в каталог серверных данных, Вы не должны определить их имена полного пути:
[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
Перезапустите сервер, затем соединитесь с ним и проверьте 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 -p
Enter 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 два пути:
Администратор базы данных может обеспечить копию файла с открытым ключом.
Клиентский пользователь, который может соединить с сервером некоторый другой путь,
может использовать a SHOW STATUS LIKE 'Rsa_public_key'
оператор и сохраняет
возвращенное значение ключа в файле.