MySQL Security für Oracle DBAs

Ähnliche Dokumente
Sicherheitsrelevante Änderungen (und einige andere) in MySQL 5.7

Synchrone multi-master Replikation für MySQL

MySQL Security. DOAG 2013 Datenbank. 14. Mai 2013, Düsseldorf. Oli Sennhauser

MySQL für Oracle DBA's

MySQL Replikation Neue Features in 5.5 und 5.6

MySQL/MariaDB für. nicht-mysql DBAs

IdP Cluster Strukturen und zentrales Logging

MySQL Backup und Restore

MySQL Performance Tuning für Entwickler

Backup und PiTR mit MySQL

MySQL Cluster mit Galera

MySQL 5.7. Neue Funktionen

MySQL sicher aufsetzen und betreiben

Weltweite Produktionsdatenverwaltung mit MySQL-Replikation

MySQL für Oracle DBA's

MySQL für Oracle DBA's

Ab Version 10g werden von Oracle alle unwichtigen Accounts automatisch bei der Installation über den grafischen Installer gesperrt.

MySQL Replikation und GTID

Oracle Database Security Verringerung der Angriffsfläche

Flexible und automatisierte Reaktionen auf Sicherheitsvorfälle

MySQL Backup/Recovery

FromDual bietet neutral und unabhängig:

MySQL Replikation. Erkan Yanar linsenraum.de linsenraum.de

MySQL HA & Security SLAC Juni 2013, Berlin. Oli Sennhauser

SQL Server 2012 Express

Installation MySQL Replikationsserver

MySQL Cluster und MySQL Proxy

MySQL Performance Tuning

MySQL 101 Wie man einen MySQL-Server am besten absichert

MySQL Beispiele aus der Praxis. Wie setzen Kunden MySQL ein?

MySQL Architekturen für Oracle DBA's

Installationsanleitung für die netzbasierte Variante Ab Version 3.6. KnoWau, Allgemeine Bedienhinweise Seite 1

Das ist alles nur gecloudt Sicherheit in den roten Wolken

Performance Tuning & Scale-Out mit MySQL

Oracle Enterprise Manager 12c Database Express (EM Express)

Oracle Secure External Password Store

Für lesefaule IT-ler (alle anderen lesen diese Anleitung ab Seite 2 ganz):

Oracle Database 18c Release 1 Neue Funktionalitäten zur Datenbank-Sicherheit

Bibliografische Informationen digitalisiert durch

MySQL für Oracle DBAs

EE SE1 Oracle RDBMS. Andrew Lacy Solution Architect. OPITZ CONSULTING Deutschland GmbH. Foto: Siobhan Bickerdike

MySQL Konfiguration - die wichtigsten Parameter

1. MariaDB SQL Datenbankserver.

Oracle Real Application Security (RAS) in APEX5

<Insert Picture Here> Verschlüsselung in der Datenbank

Partitionieren über Rechnergrenzen hinweg

Dirk Becker. OpenVPN. Das Praxisbuch. Galileo Press

Zentrale Datenbank-Nutzerverwaltung

<Insert Picture Here> Grid Control 11g Housekeeping Ralf Durben

5000 User+, Erfahrungen im Produktivbetrieb einer Saas-DB. DOAG 2011 Konferenz + Ausstellung Bernhard Vogel & Frank Szilinski, esentri

MySQL-Server im Teamwork - Replikation und Cluster

MySQL-Server im Teamwork - Replikation und Galera Cluster

Protokolle. Konrad Rosenbaum, 2006/7 protected under the GNU GPL & FDL

Datenbank-Administration mit personalisierten Accounts

MySQL Replikation für Einsteiger

Migration nach 11gR2 Erfahrungsbericht. Ulrich Lickert Universitätsklinikum Freiburg

Firebird 2.1 Das freie RDBMS. Robert Dollinger

McAfee Database Security. DOAG Konferenz Franz Hüll Senior Security Consultant. November 20, 2012

Newsletter 3/2014 August

Cloud Control und die Datenbank

Datenbankadministration - Handreichung zur Präsentation

Oracle 12c Multitenant and Encryption in Real Life. Christian Pfundtner DB Masters GmbH Stammersdorfer Str Gerasdorf

MySQL High Availability. DOAG 2013 Datenbank. 14. Mai 2013, Düsseldorf. Oli Sennhauser

yasxtouch Firmware Update

Rapid Deployment mit JomaSoft VDCF

MySQL Architektur die Admin-Sicht

Kerberos und das Oracle Die Nutzung von Kerberos in einer Solaris-Oracle-Umgebung

Archive / Backup System für OpenVMS

Neue Features Oracle Database 12.2 Wann denn endlich?

Datenbank auf neuen Server kopieren

MySQL Beispiele aus der Praxis. Wie setzen Kunden MySQL ein?

