Recent changes to support better security by increasing strength of Diffie-Hellman cipher suites from 512-bit to 2048-bit were introduced to MySQL Server 5.7. While this change enhances security, it is an aggressive change in that 2048-bit DH ciphers are not universally supported. This has become a problem specifically for Java users, as only Java 8 JRE (currently) supports DH ciphers greater than 1024 bits. Making the problem more acute, this change was back-ported from MySQL Server 5.7 to the recent 5.6.26 and 5.5.45 releases in response to a community bug report. This blog post will identify affected applications, existing workarounds, and our plans to provide a more …
[Read more]Today, oCERT published advisory 2015-003 describing a TLS vulnerability in MySQL and derivative products. The content isn’t exactly news – it is documented legacy behavior and the subject of an earlier blog post describing how MySQL Server 5.7 solves the problem. That said, the efforts of Duo Security are certainly appreciated and welcomed – it provides a meaningful context to discuss how to properly harden existing MySQL 5.5 and 5.6 deployments, as well as frame a discussion on potential changes in these versions to increase security.
Vulnerability
The vulnerability described in the advisory relies on the legacy behavior of the client …
[Read more]
I’ve written previously about use cases where having accounts which cannot be used to establish client
connections are useful. There are various hacks to accomplish
this with legacy versions (insert invalid password hash into
mysql.user table, etc.), and we introduced the
mysql_no_login authentication
plugin for this very purpose. Now as of MySQL 5.7.6, account locking gets native support through
the ACCOUNT LOCK clause of CREATE USER
and ALTER USER commands. This post revisits the use
cases which drove this feature and the implementation
details.
Use Cases
Security …
[Read more]
Complimenting the expanded CREATE USER syntax introduced in
MySQL Server 5.7.6 is more useful ALTER USER
syntax. Before MySQL Server 5.7.6, ALTER USER
could only be used to expire a user’s password. That’s pretty
limited. With changes made in MySQL Server 5.7.6, a better
distinction is made between privilege-level attributes (those
which are managed via GRANT and REVOKE
statements) and account-level attributes (those managed using
CREATE USER and ALTER USER
statements). MySQL has a long history of confusing these –
for example, requiring a GRANT …
Prior to MySQL 5.7, the CREATE USER command had a
number of limitations:
- No way to set both authentication plugin and password
- No way to disable a user
- No way to define user resource limitations
- No way to set a non-default password expiration policy
- No way to require SSL/x509
All of these things could be done through other means, but
typically involved other statements, such as GRANT
commands. Starting with MySQL 5.7.6, these can all be done
through a new and improved CREATE USER syntax:
Passwords and authentication plugin
The most important aspect to me, from a security perspective, is the ability to now create user accounts with non-default authentication plugins (like sha256_password) and a non-blank password:
mysql> CREATE USER new@localhost
-> IDENTIFIED WITH sha256_password …
Mermaids have the same probability of fixing
your permission problems, but people continue believing in the
FLUSH PRIVILEGES myth.I see suggesting the usage of FLUSH
PRIVILEGES every time someone writes a tutorial or a
solution to a problem regarding creating a new account or
providing different privileges. For example, the top post on
/r/mysql
as of the writing of these lines, “MySQL:The user specified as a definer does not
exist (error 1449)-Solutions” has multiple guilty cases of
this (Update: the user has corrected those lines
after I posted this article).
It is not my intention to bash that post, but I have seen …
[Read more]Managing many hosts is quite challenging task. There are many tools to solve the problem. My favorite is pdsh.
Running a command across a set of hosts is as simple as following:
# pdsh -w 192.168.177.[201-208] -R ssh reboot
Together with dshbak (which is a part of pdsh package) you can do even cooler things. Like, check which systems have yum:
# pdsh -w 192.168.177.[201-208] -R ssh "which yum" | dshbak -c ---------------- 192.168.177.[201-203] ---------------- /usr/bin/yum
Or which systems run older version of MySQL
# pdsh -w 192.168.177.[201-208] -R ssh "mysql -e \"SHOW VARIABLES LIKE 'version'\"" | dshbak -c ---------------- 192.168.177.[201-203] ---------------- Variable_name Value version 5.6.19 ---------------- 192.168.177.[204-208] ---------------- Variable_name Value version 5.5.38
To make pdsh …
[Read more]At the end of September, the MySQL Connect 2012 conference will be held as part of Oracle OpenWorld in San Francisco. MySQL Connect is a two day event that allows attendees to focus on MySQL at a technical depth with presentations and interaction with many of the MySQL developers, engineers and other knowledgeable staff. There is also a range a international speakers to give broader knowledge to the presentations.
I am presenting a Hands-On Lab on Sunday 30th September 16:15 - 17:15 entitled HOL10474 - MySQL Security: Authentication and Auditing. The sessions goes through an introduction to the plugin API and how it can help expand the capabilities of MySQL. Since it is a hands-on lab, …
[Read more]MySQL Enterprise 5.5 (trial version available here) includes MySQL PAM authentication plugin. In this post I will show how to configure it with the OpenLDAP and Active Directory.
MySQL PAM authentication uses Linux pam_ldap library to send the calls. To configure MySQL LDAP authentication we will need to configure pam_ldap on linux.
OpenLDAP Linux configuration
- Make sure that libpam-ldap/openldap is installed. If not, on RedHat/CentOS use commands:
# yum install openldap openldap-clients
- Configure /etc/ldap.conf. Sample configuration:
debug 10 # set debug level only during the initial
configuration
base dc=corp,dc=company_name,dc=com
binddn cn=service_account,OU=Service Accounts,OU=US
Security,DC=corp,DC=company_name,DC=com
bindpw <password>
timelimit 120 …
Starting with MySQL 5.5.16 it is possible to setup a password-less connections from clients into MySQL server using Windows SSPI authentication framework. This functionality is provided by Windows Native Authentication (WNA) plugin distributed with the commercial version of 5.5.16 server. The client-side support for WNA authentication is built into the client library (libmysql) distributed with the community version of 5.5.16 server and requires no additional configuration. Clients which link to 5.5.16 or higher version of libmysql will be able to connect to MySQL accounts using WNA authentication out-of-the box.
For password-less connections to work, server's administrator must install the WNA plugin in the server and create user accounts which use this plugin for authentication. It is also possible to allow connections to existing MySQL accounts via a proxy WNA account. With this setup Windows clients can password-less connect to the …
[Read more]