MariaDB security features and best practices
Robert Bindar Software Developer @MariaDB Foundation
Percona Live Austin, 28-30 May 2019
MariaDB security features and best practices Robert Bindar - - PowerPoint PPT Presentation
MariaDB security features and best practices Robert Bindar Software Developer @MariaDB Foundation Percona Live Austin, 28-30 May 2019 Motivation - Users Potential public shaming through data breaches Massive loss of business
Percona Live Austin, 28-30 May 2019
2 MariaDB Security Features and Best Practices https://mariadb.org
3 MariaDB Security Features and Best Practices https://mariadb.org
4 MariaDB Security Features and Best Practices https://mariadb.org
5
MariaDB Security Features and Best Practices https://mariadb.org
6 MariaDB Security Features and Best Practices https://mariadb.org
7 MariaDB Security Features and Best Practices https://mariadb.org
8 MariaDB Security Features and Best Practices https://mariadb.org
9
MariaDB Security Features and Best Practices https://mariadb.org
10
MariaDB Security Features and Best Practices https://mariadb.org
11 MariaDB Security Features and Best Practices https://mariadb.org
Data transmitted between clients and the MariaDB server, between server instances in replication or data transmitted within the Galera cluster. Defaults to unencrypted!
Some of the data residing in persistent storage: tables, tablespaces, binary logs. Supported with InnoDB and XtraDB, partially with Aria.
12 MariaDB Security Features and Best Practices https://mariadb.org
13
MariaDB Security Features and Best Practices https://mariadb.org
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'version_ssl_library';
+---------------------+----------------------------+ | Variable_name | Value | +---------------------+----------------------------+ | version_ssl_library | OpenSSL 1.1.0g 2 Nov 2017 | +---------------------+----------------------------+
14
MariaDB Security Features and Best Practices https://mariadb.org
[mariadb] ssl_cert = /etc/my.cnf.d/certificates/server-cert.pem ssl_key = /etc/my.cnf.d/certificates/server-key.pem ssl_ca = /etc/my.cnf.d/certificates/ca.pem
15
MariaDB Security Features and Best Practices https://mariadb.org
MariaDB [(none)]> CHANGE MASTER TO MASTER_SSL_CA = '/path/to/ca/ca.pem', MASTER_SSL_VERIFY_SERVER_CERT=1;
16
MariaDB Security Features and Best Practices https://mariadb.org
[mariadb] … cert,key,ca wsrep_provider_options="socket.ssl_cert=/path/server-cert.pem; socket.ssl_key=/path/server-key.pem; socket.ssl_ca=/path/ca.pem"
17
MariaDB Security Features and Best Practices https://mariadb.org
18 MariaDB Security Features and Best Practices https://mariadb.org
19
MariaDB Security Features and Best Practices https://mariadb.org
20
MariaDB [(none)]> CREATE USER username@hostname IDENTIFIED VIA unix_socket; Query OK, 0 rows affected (0.00 sec)
MariaDB Security Features and Best Practices https://mariadb.org
21
MariaDB Security Features and Best Practices https://mariadb.org
22
MariaDB [(none)]> CREATE USER user@localhost ACCOUNT LOCK; Query OK, 0 rows affected (0.00 sec)
MariaDB Security Features and Best Practices https://mariadb.org
23
MariaDB [(none)]> SHOW CREATE USER user@localhost; +---------------------------------------------+ | CREATE USER for user@localhost | +---------------------------------------------+ | CREATE USER 'user'@'localhost' ACCOUNT LOCK | +---------------------------------------------+ 1 row in set (0.000 sec)
MariaDB Security Features and Best Practices https://mariadb.org
24
MariaDB [(none)]> ALTER USER user@localhost ACCOUNT UNLOCK; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> ALTER USER user@localhost ACCOUNT LOCK; Query OK, 0 rows affected (0.00 sec)
MariaDB Security Features and Best Practices https://mariadb.org
25
bindar@computer:~/MariaDB/server$ ./client/mysql -uuser ERROR 4151 (HY000): Access denied, this account is locked
MariaDB Security Features and Best Practices https://mariadb.org
26
MariaDB Security Features and Best Practices https://mariadb.org
27
MariaDB Security Features and Best Practices https://mariadb.org
28
MariaDB [(none)]> CREATE USER user@localhost PASSWORD EXPIRE; Query OK, 0 rows affected (0.00 sec)
MariaDB Security Features and Best Practices https://mariadb.org
In this mode, any new connections for accounts with expired passwords are refused.
A new connection for an account with the password expired is only allowed to execute SET PASSWORD to change the account password, attempts to execute any other statements are rejected.
29 MariaDB Security Features and Best Practices https://mariadb.org
30
MariaDB Security Features and Best Practices https://mariadb.org
31
$ mysql -u user
Welcome to the MariaDB monitor.
MariaDB [(none)]> SELECT CURRENT_USER; ERROR 1820 (HY000): You must SET PASSWORD before executing this statement MariaDB [(none)]> SET PASSWORD= PASSWORD(‘abc’);
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> SELECT CURRENT_USER;
+-----------------+ | CURRENT_USER | +-----------------+ | user1@localhost | +-----------------+ 1 row in set (0.00 sec)
MariaDB Security Features and Best Practices https://mariadb.org
32
$ mysql -u user ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supports expired passwords
MariaDB Security Features and Best Practices https://mariadb.org
33
MariaDB Security Features and Best Practices https://mariadb.org
34
MariaDB [(none)]> ALTER USER user@localhost PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> SHOW CREATE USER user@localhost;
+-------------------------------------------------------+ | CREATE USER for user@localhost | +-------------------------------------------------------+ | CREATE USER 'user'@'localhost' PASSWORD EXPIRE NEVER | +-------------------------------------------------------+ 1 row in set (0.00 sec)
MariaDB Security Features and Best Practices https://mariadb.org
35
MariaDB [(none)]> ALTER USER user@localhost PASSWORD EXPIRE INTERVAL 30 DAY;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> SHOW CREATE USER user@localhost;
+-----------------------------------------------------------------+ | CREATE USER for user@localhost | +-----------------------------------------------------------------+ | CREATE USER 'user'@'localhost' PASSWORD EXPIRE INTERVAL 30 DAY | +-----------------------------------------------------------------+ 1 row in set (0.00 sec)
MariaDB Security Features and Best Practices https://mariadb.org
36
MariaDB [(none)]> ALTER USER user@localhost PASSWORD EXPIRE DEFAULT;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> SHOW CREATE USER user@localhost;
+---------------------------------+ | CREATE USER for user@localhost | +---------------------------------+ | CREATE USER 'user'@'localhost' | +---------------------------------+ 1 row in set (0.00 sec)
MariaDB Security Features and Best Practices https://mariadb.org
37
MariaDB [(none)]> SET GLOBAL max_password_errors=3; Query OK, 0 rows affected (0.00 sec)
MariaDB Security Features and Best Practices https://mariadb.org
38
MariaDB Security Features and Best Practices https://mariadb.org
39 MariaDB Security Features and Best Practices https://mariadb.org
40
MariaDB Security Features and Best Practices https://mariadb.org
41
MariaDB Security Features and Best Practices https://mariadb.org
42 MariaDB Security Features and Best Practices https://mariadb.org