MySQL Replikation, Scale-Out, Master- Master Replikation, Backup

TimeMachine. Installation und Konfiguration. Version 1.4. Stand Dokument: install.odt. Berger EDV Service Tulbeckstr.

MySQL Replikation - Die Eier legende Wollmilchsau?

DOAG 2016 Oracle APEX Security

Best Practices WatchGuard Accessportal - Grundlagen und Konfiguration

RPM-Konventionen - ein moderner Turm von Babel

HA Architekturen mit MySQL

Alles neu. Migration in eine frische Datenbank ohne Altlasten. Thomas Klughardt Senior Systems Consultant

HA-API der Oracle Clusterware 10gR2

Oracle 12c NF. Was ist wirklich neu? (eine kleine Auswahl) Andrew Lacy Solution Architect

Entwicklungsumgebung für die Laborübung

MySQL Replikation für Einsteiger

Vom Client zum Server

Kostenoptimierte Cloud-Administration mit Solaris Container Technologie

Oracle Security. Seminarunterlage. Version vom

Automatisierter Java EE Entwicklungs-Lifecycle mit WebLogic Server 12c. Robin Müller-Bady Systemberater, Oracle Deutschland

Sicherheit wird messbar Lösungsansätze und Methoden. Case. 15. September 2009, Hotel St. Gotthard, Zürich

Wie sicher sind Ihre Daten in der DB?

Ralf M. Schnell. Technical Evangelist Microsoft Deutschland GmbH

Wie sicher ist die Datenbank vorm Administrator?

PostgreSQL High-Security

Aktualisierungsinstruktionen von R5.x auf R6.0

<Insert Picture Here> Oracle Database 10g R2 Security

Transkript:

MySQL Security für Oracle DBAs DOAG Konferenz 2016, Nürnberg Oli Sennhauser Senior MySQL Consultant, FromDual GmbH oli.sennhauser@fromdual.com 1 / 28

Über FromDual GmbH Support Beratung remote-dba Schulung 2 / 28

Inhalt MySQL Security MySQL User Konzept Port und Socket Sicherheitsprobleme MySQL Härten Passwort Validierung Passwort im File Client/Server Verschlüsselung (SSL) Upgrade Account Management Sicherheitsrelevante Variablen Verschlüsselung 3 / 28

Grundlegende Massnahmen Quelle: Kapitel 7 Security http://dev.mysql.com/doc/refman/5.7/en/security.html MySQL 5.7 secure by default!!! Grundlegende Massnahmen: MySQL root Password (sys as sysdba) Root von remote (root@%) Anonymous user (''@localhost) Test Schema Passwort-Stärken Prüfung 4 / 28

MySQL User - Konzept Account = User @ {Host Domain} Beispiele: 'root'@'localhost' 'root'@'127.0.0.1' 'root'@'192.168.1.1' 'root'@'%' Host: 127.0.0.1!= localhost 127.0.0.1 lokales TCP/IP Interface localhost lokaler UNIX File-Socket Host: Quell von der ich kommen darf root in MySQL = sys as sysdba in Oracle 5 / 28

Port und Socket Port und Socket ( Listener ) shell> lsof -p 12890 COMMAND PID USER FD TYPE DEVICE NODE NAME... mysqld 12890 mysql 15u IPv4 31258 TCP *:3306 (LISTEN) mysqld 12890 mysql 17u unix 0x0000 31259 /tmp/mysql.sock... Wir haben keine Listener Prozess wie Oracle. 6 / 28

User und aktueller User I Über UNIX File-Socket shell> mysql --user=root # --socket=/tmp/mysql.sock mysql> status;... Current user: root@localhost Connection: Localhost via UNIX socket UNIX socket: /tmp/mysql.sock... mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ USER() CURRENT_USER() +----------------+----------------+ root@localhost root@localhost +----------------+----------------+ Ohne langsamen TCP/IP Stack 7 / 28

User und aktueller User II Über lokalen TCP/IP-Socket shell> mysql --user=root --host=127.0.0.1 mysql> status;... falsch oder zumindest verwirrend! Current user: root@localhost Müsste sein: root@127.0.0.1 Connection: 127.0.0.1 via DNS TCP/IP Lookup TCP port: 3306... mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ USER() CURRENT_USER() +----------------+----------------+ root@localhost root@localhost --> falsch! DNS lookup +----------------+----------------+ Ohne langsames TCP/IP Netzwerk 8 / 28

User und aktueller User III Über remote TCP/IP-Socket shell> mysql --user=root --host=192.168.1.35 mysql> status;... Current user: root@chef.rebenweg Connection: 192.168.1.35 via TCP/IP TCP port: 3306... mysql> SELECT USER(), CURRENT_USER(); +--------------------+----------------+ USER() CURRENT_USER() +--------------------+----------------+ root@chef.rebenweg root@% +--------------------+----------------+ Mit langsamem TCP/IP Netzwerk 9 / 28

