Authentication Plugin - Unix Socket
MariaDB starting with 5.2.0
unix_socket authentication plugin allows the user to use operating system credentials when connecting to MariaDB via the local Unix socket file. This Unix socket file is defined by the
socket system variable.
The authentication plugin works by calling the
getsockopt system call with the
SO_PEERCRED socket option, which allows it to retrieve the
uid of the process that is connected to the socket. It is then able to get the user name associated with that
uid. Once it has the user name, it will authenticate the connecting user as the MariaDB account that has the same user name.
Disabling the Plugin
unix_socket authentication plugin is installed by default from MariaDB 10.4.3, as well as in new installs of Ubuntu 15.10 and later, and Debian. It can be disabled from MariaDB 10.4.3 by starting the server with the --disable-unix-socket option.
Installing the Plugin
In other systems, although the plugin's shared library is distributed with MariaDB by default as
auth_socket.so, the plugin is not actually installed by MariaDB by default. There are two methods that can be used to install the plugin with MariaDB.
INSTALL SONAME 'auth_socket';
The second method can be used to tell the server to load the plugin when it starts up. The plugin can be installed this way by providing the
--plugin-load or the
--plugin-load-add options. This can be specified as a command-line argument to
mysqld or it can be specified in a relevant server option group in an option file. For example:
[mariadb] ... plugin_load_add = auth_socket
Uninstalling the Plugin
UNINSTALL SONAME 'auth_socket';
If you installed the plugin by providing the
--plugin-load or the
--plugin-load-add options in a relevant server option group in an option file, then those options should be removed to prevent the plugin from being loaded the next time the server is restarted.
CREATE USER username@hostname IDENTIFIED VIA unix_socket;
GRANT SELECT ON db.* TO username@hostname IDENTIFIED VIA unix_socket;
Switching to Password-based Authentication
Sometimes Unix socket authentication does not meet your needs, so it can be desirable to switch a user account back to password-based authentication. This can easily be done by telling MariaDB to use another authentication plugin for the account by executing the
ALTER USER statement. The specific authentication plugin is specified with the
IDENTIFIED VIA clause. For example, if you wanted to switch to the
mysql_native_password authentication plugin, then you could execute:
ALTER USER root@localhost IDENTIFIED VIA mysql_native_password; SET PASSWORD = PASSWORD('foo');
Note that if your operating system has scripts that require password-less access to MariaDB, then this may break those scripts. You may be able to fix that by setting a password in the
[client] option group in your /root/.my.cnf option file. For example:
$ mysql -uroot MariaDB > CREATE USER serg IDENTIFIED VIA unix_socket; MariaDB > CREATE USER monty IDENTIFIED VIA unix_socket; MariaDB > quit Bye $ whoami serg $ mysql --user=serg Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.2.0-MariaDB-alpha-debug Source distribution MariaDB > quit Bye $ mysql --user=monty ERROR 1045 (28000): Access denied for user 'monty'@'localhost' (using password: NO)
In this example, a user
serg is already logged into the operating system and has full shell access. He has already authenticated with the operating system and his MariaDB account is configured to use the
unix_socket authentication plugin, so he does not need to authenticate again for the database. MariaDB accepts his operating system credentials and allows him to connect. However, any attempt to connect to the database as another operating system user will be denied.