SlideShare a Scribd company logo
Enhancing MySQL Security
Vinicius Grippa
Percona
2
About me
• Support Engineer at Percona since 2017
Working with MySQL for over 5 years
- Started with SQL Server
• Working with databases for 7 years
3
Agenda
• OS/Cloud security
• SSL
• Password management
• Audit plugin
• Percona Server encryption features
• MySQL 8 features (undo, redo encryption)
• TDE
• New caching_sha2_password
• FIPS mode
• Roles
4
Basic Principles
• Minimum access
• Isolate
• Audit
• Avoid spying
• Default firewall
5
Agenda
• OS/Cloud security
• SSL
• Password management
• Audit plugin
• Percona Server encryption features
• MySQL 8 features (undo, redo encryption)
• TDE
• New caching_sha2_password
• FIPS mode
• Roles
OS/Cloud Security
7
OS/Cloud security
• Uninstall services that are not used
• Do not run compilers
• Firewalls
• Block internet access
• Disable remote root login
• Use of SSH Key
• AppArmor / SELinux
8
OS/Cloud security
• Use of Amazon Virtual Private Cloud (VPC)
• Use AWS Identity and Access Management (IAM) policies
• Use security groups
9
Agenda
• OS/Cloud security
• SSL
• Password management
• Audit plugin
• Percona Server encryption features
• MySQL 8 features (undo, redo encryption)
• TDE
• New caching_sha2_password
• FIPS mode
• Roles
SSL
11
SSL
• Move information over a network in a secure fashion
• SSL provides an way to cryptograph the data
• Default for MySQL 5.7 or higher
• Certificates
• MySQL 5.7
- mysql_ssl_rsa_setup
• MySQL 5.6
- openssl
12
mysql > show global variables like '%ssl%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | ca.pem |
| ssl_capath | |
| ssl_cert | server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | server-key.pem |
+---------------+-----------------+
9 rows in set (0.03 sec)
SSL
13
SSL
mysql: root@localhost ((none)) GRANT ALL PRIVILEGES ON *.* TO
'ssluser'@'%' IDENTIFIED BY 'sekret' REQUIRE SSL;
Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected
(0.01 sec)
[root@node1 ~]# mysql -ussluser -psekret
--ssl-cert=/var/lib/mysql/client-cert.pem
--ssl-key=/var/lib/mysql/client-key.pem --ssl-ca=/var/lib/mysql/ca.pem -h
127.0.0.1 -P 3306 -e " s"| grep SSL
mysql: [Warning] Using a password on the command line interface can be
insecure.
SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
14
SSL
It is also possible to set ssl-mode to ensure that all connections use SSL. This option is
available only for client programs, not the server.
[client]
ssl-mode=required
15
SSL
16
Agenda
• OS/Cloud security
• SSL
• Password management
• Audit plugin
• Percona Server encryption features
• MySQL 8 features (undo, redo encryption)
• TDE
• New caching_sha2_password
• FIPS mode
• Roles
Password Management
18
Password Management
• Password expiration
• validate_password plugin
19
Password expiration
• MySQL enables database administrators to expire account passwords
manually, and to establish a policy for automatic password expiration.
Expiration policy can be established globally, and individual accounts can
be set to either defer to the global policy or override the global policy with
specific per-account behavior.
20
Password expiration
Individual accounts
mysql> create user test_expired_user@localhost identified by 'Sekr$K1et' PASSWORD EXPIRE
INTERVAL 1 day;
Query OK, 0 rows affected (0.01 sec)
Globally
mysql> SET GLOBAL default_password_lifetime = 1;
21
Password expiration
mysql: test_expired_user@localhost ((none)) > show databases;
ERROR 1820 (HY000): You must reset your password using ALTER
USER statement before executing this statement.
22
validate_plugin
Its main purpose is to test passwords and improve security. It is possible to
ensure the strength, length and required characters of the password.
23
validate_plugin - Installing
# Runtime
mysql: root@localhost ((none)) > INSTALL PLUGIN
validate_password SONAME 'validate_password.so';
Query OK, 0 rows affected (0.07 sec)
# my.cnf
[mysqld]
plugin-load-add=validate_password.so
24
validate_plugin - Validate
mysql: root@localhost ((none)) > show global variables like
'%plugin%';
+-------------------------------+--------------------------+
| Variable_name | Value |
+-------------------------------+--------------------------+
| default_authentication_plugin | mysql_native_password |
| plugin_dir | /usr/lib64/mysql/plugin/ |
+-------------------------------+--------------------------+
2 rows in set (0.00 sec)
25
validate_plugin - Validate
mysql: root@localhost ((none)) > SELECT PLUGIN_NAME,
PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME
LIKE 'validate%';
+-------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------------+---------------+
| validate_password | ACTIVE |
+-------------------+---------------+
1 row in set (0.00 sec)
26
validate_plugin - Example
mysql: root@localhost ((none)) > set global
validate_password_length = 6;
Query OK, 0 rows affected (0.00 sec)
mysql: root@localhost ((none)) > set global
validate_password_policy=2;
Query OK, 0 rows affected (0.00 sec)
27
validate_plugin - Example
mysql: root@localhost ((none)) > create user
test_password@localhost identified by 'PasSw0Rd';
ERROR 1819 (HY000): Your password does not satisfy the current
policy requirements
mysql: root@localhost ((none)) > create user
test_password@localhost identified by 'PasSw0Rd12@';
Query OK, 0 rows affected (0.00 sec)
28
Agenda
• OS/Cloud security
• SSL
• Password management
• Audit plugin
• Percona Server encryption features
• MySQL 8 features (undo, redo encryption)
• TDE
• New caching_sha2_password
• FIPS mode
• Roles
Audit Plugin
30
Audit Plugin
• MySQL Enterprise – Paid
• Percona Server (works with community version) – Free
• Its different from general log
• Filter by command / user / database
31
Audit Plugin - Installing
Mysql > INSTALL PLUGIN audit_log SONAME 'audit_log.so';
Query OK, 0 rows affected (0.05 sec)
Mysql > SELECT PLUGIN_NAME, PLUGIN_STATUS FROM
INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'audit%';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| audit_log | ACTIVE |
+-------------+---------------+
1 row in set (0.00 sec)
32
Audit Plugin
[mysqld]
## Audit Logging ##
audit_log_policy=ALL
audit_log_format=JSON
audit_log_file=/var/log/mysql/audit.log
audit_log_rotate_on_size=1024M
audit_log_rotations=10
33
Audit Plugin
mysql: root@localhost ((none)) > show global variables like
'audit%';
+-----------------------------+--------------------------+
| Variable_name | Value |
+-----------------------------+--------------------------+
| audit_log_buffer_size | 1048576 |
| audit_log_exclude_accounts | |
| audit_log_exclude_commands | |
| audit_log_exclude_databases | |
| audit_log_file | /var/log/mysql/audit.log |
| audit_log_flush | OFF |
| audit_log_format | JSON |
| audit_log_handler | FILE |
| audit_log_include_accounts | |
| audit_log_include_commands | |
| audit_log_include_databases | |
34
Audit Plugin
mysql: root@localhost ((none)) > show global variables like
'audit%';
+-----------------------------+--------------------------+
| Variable_name | Value |
+-----------------------------+--------------------------+
| audit_log_policy | ALL |
| audit_log_rotate_on_size | 1073741824 |
| audit_log_rotations | 10 |
| audit_log_strategy | ASYNCHRONOUS |
| audit_log_syslog_facility | LOG_USER |
| audit_log_syslog_ident | percona-audit |
| audit_log_syslog_priority | LOG_INFO |
+-----------------------------+--------------------------+
18 rows in set (0.02 sec)
35
Agenda
• OS/Cloud security
• SSL
• Password management
• Audit plugin
• Percona Server encryption features
• MySQL 8 features (undo, redo encryption)
• TDE
• New caching_sha2_password
• FIPS mode
• Roles
Percona Server encryption features
37
Percona Server encryption
Percona server provides extra encryption
• encrypt_binlog
• encrypt_tmp_files
• innodb_encrypt_online_alter_logs
• innodb_encrypt_tables – BETA quality
• innodb_parallel_dblwr_encrypt – ALPHA quality
• innodb_sys_tablespace_encrypt – ALPHA quality
• innodb_temp_tablespace_encrypt – BETA quality
38
Percona Server encryption
[mysqld]
# Binary Log Encryption
encrypt_binlog
master_verify_checksum = 1
binlog_checksum = 1
mysql: root@localhost ((none)) > show global variables like
'%encrypt_binlog%';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| encrypt_binlog | ON |
+----------------+-------+
1 row in set (0.00 sec)
39
Percona Server encryption
mysql: root@localhost ((none)) > show global variables
like '%encrypt%';
+----------------------------------+-------------+
| Variable_name | Value |
+----------------------------------+-------------+
| block_encryption_mode | aes-128-ecb |
| encrypt_binlog | ON |
| encrypt_tmp_files | OFF |
| innodb_encrypt_online_alter_logs | OFF |
| innodb_encrypt_tables | OFF |
| innodb_parallel_dblwr_encrypt | OFF |
| innodb_sys_tablespace_encrypt | OFF |
| innodb_temp_tablespace_encrypt | OFF |
+----------------------------------+-------------+
8 rows in set (0.00 sec)
40
Agenda
• OS/Cloud security
• SSL
• Password management
• Audit plugin
• Percona Server encryption features
• MySQL 8 features (undo, redo encryption)
• TDE
• New caching_sha2_password
• FIPS mode
• Roles
MySQL 8 features (undo, redo encryption)
42
MySQL 8 - (undo, redo encryption)
• MySQL 8 extends tablespace encryption feature to redo log and
undo log
• It is necessary using one of the Keyring plugins
43
MySQL 8 - (undo, redo encryption)
• The process is very straightforward, to enable the encryption on
the redo log and the undo log.
44
MySQL 8 - (undo, redo encryption)
mysql> set global innodb_undo_log_encrypt = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> set global innodb_redo_log_encrypt = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like '%log_encrypt%';
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| innodb_redo_log_encrypt | ON |
| innodb_undo_log_encrypt | ON |
+-------------------------+-------+
2 rows in set (0.00 sec)
45
Agenda
• OS/Cloud security
• SSL
• Password management
• Audit plugin
• Percona Server encryption features
• MySQL 8 features (undo, redo encryption)
• TDE
• New caching_sha2_password
• FIPS mode
• Roles
Transparent Data Encryption(TDE)
47
Transparent Data Encryption (TDE)
• Enables data-at-rest encryption in the database
• Encryption and decryption occurs without any additional coding,
data type or schema modifications
48
Transparent Data Encryption (TDE)
[mysqld]
# TDE
early-plugin-load=keyring_file.so
keyring-file-data=/var/lib/mysql-keyring/keyring
mysql: root@localhost ((none)) > INSTALL PLUGIN keyring_udf SONAME
'keyring_udf.so';
Query OK, 0 rows affected (0.00 sec)
49
Transparent Data Encryption (TDE)
mysql: root@localhost ((none)) > SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE 'keyring%';
+--------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+--------------+---------------+
| keyring_file | ACTIVE |
| keyring_udf | ACTIVE |
+--------------+---------------|
50
Transparent Data Encryption (TDE)
mysql: root@localhost ((none)) > SELECT keyring_key_generate('MyKey', 'AES', 32);
+------------------------------------------+
| keyring_key_generate('MyKey', 'AES', 32) |
+------------------------------------------+
| 1 |
+------------------------------------------+
1 row in set (0.00 sec)
mysql> CREATE TABLESPACE `amer_meeting1` ADD DATAFILE 'amer_meeting1.ibd' ENCRYPTION =
'Y' Engine=InnoDB;
Query OK, 0 rows affected (0.01 sec)
51
Transparent Data Encryption (TDE)
mysql: root@localhost (test) > CREATE TABLE t1 (a INT, b TEXT)
TABLESPACE vgrippa ENCRYPTION='N';
ERROR 1478 (HY000): InnoDB: Tablespace `vgrippa` can contain only an
ENCRYPTED tables.
52
Transparent Data Encryption (TDE)
A flag field in the INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES has bit number 13
set if tablespace is encrypted.
mysql: root@localhost (test) > SELECT space, name, flag, (flag &
8192) != 0 AS encrypted FROM
INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE name in ('vgrippa');
+-------+---------+-------+-----------+
| space | name | flag | encrypted |
+-------+---------+-------+-----------+
| 156 | vgrippa | 10240 | 1 |
+-------+---------+-------+-----------+
1 row in set (0.00 sec)
53
Agenda
• OS/Cloud security
• SSL
• Password management
• Audit plugin
• Percona Server encryption features
• MySQL 8 features (undo, redo encryption)
• TDE
• New caching_sha2_password
• FIPS mode
• Roles
caching_sha2_password
55
caching_sha2_password
MySQL provides two authentication plugins that implement SHA-256
hashing for user account passwords:
• sha256_password: Implements basic SHA-256 authentication.
• caching_sha2_password: Implements SHA-256 authentication
(like sha256_password), but uses caching on the server side for better
performance and has additional features for wider applicability. (In MySQL
5.7, caching_sha2_password is implemented only on the client)
Note: In MySQL 8.0, caching_sha2_password isthe default
authentication plugin rather than mysql_native_password.
56
caching_sha2_password
mysql: root@localhost ((none)) > grant all privileges on *.* to vgrippa@localhost
identified by 'teste';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql: root@localhost ((none)) > grant all privileges on *.* to vgrippa1@localhost
identified by 'teste';
Query OK, 0 rows affected, 1 warning (0.00 sec)
57
caching_sha2_password
mysql: root@localhost ((none)) > select user, host, plugin, authentication_string from
mysql.user where user like 'vgrippa%';
+----------+-----------+-----------------------+-------------------------------------------+
| user | host | plugin | authentication_string |
+----------+-----------+-----------------------+-------------------------------------------+
| vgrippa | localhost | mysql_native_password | *A00D6EEF76EC509DB66358D2E6685F8FF7A4C3DD |
| vgrippa1 | localhost | mysql_native_password | *A00D6EEF76EC509DB66358D2E6685F8FF7A4C3DD |
+----------+-----------+-----------------------+-------------------------------------------+
2 rows in set (0.00 sec)
58
Example
# MySQL 8
[mysqld]
default_authentication_plugin=caching_sha2_password
mysql> CREATE USER 'sha2user'@'localhost' IDENTIFIED WITH
caching_sha2_password BY 'password';
Query OK, 0 rows affected (0.06 sec)
mysql> select user,host, plugin from mysql.user where user like 'sha2user%';
+----------+-----------+-----------------------+
| user | host | plugin |
+----------+-----------+-----------------------+
| sha2user | localhost | caching_sha2_password |
+----------+-----------+-----------------------+
1 row in set (0.00 sec)
59
Example
mysql: root@localhost ((none)) > create user vgrippa@localhost identified by
'teste';
Query OK, 0 rows affected (0.01 sec)
mysql: root@localhost ((none)) > create user vgrippa1@localhost identified
by 'teste';
Query OK, 0 rows affected (0.01 sec)
60
Example
mysql: root@localhost ((none)) > select user, host, plugin, authentication_string from
mysql.user where user like 'vgrippa%';
+----------+-----------+-----------------------+--------------------------------------------
----------------------------+
| user | host | plugin | authentication_string
|
+----------+-----------+-----------------------+--------------------------------------------
----------------------------+
| vgrippa | localhost | caching_sha2_password | $A$005$)8?=V_"J75FFq
|jUVMUZmnZ1t8aSybB4AISoj1MXdlseI0rQay6bGGlne8 |
| vgrippa1 | localhost | caching_sha2_password |
$A$005$zEZ;bEmj[hq1T!LFtqZzAB0hacxgwNfHM/gL6gBFHqY1wuozW2NO4Gj9958 |
+----------+-----------+-----------------------+--------------------------------------------
----------------------------+
2 rows in set (0.01 sec)
61
Agenda
• OS/Cloud security
• SSL
• Password management
• Audit plugin
• Percona Server encryption features
• MySQL 8 features (undo, redo encryption)
• TDE
• New caching_sha2_password
• FIPS mode
• Roles
FIPS mode
63
FIPS
• MySQL supports FIPS mode, if compiled using OpenSSL, and an OpenSSL library
and FIPS Object Module are available at runtime.
• FIPS mode on the server side applies to cryptographic operations performed by the
server. This includes replication (master/slave and Group Replication) and X
Plugin, which run within the server. FIPS mode also applies to attempts by clients
to connect to the server.
64
Example
mysql> show global variables like '%fips%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| ssl_fips_mode | ON |
+---------------+-------+
1 row in set (0.01 sec)
mysql> set global ssl_fips_mode=1;
Query OK, 0 rows affected (0.06 sec)
65
Example
mysql> select md5('a');
+----------------------------------+
| md5('a') |
+----------------------------------+
| 00000000000000000000000000000000 |
+----------------------------------+
1 row in set, 1 warning (0.00 sec)
66
Example
mysql> show warnings;
+---------+-------+------------------------------------------------------------
------------+
| Level | Code | Message
|
+---------+-------+------------------------------------------------------------
------------+
| Warning | 11272 | SSL fips mode error: FIPS mode ON/STRICT: MD5 digest is not
supported. |
+---------+-------+------------------------------------------------------------
------------+
1 row in set (0.00 sec)
67
Example
mysql> select sha2('a', 256);
+------------------------------------------------------------------+
| sha2('a', 256) |
+------------------------------------------------------------------+
| ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb |
+------------------------------------------------------------------+
1 row in set (0.00 sec)
68
Agenda
• OS/Cloud security
• SSL
• Password management
• Audit plugin
• Percona Server encryption features
• MySQL 8 features (undo, redo encryption)
• TDE
• New caching_sha2_password
• FIPS mode
• Roles
Roles
70
Roles
• MySQL 8 comes with Roles feature. A role is a named collection of
privileges. Like user accounts, roles can have privileges granted to and
revoked from them.
71
Roles
mysql> create role app_read;
Query OK, 0 rows affected (0.03 sec)
mysql> grant select on *.* to app_read;
Query OK, 0 rows affected (0.04 sec)
72
Roles
mysql> select * from app_db.joinit;
ERROR 1142 (42000): SELECT command denied to user
'test_role'@'localhost' for table 'joinit’
mysql> SELECT CURRENT_ROLE();
+----------------+
| CURRENT_ROLE() |
+----------------+
| NONE |
+----------------+
1 row in set (0.00 sec)
73
Roles
mysql> SET ROLE all;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT CURRENT_ROLE();
+-------------------------------------------------------+
| CURRENT_ROLE() |
+-------------------------------------------------------+
| `app_read`@`%`,`app_write`@`%`,`app_read`@`localhost` |
+-------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from app_db.joinit;
74
Roles
It is possible to use activate_all_roles_on_loginto activate all roles granted
to each account at login time.
75
References
# SO/Cloud Security
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.html
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html
# Audit log
https://www.percona.com/blog/2015/09/10/percona-server-audit-log-plugin-best-practices/
#caching_sha2_password
https://dev.mysql.com/doc/refman/5.7/en/caching-sha2-pluggable-authentication.html
# SSL
https://www.percona.com/blog/2013/06/22/setting-up-mysql-ssl-and-secure-connections/#setup
https://www.percona.com/blog/2013/10/10/mysql-ssl-performance-overhead/
# TDE
https://www.percona.com/doc/percona-server/LATEST/management/data_at_rest_encryption.html
https://www.percona.com/doc/percona-server/LATEST/management/data_at_rest_encryption.html#usage
https://dev.mysql.com/doc/refman/5.7/en/keyring-file-plugin.html
# Roles
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_activate_all_roles_on_login
https://dev.mysql.com/doc/refman/8.0/en/roles.html
# Password management
https://dev.mysql.com/doc/refman/5.7/en/password-management.html
https://dev.mysql.com/doc/refman/5.7/en/validate-password-installation.html
https://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html
# FIPS
https://dev.mysql.com/doc/refman/8.0/en/fips-mode.html
# Percona Server 8.0 Alpha release
https://www.percona.com/blog/2018/09/27/announcement-alpha-build-of-percona-server-8-0/
# MySQL 8 Redo and Undo encryption
https://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-encryption.html#innodb-tablespace-encryption-about
Questions?
Click to add text
77
Rate My Session
78
Thank You Sponsors!!

More Related Content

PDF
Percona Live 2019 - MySQL Security
PDF
How to Avoid Pitfalls in Schema Upgrade with Galera
PPTX
Database 12c is ready for you... Are you ready for 12c?
PDF
MySQL Performance Schema in 20 Minutes
PDF
AUSOUG Oracle Password Security
PDF
Security Best Practice: Oracle passwords, but secure!
PDF
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
PDF
MySQL Performance Schema in Action
Percona Live 2019 - MySQL Security
How to Avoid Pitfalls in Schema Upgrade with Galera
Database 12c is ready for you... Are you ready for 12c?
MySQL Performance Schema in 20 Minutes
AUSOUG Oracle Password Security
Security Best Practice: Oracle passwords, but secure!
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
MySQL Performance Schema in Action

What's hot (19)

PDF
Performance Schema for MySQL Troubleshooting
PDF
How to migrate from MySQL to MariaDB without tears
PDF
Highload Perf Tuning
PPTX
Oracle Access Manager Integration with Microsoft Active Directory for Zero Si...
PPTX
010 sa302 aaa+ldap
PPTX
DBA Commands and Concepts That Every Developer Should Know - Part 2
PDF
MySQL Performance Schema in Action
PDF
Performance Schema in Action: demo
PDF
DerbyCon 8 - Attacking Azure Environments with PowerShell
PDF
Proxy SQL 2.0 with PXC
DOCX
Install elasticsearch, logstash and kibana
PDF
Introduction into MySQL Query Tuning
PDF
Mysql tracing
PDF
Mysql8 advance tuning with resource group
PPTX
ProxySQL & PXC(Query routing and Failover Test)
PDF
Oam install & config
PDF
Preparse Query Rewrite Plugins
ODP
MySQL Monitoring Mechanisms
PDF
Using Apache Spark and MySQL for Data Analysis
Performance Schema for MySQL Troubleshooting
How to migrate from MySQL to MariaDB without tears
Highload Perf Tuning
Oracle Access Manager Integration with Microsoft Active Directory for Zero Si...
010 sa302 aaa+ldap
DBA Commands and Concepts That Every Developer Should Know - Part 2
MySQL Performance Schema in Action
Performance Schema in Action: demo
DerbyCon 8 - Attacking Azure Environments with PowerShell
Proxy SQL 2.0 with PXC
Install elasticsearch, logstash and kibana
Introduction into MySQL Query Tuning
Mysql tracing
Mysql8 advance tuning with resource group
ProxySQL & PXC(Query routing and Failover Test)
Oam install & config
Preparse Query Rewrite Plugins
MySQL Monitoring Mechanisms
Using Apache Spark and MySQL for Data Analysis
Ad

Similar to Enhancing MySQL Security (20)

PDF
Enhancing MySQL Security
PDF
Guob - MySQL e LGPD
PDF
Securing your MySQL / MariaDB Server data
PPTX
MysQL melhores práticas de seguranca
PDF
Mysql 56-experiences-bugs-solutions-50mins
PPTX
Mysql 8 vs Mariadb 10.4 Webinar 2020 Feb
PDF
MariaDB Server & MySQL Security Essentials 2016
PDF
Better encryption & security with MariaDB 10.1 & MySQL 5.7
PDF
MySQL Security and Standardization at PayPal - Percona Live 2019
PDF
Percona Live 2012PPT:mysql-security-privileges-and-user-management
PDF
Security features In MySQL 8.0
PPTX
Mysql 8 vs Mariadb 10.4 Highload++ 2019
PDF
Mysql user-camp-march-11th-2016
PPTX
Locking Down Your MySQL Database.pptx
PDF
My sql 5.6&MySQL Cluster 7.3
PDF
Curso de MySQL 5.7
PDF
MySQL's new Secure by Default Install -- All Things Open October 20th 2015
PDF
Securing your MySQL server
PDF
Basic MySQL Troubleshooting for Oracle Database Administrators
PDF
Meet MariaDB Server 10.1 London MySQL meetup December 2015
Enhancing MySQL Security
Guob - MySQL e LGPD
Securing your MySQL / MariaDB Server data
MysQL melhores práticas de seguranca
Mysql 56-experiences-bugs-solutions-50mins
Mysql 8 vs Mariadb 10.4 Webinar 2020 Feb
MariaDB Server & MySQL Security Essentials 2016
Better encryption & security with MariaDB 10.1 & MySQL 5.7
MySQL Security and Standardization at PayPal - Percona Live 2019
Percona Live 2012PPT:mysql-security-privileges-and-user-management
Security features In MySQL 8.0
Mysql 8 vs Mariadb 10.4 Highload++ 2019
Mysql user-camp-march-11th-2016
Locking Down Your MySQL Database.pptx
My sql 5.6&MySQL Cluster 7.3
Curso de MySQL 5.7
MySQL's new Secure by Default Install -- All Things Open October 20th 2015
Securing your MySQL server
Basic MySQL Troubleshooting for Oracle Database Administrators
Meet MariaDB Server 10.1 London MySQL meetup December 2015
Ad

More from Vinicius M Grippa (6)

PDF
MySQL up and running 30 minutes.pdf
PPTX
PL22 - Backup and Restore Performance.pptx
PPTX
MySQL backup and restore performance
PDF
Moving mongo db to the cloud strategies and points to consider
PPTX
Cpu analysis with flamegraphs
PPTX
K8s - Setting up minikube
MySQL up and running 30 minutes.pdf
PL22 - Backup and Restore Performance.pptx
MySQL backup and restore performance
Moving mongo db to the cloud strategies and points to consider
Cpu analysis with flamegraphs
K8s - Setting up minikube

Recently uploaded (20)

PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
cuic standard and advanced reporting.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Empathic Computing: Creating Shared Understanding
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Encapsulation theory and applications.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Encapsulation_ Review paper, used for researhc scholars
Building Integrated photovoltaic BIPV_UPV.pdf
cuic standard and advanced reporting.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Spectral efficient network and resource selection model in 5G networks
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Review of recent advances in non-invasive hemoglobin estimation
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
The Rise and Fall of 3GPP – Time for a Sabbatical?
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Empathic Computing: Creating Shared Understanding
Reach Out and Touch Someone: Haptics and Empathic Computing
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Encapsulation theory and applications.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
Encapsulation_ Review paper, used for researhc scholars

Enhancing MySQL Security

  • 2. 2 About me • Support Engineer at Percona since 2017 Working with MySQL for over 5 years - Started with SQL Server • Working with databases for 7 years
  • 3. 3 Agenda • OS/Cloud security • SSL • Password management • Audit plugin • Percona Server encryption features • MySQL 8 features (undo, redo encryption) • TDE • New caching_sha2_password • FIPS mode • Roles
  • 4. 4 Basic Principles • Minimum access • Isolate • Audit • Avoid spying • Default firewall
  • 5. 5 Agenda • OS/Cloud security • SSL • Password management • Audit plugin • Percona Server encryption features • MySQL 8 features (undo, redo encryption) • TDE • New caching_sha2_password • FIPS mode • Roles
  • 7. 7 OS/Cloud security • Uninstall services that are not used • Do not run compilers • Firewalls • Block internet access • Disable remote root login • Use of SSH Key • AppArmor / SELinux
  • 8. 8 OS/Cloud security • Use of Amazon Virtual Private Cloud (VPC) • Use AWS Identity and Access Management (IAM) policies • Use security groups
  • 9. 9 Agenda • OS/Cloud security • SSL • Password management • Audit plugin • Percona Server encryption features • MySQL 8 features (undo, redo encryption) • TDE • New caching_sha2_password • FIPS mode • Roles
  • 10. SSL
  • 11. 11 SSL • Move information over a network in a secure fashion • SSL provides an way to cryptograph the data • Default for MySQL 5.7 or higher • Certificates • MySQL 5.7 - mysql_ssl_rsa_setup • MySQL 5.6 - openssl
  • 12. 12 mysql > show global variables like '%ssl%'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | ca.pem | | ssl_capath | | | ssl_cert | server-cert.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | server-key.pem | +---------------+-----------------+ 9 rows in set (0.03 sec) SSL
  • 13. 13 SSL mysql: root@localhost ((none)) GRANT ALL PRIVILEGES ON *.* TO 'ssluser'@'%' IDENTIFIED BY 'sekret' REQUIRE SSL; Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected (0.01 sec) [root@node1 ~]# mysql -ussluser -psekret --ssl-cert=/var/lib/mysql/client-cert.pem --ssl-key=/var/lib/mysql/client-key.pem --ssl-ca=/var/lib/mysql/ca.pem -h 127.0.0.1 -P 3306 -e " s"| grep SSL mysql: [Warning] Using a password on the command line interface can be insecure. SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
  • 14. 14 SSL It is also possible to set ssl-mode to ensure that all connections use SSL. This option is available only for client programs, not the server. [client] ssl-mode=required
  • 16. 16 Agenda • OS/Cloud security • SSL • Password management • Audit plugin • Percona Server encryption features • MySQL 8 features (undo, redo encryption) • TDE • New caching_sha2_password • FIPS mode • Roles
  • 18. 18 Password Management • Password expiration • validate_password plugin
  • 19. 19 Password expiration • MySQL enables database administrators to expire account passwords manually, and to establish a policy for automatic password expiration. Expiration policy can be established globally, and individual accounts can be set to either defer to the global policy or override the global policy with specific per-account behavior.
  • 20. 20 Password expiration Individual accounts mysql> create user test_expired_user@localhost identified by 'Sekr$K1et' PASSWORD EXPIRE INTERVAL 1 day; Query OK, 0 rows affected (0.01 sec) Globally mysql> SET GLOBAL default_password_lifetime = 1;
  • 21. 21 Password expiration mysql: test_expired_user@localhost ((none)) > show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
  • 22. 22 validate_plugin Its main purpose is to test passwords and improve security. It is possible to ensure the strength, length and required characters of the password.
  • 23. 23 validate_plugin - Installing # Runtime mysql: root@localhost ((none)) > INSTALL PLUGIN validate_password SONAME 'validate_password.so'; Query OK, 0 rows affected (0.07 sec) # my.cnf [mysqld] plugin-load-add=validate_password.so
  • 24. 24 validate_plugin - Validate mysql: root@localhost ((none)) > show global variables like '%plugin%'; +-------------------------------+--------------------------+ | Variable_name | Value | +-------------------------------+--------------------------+ | default_authentication_plugin | mysql_native_password | | plugin_dir | /usr/lib64/mysql/plugin/ | +-------------------------------+--------------------------+ 2 rows in set (0.00 sec)
  • 25. 25 validate_plugin - Validate mysql: root@localhost ((none)) > SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'validate%'; +-------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +-------------------+---------------+ | validate_password | ACTIVE | +-------------------+---------------+ 1 row in set (0.00 sec)
  • 26. 26 validate_plugin - Example mysql: root@localhost ((none)) > set global validate_password_length = 6; Query OK, 0 rows affected (0.00 sec) mysql: root@localhost ((none)) > set global validate_password_policy=2; Query OK, 0 rows affected (0.00 sec)
  • 27. 27 validate_plugin - Example mysql: root@localhost ((none)) > create user test_password@localhost identified by 'PasSw0Rd'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements mysql: root@localhost ((none)) > create user test_password@localhost identified by 'PasSw0Rd12@'; Query OK, 0 rows affected (0.00 sec)
  • 28. 28 Agenda • OS/Cloud security • SSL • Password management • Audit plugin • Percona Server encryption features • MySQL 8 features (undo, redo encryption) • TDE • New caching_sha2_password • FIPS mode • Roles
  • 30. 30 Audit Plugin • MySQL Enterprise – Paid • Percona Server (works with community version) – Free • Its different from general log • Filter by command / user / database
  • 31. 31 Audit Plugin - Installing Mysql > INSTALL PLUGIN audit_log SONAME 'audit_log.so'; Query OK, 0 rows affected (0.05 sec) Mysql > SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'audit%'; +-------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +-------------+---------------+ | audit_log | ACTIVE | +-------------+---------------+ 1 row in set (0.00 sec)
  • 32. 32 Audit Plugin [mysqld] ## Audit Logging ## audit_log_policy=ALL audit_log_format=JSON audit_log_file=/var/log/mysql/audit.log audit_log_rotate_on_size=1024M audit_log_rotations=10
  • 33. 33 Audit Plugin mysql: root@localhost ((none)) > show global variables like 'audit%'; +-----------------------------+--------------------------+ | Variable_name | Value | +-----------------------------+--------------------------+ | audit_log_buffer_size | 1048576 | | audit_log_exclude_accounts | | | audit_log_exclude_commands | | | audit_log_exclude_databases | | | audit_log_file | /var/log/mysql/audit.log | | audit_log_flush | OFF | | audit_log_format | JSON | | audit_log_handler | FILE | | audit_log_include_accounts | | | audit_log_include_commands | | | audit_log_include_databases | |
  • 34. 34 Audit Plugin mysql: root@localhost ((none)) > show global variables like 'audit%'; +-----------------------------+--------------------------+ | Variable_name | Value | +-----------------------------+--------------------------+ | audit_log_policy | ALL | | audit_log_rotate_on_size | 1073741824 | | audit_log_rotations | 10 | | audit_log_strategy | ASYNCHRONOUS | | audit_log_syslog_facility | LOG_USER | | audit_log_syslog_ident | percona-audit | | audit_log_syslog_priority | LOG_INFO | +-----------------------------+--------------------------+ 18 rows in set (0.02 sec)
  • 35. 35 Agenda • OS/Cloud security • SSL • Password management • Audit plugin • Percona Server encryption features • MySQL 8 features (undo, redo encryption) • TDE • New caching_sha2_password • FIPS mode • Roles
  • 37. 37 Percona Server encryption Percona server provides extra encryption • encrypt_binlog • encrypt_tmp_files • innodb_encrypt_online_alter_logs • innodb_encrypt_tables – BETA quality • innodb_parallel_dblwr_encrypt – ALPHA quality • innodb_sys_tablespace_encrypt – ALPHA quality • innodb_temp_tablespace_encrypt – BETA quality
  • 38. 38 Percona Server encryption [mysqld] # Binary Log Encryption encrypt_binlog master_verify_checksum = 1 binlog_checksum = 1 mysql: root@localhost ((none)) > show global variables like '%encrypt_binlog%'; +----------------+-------+ | Variable_name | Value | +----------------+-------+ | encrypt_binlog | ON | +----------------+-------+ 1 row in set (0.00 sec)
  • 39. 39 Percona Server encryption mysql: root@localhost ((none)) > show global variables like '%encrypt%'; +----------------------------------+-------------+ | Variable_name | Value | +----------------------------------+-------------+ | block_encryption_mode | aes-128-ecb | | encrypt_binlog | ON | | encrypt_tmp_files | OFF | | innodb_encrypt_online_alter_logs | OFF | | innodb_encrypt_tables | OFF | | innodb_parallel_dblwr_encrypt | OFF | | innodb_sys_tablespace_encrypt | OFF | | innodb_temp_tablespace_encrypt | OFF | +----------------------------------+-------------+ 8 rows in set (0.00 sec)
  • 40. 40 Agenda • OS/Cloud security • SSL • Password management • Audit plugin • Percona Server encryption features • MySQL 8 features (undo, redo encryption) • TDE • New caching_sha2_password • FIPS mode • Roles
  • 41. MySQL 8 features (undo, redo encryption)
  • 42. 42 MySQL 8 - (undo, redo encryption) • MySQL 8 extends tablespace encryption feature to redo log and undo log • It is necessary using one of the Keyring plugins
  • 43. 43 MySQL 8 - (undo, redo encryption) • The process is very straightforward, to enable the encryption on the redo log and the undo log.
  • 44. 44 MySQL 8 - (undo, redo encryption) mysql> set global innodb_undo_log_encrypt = 1; Query OK, 0 rows affected (0.00 sec) mysql> set global innodb_redo_log_encrypt = 1; Query OK, 0 rows affected (0.00 sec) mysql> show global variables like '%log_encrypt%'; +-------------------------+-------+ | Variable_name | Value | +-------------------------+-------+ | innodb_redo_log_encrypt | ON | | innodb_undo_log_encrypt | ON | +-------------------------+-------+ 2 rows in set (0.00 sec)
  • 45. 45 Agenda • OS/Cloud security • SSL • Password management • Audit plugin • Percona Server encryption features • MySQL 8 features (undo, redo encryption) • TDE • New caching_sha2_password • FIPS mode • Roles
  • 47. 47 Transparent Data Encryption (TDE) • Enables data-at-rest encryption in the database • Encryption and decryption occurs without any additional coding, data type or schema modifications
  • 48. 48 Transparent Data Encryption (TDE) [mysqld] # TDE early-plugin-load=keyring_file.so keyring-file-data=/var/lib/mysql-keyring/keyring mysql: root@localhost ((none)) > INSTALL PLUGIN keyring_udf SONAME 'keyring_udf.so'; Query OK, 0 rows affected (0.00 sec)
  • 49. 49 Transparent Data Encryption (TDE) mysql: root@localhost ((none)) > SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%'; +--------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +--------------+---------------+ | keyring_file | ACTIVE | | keyring_udf | ACTIVE | +--------------+---------------|
  • 50. 50 Transparent Data Encryption (TDE) mysql: root@localhost ((none)) > SELECT keyring_key_generate('MyKey', 'AES', 32); +------------------------------------------+ | keyring_key_generate('MyKey', 'AES', 32) | +------------------------------------------+ | 1 | +------------------------------------------+ 1 row in set (0.00 sec) mysql> CREATE TABLESPACE `amer_meeting1` ADD DATAFILE 'amer_meeting1.ibd' ENCRYPTION = 'Y' Engine=InnoDB; Query OK, 0 rows affected (0.01 sec)
  • 51. 51 Transparent Data Encryption (TDE) mysql: root@localhost (test) > CREATE TABLE t1 (a INT, b TEXT) TABLESPACE vgrippa ENCRYPTION='N'; ERROR 1478 (HY000): InnoDB: Tablespace `vgrippa` can contain only an ENCRYPTED tables.
  • 52. 52 Transparent Data Encryption (TDE) A flag field in the INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES has bit number 13 set if tablespace is encrypted. mysql: root@localhost (test) > SELECT space, name, flag, (flag & 8192) != 0 AS encrypted FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES WHERE name in ('vgrippa'); +-------+---------+-------+-----------+ | space | name | flag | encrypted | +-------+---------+-------+-----------+ | 156 | vgrippa | 10240 | 1 | +-------+---------+-------+-----------+ 1 row in set (0.00 sec)
  • 53. 53 Agenda • OS/Cloud security • SSL • Password management • Audit plugin • Percona Server encryption features • MySQL 8 features (undo, redo encryption) • TDE • New caching_sha2_password • FIPS mode • Roles
  • 55. 55 caching_sha2_password MySQL provides two authentication plugins that implement SHA-256 hashing for user account passwords: • sha256_password: Implements basic SHA-256 authentication. • caching_sha2_password: Implements SHA-256 authentication (like sha256_password), but uses caching on the server side for better performance and has additional features for wider applicability. (In MySQL 5.7, caching_sha2_password is implemented only on the client) Note: In MySQL 8.0, caching_sha2_password isthe default authentication plugin rather than mysql_native_password.
  • 56. 56 caching_sha2_password mysql: root@localhost ((none)) > grant all privileges on *.* to vgrippa@localhost identified by 'teste'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql: root@localhost ((none)) > grant all privileges on *.* to vgrippa1@localhost identified by 'teste'; Query OK, 0 rows affected, 1 warning (0.00 sec)
  • 57. 57 caching_sha2_password mysql: root@localhost ((none)) > select user, host, plugin, authentication_string from mysql.user where user like 'vgrippa%'; +----------+-----------+-----------------------+-------------------------------------------+ | user | host | plugin | authentication_string | +----------+-----------+-----------------------+-------------------------------------------+ | vgrippa | localhost | mysql_native_password | *A00D6EEF76EC509DB66358D2E6685F8FF7A4C3DD | | vgrippa1 | localhost | mysql_native_password | *A00D6EEF76EC509DB66358D2E6685F8FF7A4C3DD | +----------+-----------+-----------------------+-------------------------------------------+ 2 rows in set (0.00 sec)
  • 58. 58 Example # MySQL 8 [mysqld] default_authentication_plugin=caching_sha2_password mysql> CREATE USER 'sha2user'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password'; Query OK, 0 rows affected (0.06 sec) mysql> select user,host, plugin from mysql.user where user like 'sha2user%'; +----------+-----------+-----------------------+ | user | host | plugin | +----------+-----------+-----------------------+ | sha2user | localhost | caching_sha2_password | +----------+-----------+-----------------------+ 1 row in set (0.00 sec)
  • 59. 59 Example mysql: root@localhost ((none)) > create user vgrippa@localhost identified by 'teste'; Query OK, 0 rows affected (0.01 sec) mysql: root@localhost ((none)) > create user vgrippa1@localhost identified by 'teste'; Query OK, 0 rows affected (0.01 sec)
  • 60. 60 Example mysql: root@localhost ((none)) > select user, host, plugin, authentication_string from mysql.user where user like 'vgrippa%'; +----------+-----------+-----------------------+-------------------------------------------- ----------------------------+ | user | host | plugin | authentication_string | +----------+-----------+-----------------------+-------------------------------------------- ----------------------------+ | vgrippa | localhost | caching_sha2_password | $A$005$)8?=V_"J75FFq |jUVMUZmnZ1t8aSybB4AISoj1MXdlseI0rQay6bGGlne8 | | vgrippa1 | localhost | caching_sha2_password | $A$005$zEZ;bEmj[hq1T!LFtqZzAB0hacxgwNfHM/gL6gBFHqY1wuozW2NO4Gj9958 | +----------+-----------+-----------------------+-------------------------------------------- ----------------------------+ 2 rows in set (0.01 sec)
  • 61. 61 Agenda • OS/Cloud security • SSL • Password management • Audit plugin • Percona Server encryption features • MySQL 8 features (undo, redo encryption) • TDE • New caching_sha2_password • FIPS mode • Roles
  • 63. 63 FIPS • MySQL supports FIPS mode, if compiled using OpenSSL, and an OpenSSL library and FIPS Object Module are available at runtime. • FIPS mode on the server side applies to cryptographic operations performed by the server. This includes replication (master/slave and Group Replication) and X Plugin, which run within the server. FIPS mode also applies to attempts by clients to connect to the server.
  • 64. 64 Example mysql> show global variables like '%fips%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | ssl_fips_mode | ON | +---------------+-------+ 1 row in set (0.01 sec) mysql> set global ssl_fips_mode=1; Query OK, 0 rows affected (0.06 sec)
  • 65. 65 Example mysql> select md5('a'); +----------------------------------+ | md5('a') | +----------------------------------+ | 00000000000000000000000000000000 | +----------------------------------+ 1 row in set, 1 warning (0.00 sec)
  • 66. 66 Example mysql> show warnings; +---------+-------+------------------------------------------------------------ ------------+ | Level | Code | Message | +---------+-------+------------------------------------------------------------ ------------+ | Warning | 11272 | SSL fips mode error: FIPS mode ON/STRICT: MD5 digest is not supported. | +---------+-------+------------------------------------------------------------ ------------+ 1 row in set (0.00 sec)
  • 67. 67 Example mysql> select sha2('a', 256); +------------------------------------------------------------------+ | sha2('a', 256) | +------------------------------------------------------------------+ | ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb | +------------------------------------------------------------------+ 1 row in set (0.00 sec)
  • 68. 68 Agenda • OS/Cloud security • SSL • Password management • Audit plugin • Percona Server encryption features • MySQL 8 features (undo, redo encryption) • TDE • New caching_sha2_password • FIPS mode • Roles
  • 69. Roles
  • 70. 70 Roles • MySQL 8 comes with Roles feature. A role is a named collection of privileges. Like user accounts, roles can have privileges granted to and revoked from them.
  • 71. 71 Roles mysql> create role app_read; Query OK, 0 rows affected (0.03 sec) mysql> grant select on *.* to app_read; Query OK, 0 rows affected (0.04 sec)
  • 72. 72 Roles mysql> select * from app_db.joinit; ERROR 1142 (42000): SELECT command denied to user 'test_role'@'localhost' for table 'joinit’ mysql> SELECT CURRENT_ROLE(); +----------------+ | CURRENT_ROLE() | +----------------+ | NONE | +----------------+ 1 row in set (0.00 sec)
  • 73. 73 Roles mysql> SET ROLE all; Query OK, 0 rows affected (0.00 sec) mysql> SELECT CURRENT_ROLE(); +-------------------------------------------------------+ | CURRENT_ROLE() | +-------------------------------------------------------+ | `app_read`@`%`,`app_write`@`%`,`app_read`@`localhost` | +-------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select * from app_db.joinit;
  • 74. 74 Roles It is possible to use activate_all_roles_on_loginto activate all roles granted to each account at login time.
  • 75. 75 References # SO/Cloud Security https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.html https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html # Audit log https://www.percona.com/blog/2015/09/10/percona-server-audit-log-plugin-best-practices/ #caching_sha2_password https://dev.mysql.com/doc/refman/5.7/en/caching-sha2-pluggable-authentication.html # SSL https://www.percona.com/blog/2013/06/22/setting-up-mysql-ssl-and-secure-connections/#setup https://www.percona.com/blog/2013/10/10/mysql-ssl-performance-overhead/ # TDE https://www.percona.com/doc/percona-server/LATEST/management/data_at_rest_encryption.html https://www.percona.com/doc/percona-server/LATEST/management/data_at_rest_encryption.html#usage https://dev.mysql.com/doc/refman/5.7/en/keyring-file-plugin.html # Roles https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_activate_all_roles_on_login https://dev.mysql.com/doc/refman/8.0/en/roles.html # Password management https://dev.mysql.com/doc/refman/5.7/en/password-management.html https://dev.mysql.com/doc/refman/5.7/en/validate-password-installation.html https://dev.mysql.com/doc/refman/5.7/en/validate-password-options-variables.html # FIPS https://dev.mysql.com/doc/refman/8.0/en/fips-mode.html # Percona Server 8.0 Alpha release https://www.percona.com/blog/2018/09/27/announcement-alpha-build-of-percona-server-8-0/ # MySQL 8 Redo and Undo encryption https://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-encryption.html#innodb-tablespace-encryption-about