Zurück zur Sicherheit Root Password Root von remote Anonymous user mysql> SELECT user, host, password FROM mysql.user; mysql> -- 5.7: SELECT user, host, authentication_string FROM mysql.user; +-------------+-----------+---------------------------+ user host password +-------------+-----------+---------------------------+ root localhost root master root 127.0.0.1 root ::1 localhost master +-------------+-----------+---------------------------+ 10 / 28

Anonymous User + Test Schema Warum ist der Anonymous User heikel? mysql> SHOW GRANTS FOR ''@localhost; +--------------------------------------+ Grants for @localhost +--------------------------------------+ GRANT USAGE ON *.* TO ''@'localhost' +--------------------------------------+ mysql> SELECT * FROM mysql.db\g Host: % Db: test\_% User: Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y... 11 / 28

MySQL 5.7 MySQL 5.7 ist secure by default d.h. Härtung ist nach Installation bereits gelaufen: shell> mysqld initizialize... Altes ( unsicheres ) intialisieren: shell> mysqld initizialize insecure... Root Password im MySQL error log (oder STDOUT): shell> grep password error.log [Note] A temporary password is generated for \ root@localhost: ptj(ynrrf4od 12 / 28

MySQL härten (5.6 und 5.7) Entweder Von Hand (DROP USER, ALTER USER, etc...) Oder mysql_secure_installation shell> mysql_secure_installation --user=root Enter current password for root (enter for none): OK, successfully used password, moving on... Set root password? [Y/n] Y Remove anonymous users? [Y/n] y... Success! Disallow root login remotely? [Y/n] y... Success! Remove test database and access to it? [Y/n] y - Dropping test database...... Success! - Removing privileges on test database...... Success! Reload privilege tables now? [Y/n] y... Success! 13 / 28

Weitere Massnahmen Keine Shutdown oder Super Privilegien (ALL ausser root) mysql> SELECT user, host, super_priv, shutdown_priv FROM mysql.user WHERE super_priv = 'Y' OR shutdown_priv ='Y'; +-------------+-----------+------------+---------------+ user host super_priv shutdown_priv +-------------+-----------+------------+---------------+ root localhost Y Y replication master Y Y +-------------+-----------+------------+---------------+ Kein Zugriff auf mysql Schema (ausser root) mysql> SELECT user, host, db, table_name, table_priv FROM mysql.tables_priv; mysql> -- Check also: mysql.db, mysql.columns.priv! +------+------+-------+-------------+------------+ user host db table_name table_priv +------+------+-------+-------------+------------+ spy % mysql tables_priv Select +------+------+-------+-------------+------------+ 14 / 28

Password-Stärken-Validierung Installation Plug-in seit MySQL 5.6 Default in MySQL 5.7 Mittels mysql_secure_installation mysql> SELECT plugin_name, plugin_status, plugin_license FROM information_schema.plugins WHERE plugin_name LIKE 'validate_password%'; +-------------------+--------+---------+ plugin_name status license +-------------------+--------+---------+ validate_password ACTIVE GPL +-------------------+--------+---------+ mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so'; 15 / 28

Konfiguration LOW Länge 8 MEDIUM Länge 8, Numerisch, Gross/Klein und Sonderzeichen STRONG Länge 8, Numerisch, Gross/Klein, Sonderzeichen und Dictionary mysql> SHOW GLOBAL VARIABLES LIKE 'validate_password%'; +--------------------------------------+--------+ Variable_name Value +--------------------------------------+--------+ validate_password_dictionary_file validate_password_length 8 validate_password_mixed_case_count 1 validate_password_number_count 1 validate_password_policy MEDIUM validate_password_special_char_count 1 +--------------------------------------+--------+ 16 / 28

Passwort in File Unverschlüsselt ~/.my.cnf aber bitte mit chmod 600!!! # # ~/.my.cnf # [client] user = root password = secret shell> mysql # ohne nix! 17 / 28

Passwort in File (verschlüsselt) Verschlüsselt (aber knackbar!) ~/.mylogin.cnf shell> mysql_config_editor set --login-path=mysqld1 \ --host=localhost --user=root --password shell> mysql_config_editor print --all [mysqld1] user = root password = ***** host = localhost shell> mysql --login-path=mysqld1 # ohne nix! 18 / 28

Client/Server Verschlüsselung Früher: Passwort im Klartext! Dann: Passwort gehasht, SSL optional MySQL 5.7 SSL per default shell> mysql --user=root --host=127.0.0.1 --ssl-mode=required mysql> SHOW SESSION STATUS LIKE 'Ssl_%'; +---------------+--------------------+ Variable_name Value +---------------+--------------------+ Ssl_cipher DHE-RSA-AES256-SHA Ssl_version TLSv1.2 +---------------+--------------------+ mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version'; +---------------+-----------------------+ Variable_name Value +---------------+-----------------------+ tls_version TLSv1,TLSv1.1,TLSv1.2 (EE) +---------------+-----------------------+ 19 / 28

Schlüssel erstellen (5.7) shell> mysql_ssl_rsa_setup --datadir=/var/lib/mysql shell> ll *.pem -rw------- 1 mysql mysql 1675 Nov 7 17:46 ca-key.pem -rw-r--r-- 1 mysql mysql 1074 Nov 7 17:46 ca.pem -rw-r--r-- 1 mysql mysql 1078 Nov 7 17:46 client-cert.pem -rw------- 1 mysql mysql 1675 Nov 7 17:46 client-key.pem -rw------- 1 mysql mysql 1679 Nov 7 17:46 private_key.pem -rw-r--r-- 1 mysql mysql 451 Nov 7 17:46 public_key.pem -rw-r--r-- 1 mysql mysql 1078 Nov 7 17:46 server-cert.pem -rw------- 1 mysql mysql 1675 Nov 7 17:46 server-key.pem mysql> SHOW GLOBAL VARIABLES LIKE 'ssl%'; +---------------+-----------------+ Variable_name Value +---------------+-----------------+ ssl_ca ca.pem Eingenes CA Zertifikat ssl_capath ssl_cert server-cert.pem Server Zertifikat ssl_key server-key.pem Server Priave Key +---------------+-----------------+ 20 / 28

Upgrade Minor Version 5.7.12 -> 5.7.15 (Patch) Major Version 5.6.31 -> 5.7.16 (Upgrade) In MySQL beides gleich (aufwändig): DB Backupen und Stoppen Binaries austauschen DB Starten shell> mysql_upgrade Alles (ohne Backup) dauert ca. 15 Minuten 21 / 28

Upgrade Info Oracle CPU (4 x pro Jahr: Jan, Apr, Jul, Okt) MySQL Change History http://dev.mysql.com/doc/relnotes/mysql/5.7/en/ What is new in MySQL 5.7 http://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html Übersicht FromDual: http://fromdual.com/security 22 / 28

MySQL Account Management Seit MySQL 5.7: Account sperren Password Verfallszeit mysql> ALTER USER 'oli'@'localhost' ACCOUNT LOCK; mysql> ALTER USER 'quack'@'%' PASSWORD EXPIRE INTERVAL 15 DAY; mysql> SELECT user, host, password_expired AS expired, LEFT(password_last_changed, 10) AS last_changed, password_lifetime AS lifetime, account_locked AS locked FROM mysql.user; +-------------+-----------+---------+--------------+----------+--------+ user host expired last_changed lifetime locked +-------------+-----------+---------+--------------+----------+--------+ root localhost N 2015-12-16 NULL N focmm master Y 2015-12-18 NULL N oli localhost N 2016-08-05 NULL Y quack % N 2016-09-04 15 N +-------------+-----------+---------+--------------+----------+--------+ 23 / 28

Sicherheitsrelevante Variablen Netzwerk Zugriff deaktivieren (nur noch lokaler Zugriff) skip_networking Namensauflösung deaktivieren (DNS) skip_name_resolve Authentisierung deaktivieren (!!!) skip_grant_tables Braucht man um root zurückzusetzen Dateien auf Server lesen/schreiben (LOAD DATA INFILE) local_infile Dateien nur aus sicheren Ordnern auf Server lesen secure_file_priv http://dev.mysql.com/doc/refman/5.7/en/security-options.html 24 / 28

Verschlüsselung Entwickler + Nutzer DBA + Admin Zugriff auf Files und Backups Hardware- Admin SSL Applikation Datenbank Prozess Tablespace DB Files Filesystem / LVM Disk Verschlüsselung in Anwendung + Rollenkonzept + Deployment Netzwerk- Lauscher Schwierig zu sichern Siehe Applikation + Audit 2 x ½ Passwörter Backup Zugriff auf und Entsorgung von HW 25 / 28

MySQL Enterprise Monitor 26 / 28

Weitere Features MySQL Enterprise Firewall SQL Firewall gegen SQL Injections MySQL Enterprise Audit Auditing gegen Audit Vault (PCI, HIPAA, FERPA, SOX) MySQL Enterprise Authentication LDAP/AD, Kerberos, Windows Authentication MySQL Enterprise Encryption TDE, sha256, etc. MySQL Enterprise Backup Physikalisches Backup für grosse Datenbanken 27 / 28

Q & A Fragen? Diskussion? Wir haben Zeit für ein persönliches Gespräch... FromDual bietet neutral und unabhängig: Beratung Remote-DBA Support für MySQL, Galera, Percona Server und MariaDB Schulung /presentations 28 / 28