SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
JDLL – 1er
avril 2017
Sécuriser et Chiffrer MariaDB
Christophe Villeneuve
@hellosct1
SQL – NoSQL – NewSQL - BigData
Qui ???
Christophe
Villeneuve
mozilla reps - firefox os - B2GOS - ausy - afup – lemug.fr – mysql – mariadb – drupal – demoscene – firefoxos – drupagora – phptour – forumphp – solutionlinux – Libre@toi – eyrolles – editions eni – programmez – linux pratique – webriver – phptv – elephpant - owasp -security
JDLL – 1er
avril 2017
Slide du premier
Avril -
poissonavril
Otarie
● Mammifère vivant en mer
● 120 espèces
● Espèce en voie de disparition
● Otarie VS Homme
– La Chasse
– Spectacle
– Dresser pour une utilisation militaire
● Nourriture préférée
– Harengs, calmars, maquereaux, poissons...
SLIDE
JDLL – 1er
avril 2017
Aujourd'hui
● On a bien rigolé :-)
● Quelques rappels MariaDB
● SQL + NoSQL = NewSQL
● BigData
● Sécurité
● Chiffrement
JDLL – 1er
avril 2017
Mémoire
JDLL – 1er
avril 2017
✔ Fondé par
✔ Monty Widenius
✔ David Axmark
✔ 1983 – 1ère idée
✔ Fondé en 1995
✔ 2007 Préparation pour
Nasdaq
✔ 2008 Rachat par Sun
✔ 2009 Sun racheté par Oracle
✔ Promesse de Oracle sur 5
ans (fin 2014)
L'origine Dates importantes
Rappels
JDLL – 1er
avril 2017
✔ Communauté d'amis
✔ 100 % Open source et
compatible MySQL
✔ Plateforme d'innovation
✔ Des commiteurs
✔
Fondation (2013)
✔
Dec 2008 Création de 
Monty Program 
 → Monty Widenius
­­­­­­­­­­­­ MariaDB ­­­­­­­­­­­­­
✔
5.1 (Fev 2010)
✔
5.5.x (Dec 2016)
✔
10.0 (Mars 2013)
✔
10.1.x (Mars 2017)
✔
10.2 (1er semestre 2017) 
Galera people
Compression Multimaster
Replication
MariaDB : Le projet...
JDLL – 1er
avril 2017
✔ PHP (driver natif) → BSD licence
✔ Python
✔ Perl
✔ Ruby
✔ .NET avec MyODBC
✔ JDBC (basé sur drizzle driver)
✔ C
✔ Oracle connector (licence GPL)
Tous sont LGPL → Aucune licence commerciale
Différents connecteurs avec MariaDB
JDLL – 1er
avril 2017
MariaDB Repositories : installation
> sudo apt-get install software-properties-common
> sudo apt-key adv --recv-keys --keyserver
hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
> sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el]
http://fr.mirror.babylon.network/mariadb/repo/10.1/ubuntu
trusty main'
https://downloads.mariadb.org/mariadb/repositories/#mirror=babylon-fr&distro=Ubuntu&distro_release=trusty--ubuntu_trusty&version=10.1
JDLL – 1er
avril 2017
✔ sudo apt-get install mariadb-server mariadb-client
✔ Vous retrouvez :
✔ /etc/mysql/my.cnf
✔ > mysql
✔ Au final
Linux
JDLL – 1er
avril 2017
NewSQL
→ Développement
→ Moteur de stockages
+
JDLL – 1er
avril 2017
Développement
JDLL – 1er
avril 2017
✔ Pont entre les BDD relationnelles et non relationnelles
✔ Toutes les colonnes stockées dans un « blob »
✔ Possibilité de le manipuler
✔ Possibilité de créer des index Virtuels
Colonnes Dynamiques
JDLL – 1er
avril 2017
create table newsql( 
id int 
    auto_increment    
    primary key,
nom varchar(40),
type enum 
     ('animal',
     'ordinateur'),
prix int,
nosql blob);
COLUMN_CREATE(
column_nr, 
value [as type],
[
column_nr, 
value [as type]
], 
...)
Exemple (colonne dynamique) 1/3
ID nom type Prix blob
Multi produits
JDLL – 1er
avril 2017
Exemple (colonne dynamique) 2/3
>INSERT into newsql values (NULL, 'Atari' ,'ordinateur',500, 
COLUMN_CREATE('couleur', 'Noir', 'type' , 'STe'));
>INSERT into newsql values (NULL, 'elePHPant','animal',20, 
COLUMN_CREATE('taille', 'normal', 'description' , 'peluche'));
>UPDATE newsql SET nosql = COLUMN_ADD(nosql, 'couleur' , 'blue') 
WHERE id=2;
ID Nom type prix couleur type taille description
1 Atari Ordinateur 500 Noir Ste
2 elePHPant animal 20 bleu normal peluche
>SELECT nom, column_list (nosql) FROM newsql;
Multi produits
JDLL – 1er
avril 2017
Exemple (colonne dynamique) 3/3
>SELECT nom, COLUMN_JSON(nosql) FROM newsql;
>SELECT id,type,nom,
COLUMN_GET(nosql, 'couleur' as char) AS couleur,prix FROM newsql;
Multi produits
JDLL – 1er
avril 2017
Moteur de stockage
storage engine
JDLL – 1er
avril 2017
Ouverture vers le NewSQL
● Moteur de stockage : CassandraSE
● Dispo MariaDB 10.0+
● Brique de Apache Cassandra
● Données non relationnelles (NoSQL)
● Assurer l'intégration des données SQL / NoSQL
● Mapping possible
● Manipulations :
static columns, dynamic columns, rowkey
● Installation dans My.cnf
[mysqld]
plugin-load=ha_cassandra.so
JDLL – 1er
avril 2017
CassandraSE : Utilisation (1/2)
> create table t2 (rowkey varchar(36) primary key,
data1 varchar(60),
data2 varchar(60)
) engine=cassandra
keyspace='mariadbtest'
thrift_host='localhost'
column_family='cf1';
Clé
primaire
obligatoire
Colonnes
statiques
Sous ensemble
des colonnes CF
JDLL – 1er
avril 2017
CassandraSE : Utilisation (2/2)
> insert into t1 values
('rowkey10', 'data1-value', 123456),
('rowkey11', 'data1-value2', 34543);
> select * from t1 where rowkey='rowkey11';
JDLL – 1er
avril 2017
Manipuler les données : Connect
● Dispo MariaDB 10.0+
● ETL : Extract, transform et Load
● Lecture / Ecriture / MAJ
– TXT, DBF, INI, XML
– MS Access, MS Excel, TBL (similaire à MERGE)
– ODBC, MySQL,SQLite, Oracle, DB2, WMI…
– NoSQL : MongoDB
● Locale ou distant
● Custom possible
● Accès en parallèle sur multitables
● Installation dans My.cnf
[mysqld]
plugin-load=ha_connect.so
JDLL – 1er
avril 2017
Connect : exemple CSV
● Fichier
– first,last,birthday
– "Christophe","Villeneuve","Jan 1"
– "PHP","ODBC","Nov 22"
> CREATE TABLE users_csv (
first varchar(32) NOT NULL,
last varchar(32) NOT NULL,
birthday varchar(50) NOT NULL
) ENGINE=CONNECT TABLE_TYPE =CSV FILE_NAME ='/var/lib/mysql/users.csv'
HEADER=1 SEP_CHAR=',' QUOTED=1;
> SELECT * FROM users_csv;
| first | last | birthday |
+---------------+---------------+-------------+
| Christophe | Villeneuve | Jan 1 |
| PHP | ODBC | Nov 22 |
+---------------+---------------+-------------+
JDLL – 1er
avril 2017
Connect : exemple ODBC
> create Table table2
ENGINE=CONNECT TABLE_TYPE=ODBC
SRCDEF='select key, sum(l_quantity) qt from dbt3.table1 group by key'
CONNECTION='DSN=oracle;UID=login;PWD=password';
> MariaDB [dbt3]> select sum(qt) from (select qt from table2) as
result;
→ 31444
Valeur de sum(qt)
JDLL – 1er
avril 2017
Connect : exemple MongoDB (1/2)
● Driver : ha_connect.so
● Méthode ODBC
– > mongoexport
–db test
–collection restaurants
–out
/var/lib/mysql/test/restaurants.json
–jsonArray
https://github.com/NYUITP/sp13_10g
JDLL – 1er
avril 2017
Connect : exemple MongoDB (2/2)
● Avec MariaDB
{
“_id” : ObjectId(“580cda5aaf1de8b908ccfe40”),
“address” : { “building” : “522”, “coord” : [ -73.95171, 40.767461 ], “street” : “East 74 Street”, “zipcode” : “10021” },
“borough” : “Manhattan”,
“cuisine” : “American”,
“grades” : [ { “date” : ISODate(“2014-09-02T00:00:00Z”), “grade” : “A”, “score” : 12 }, { “date” : ISODate(“2013-12-19T00:00:00Z”),
“grade” : “B”, “score” : 16 }, { “date” : ISODate(“2013-05-28T00:00:00Z”), “grade” : “A”, “score” : 9 }, { “date” : ISODate(“2012-
12-07T00:00:00Z”), “grade” : “A”, “score” : 13 }, { “date” : ISODate(“2012-03-29T00:00:00Z”), “grade” : “A”, “score” : 11 } ],
“name” : “Glorious Food”,
“restaurant_id” : “40361521”
}
> SELECT proprietors.owner, restaurants.name, grades_grade FROM proprietors, restaurants
WHERE proprietors.restaurant_id=restaurants.restaurant_id AND grades_date>‘2015-01-08’
AND grades_grade IN(‘A’,‘B’);
+———————+————————————————+————–+
| owner | name | grades_grade |
+———————+————————————————+————–+
| Treva Tullis | Bagels N Buns | A |
| Maud Morningstar | La Fusta Restaurant | A |
| Vanessa Vowell | The Greek Corner | A |
| Teressa Truex | Mcdonald’S | A |
| Eli Enright | Neron’S Pizza | A
● Avec MongoDB
JDLL – 1er
avril 2017
Storage Engine : ColumnStore
BigData
JDLL – 1er
avril 2017
MariaDB ColumnStore
● Portage de la Base de données : InfiniDB 4.6.7
● Disponible à partir de MariaDB 10.1
● Moteur de stockage orienté en colonnes
● Architecture (en parallèle)
– Exécution de requêtes distribuée
– Chargement de données
● Licence GPL
JDLL – 1er
avril 2017
Axée sur la rangée VS Orienté Column
● Axée sur la rangée
– Les Lignes stockées séquentiellement dans un fichier
● Orienté colonne
– Chaque colonne est stockée dans un fichier séparé
JDLL – 1er
avril 2017
Pourquoi ?
● Traitement des 'petabytes' de données
● Utilisation
– Temps de réponse en temps réel
● aux requêtes analytiques
– Traitement par lots → Batch
– Algorithmique
● Sécurité
– Bénéficie des mêmes fonctionnalités de sécurité
existante
– Cryptage sur les données en mouvement
JDLL – 1er
avril 2017
Réplication (en temps réel)
● MariaDB MaxScale
– Maitre(s) / Eclave(s)
● Réplications les transactions
– MariaDB → Hadoop
● Pas d'impact
– Sur les performances
– Sur les métadonnées
JDLL – 1er
avril 2017
Architecture
● Moteur utilisateur : précompte les requêtes SQL
● Module de performance : moteur de traitement
distribué
(C) MariaDB
JDLL – 1er
avril 2017
Sécuriser
JDLL – 1er
avril 2017
Lors de l'installation
> mysql_secure_installation
Enter current password for root (enter for none): ← Entrée
Set root password? [Y/n] ← y
New password: ← saisir nouveau Mot de passe
Re-enter new password: ← resaisir Mot de passe
Remove anonymous users? [Y/n] ← y
Disallow root login remotely? [Y/n] ← y
Reload privilege tables now? [Y/n] ← y
JDLL – 1er
avril 2017
Les connexions 'SSL / TLS' sécurisés disponibles
● Connexions client / serveur → protocole TLS
– Les données peuvent être cryptées pendant le transfert à
l'aide du protocole TLS
● Variable système SSL / TLS
● Variable d'état SSL / TLS
● Réplication avec connexions sécurisées
– Maître(s) / Esclave(s) avec des données cryptées
JDLL – 1er
avril 2017
Connexion 'SSL / TLS'
● Par défaut
– Connexion non chiffré
● Si le serveur prend en charge les connexions sécurisées
→ OUI
● Pour activer TLS
– Démarrer le serveur avec l'option --ssl
> SHOW VARIABLES LIKE 'have_ssl';
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| have_ssl | DISABLED |
+---------------+----------+
https://mariadb.com/kb/en/mariadb/secure-connections-overview/
JDLL – 1er
avril 2017
● Cryptage de données
● Transfert TLS
● Exemple
– have_openssl
– have_ssl
● Interchangeable SSL
● SSL
n'est plus considéré comme sécurisé
● Exemple
– ssl_ca
– ssl_capath
– ...
Options 'SSL / TLS'
Système/Status de variables Attention
https://mariadb.com/kb/en/mariadb/ssltls-system-variables/
https://mariadb.com/kb/en/mariadb/ssltls-status-variables/
JDLL – 1er
avril 2017
Réplication
https://mariadb.com/kb/en/mariadb/replication-with-secure-connections/
● Maître(s) / Esclave(s)
● Répliqués des données cryptées
● Activation des connexions sécurisées (obligatoire)
● Cluster
Attention
Si un des serveurs n'est pas configuré pour les connexions sécurisés
→ les connexions ne seront pas cryptées
JDLL – 1er
avril 2017
Réplication : exemple (1/3)
● Création SSL dans chaque serveur
sudo mkdir -p /etc/mariadb/ssl
● Gestion des certificats
$ sudo openssl genrsa 4096 > ca-key.pem
$ sudo openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem
● Créer un certificat de serveur sur serveur1
$ sudo openssl req -newkey rsa:4096 -days 3600 -nodes -keyout server-key.pem -out
server-req.pem
$ sudo openssl rsa -in server-key.pem -out server-key.pem
$ sudo openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-
key.pem -set_serial 01 -out server-cert.pem
JDLL – 1er
avril 2017
Réplication : exemple (2/3)
● Vérification des certificats (serveur1)
sudo openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
● Résultat
server-cert.pem: OK
client-cert.pem: OK
● Copier le certificat vers les autres serveurs
sudo scp /etc/mariadb/ssl/*.pem root@10.0.0.2:/etc/mariadb/ssl/
● Installation MariaDB
sudo apt-get install mariadb mariadb-server -y
JDLL – 1er
avril 2017
Réplication : exemple (3/3)
● Configuration de my.cnf
– pour chaque serveur
# SSL
ssl-ca=/etc/mariadb/ssl/ca-cert.pem
ADD under [mysqld]:
# SSL
ssl-ca=/etc/mariadb/ssl/ca-cert.pem
ssl-cert=/etc/mariadb/ssl/server-cert.pem
ssl-key=/etc/mariadb/ssl/server-key.pem
CHANGE under [mysqld]:
server-id = 1
log-bin=mysql-bin
binlog_format=mixed
Pas de modifications (processus identique) pour :
La réplication / MariaDB Galera Cluster
JDLL – 1er
avril 2017
Le chiffrement
JDLL – 1er
avril 2017
Pourquoi chiffrer ?
● Avec MySQL / MariaDB / Percona
● Mariadb → Chiffrer au niveau des tables
– Innodb
– XtraDB (Percona)
$ INSERT INTO users (username, password)
VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));
$ SELECT AES_DECRYPT(password, 'key12346123')
FROM users
WHERE username = 'admin';
JDLL – 1er
avril 2017
Chiffrement (1/2)
● Disponible pour 10.1+
● Contribution Google
● Chiffrer
– Pas de modification pour vos applications
– Pas de dégradation des performances globales
– Une meilleure pratique en matière de sécurité de
données
● Storage engine supporté
– XtraDB
– InnoDB
JDLL – 1er
avril 2017
Chiffrement (2/2)
● Chiffrement : support de clefs (AES Algorithm)
table individuel → PAGE_ENCRYPTION=1
tablespace encryption → Crypte tout ainsi que les logs
● Plugin : file_key_management
– Plugin de cryptage
– Lit les clés de cryptage d'un fichier
– Options :
● File_key_management_filename
→ Où se trouve le fichier
● File_key_management_filekey
→ Clé facultative pour déchiffrer le fichier de clés
● File_key_management_encryption_algorithm
→ Algorithme de cryptage à utiliser.
https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/
JDLL – 1er
avril 2017
Avantages
● Par rapport à d'autres BDD Open Source
– Chiffrement des données au repos
. Chiffrement au niveau des instances et des tables
. Avec support des clés tournantes (contribution Google)
– Validation des mots de passe
– Contrôle d'accès de base de profils (par défaut)
. Renforcé et optimisé
● Type de chiffrement supporté
– Clefs de chiffrement identifier (32 bit)
– Advanced Encryption Standard (AES) 128 / 192 / 256 bit
– Exemple :
$ openssl enc -aes-256-cbc -md sha1 -k secret -in keys.txt -out keys.enc
JDLL – 1er
avril 2017
config MariaDB : my.cnf
[mysqld]
plugin-load-add=file_key_management.so
file-key-management
file-key-management-filename = /home/mdb/keys.enc
innodb-encrypt-tables
innodb-encrypt-log
innodb-encryption-threads=4
aria-encrypt-tables=1 # PAGE row format
encrypt-tmp-disk-tables=1 # this is for Aria
JDLL – 1er
avril 2017
Chiffrer une table
CREATE TABLE client (
client_id bigint not null primary key,
client_name varchar(80),
client_infosensible varchar(20)
)
ENGINE=InnoDB
page_encryption=1
page_encryption_key=1;
Clef 1
Chiffrement 1
Information très
sensible
Password...
● En mode fixe
JDLL – 1er
avril 2017
Chiffrer : mode avancé
● Tablespace encrypton (Google)
● Choisir un algorithme de cryptage
● Spécifier ce qui doit être chiffrer
– Innodb-encrypt-tables
– Aria
– Aria-encrypt-tables
– Crypter-tmp-disk-tables
– Innodb-encrypt-log
● Prévoir les rotations (impératif)
– innodb-encryption-threads = 4
– innodb-encryption-rotate-key-age = 1800
JDLL – 1er
avril 2017
Validation du mot de passe
● Les rappels du mot de passe
● MariaDB propose : Validation de mot de passe
– S'assurer que les mots de passe 'utilisateur'
répondent à certaines exigences de sécurité
– Plugin dédiée
– Contrôle par rapport à la configuration
● Fonctions : SET PASSWORD et GRAND
https://mariadb.com/kb/en/mariadb/password-validation/
JDLL – 1er
avril 2017
Exemple (1/2)
SET PASSWORD = PASSWORD('plain-text password');
SET PASSWORD FOR `user`@`host` = PASSWORD('plain-text password');
SET PASSWORD = OLD_PASSWORD('plain-text password');
SET PASSWORD FOR `user`@`host` = OLD_PASSWORD('plain-text password');
CREATE USER `user`@`host` IDENTIFIED BY 'plain-text password';
GRANT privileges TO `user`@`host` IDENTIFIED BY 'plain-text password';
https://mariadb.com/kb/en/mariadb/password-validation/
SET PASSWORD = 'password hash';
SET PASSWORD FOR `user`@`host` = 'password hash';
CREATE USER `user`@`host` IDENTIFIED BY PASSWORD 'password hash';
CREATE USER `user`@`host` IDENTIFIED VIA mysql_native_password USING 'password hash';
CREATE USER `user`@`host` IDENTIFIED VIA mysql_old_password USING 'password hash';
GRANT privileges TO `user`@`host` IDENTIFIED BY PASSWORD 'password hash';
GRANT privileges TO `user`@`host` IDENTIFIED VIA mysql_native_password USING 'password
hash';
GRANT privileges TO `user`@`host` IDENTIFIED VIA mysql_old_password USING 'password hash';
● Avant
● Avec clé de hash
JDLL – 1er
avril 2017
Exemple (2/2)
● Vérification
● Erreur de validation
$ UPDATE mysql.user
SET password='password hash'
WHERE user='user' AND host='host';
$ FLUSH PRIVILEGES;
SUCCES
> grant select on *.* to foobar identified by 'toto';
ERROR HY000: Your password does not satisfy the current policy requirements
> show warnings;
JDLL – 1er
avril 2017
En résumé
JDLL – 1er
avril 2017
Merci
Questions
Christophe Villeneuve
@hellosct1

Contenu connexe

Tendances

08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)Noël
 
Meetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupalMeetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupalAurelien Navarre
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasPierre-Alban DEWITTE
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur webNoël
 
Zabbix, garder un oeil toujours ouvert
Zabbix, garder un oeil toujours ouvertZabbix, garder un oeil toujours ouvert
Zabbix, garder un oeil toujours ouvertLook a box
 
Installer et configurer MariaDB
Installer et configurer MariaDBInstaller et configurer MariaDB
Installer et configurer MariaDBlemugfr
 
Configuration Management avec Drupal 8
Configuration Management avec Drupal 8Configuration Management avec Drupal 8
Configuration Management avec Drupal 8Aurelien Navarre
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linuxKhalid ALLILI
 
Drupal 7 : tour d'horizon des nouveautés
Drupal 7 : tour d'horizon des nouveautésDrupal 7 : tour d'horizon des nouveautés
Drupal 7 : tour d'horizon des nouveautésLINAGORA
 
08 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 208 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 2Noël
 
09 01 configuration du serveur samba
09 01 configuration du serveur samba09 01 configuration du serveur samba
09 01 configuration du serveur sambaNoël
 
MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
MHA : MySQL haute dispo, chez Viadeo par Olivier DasiniMHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
MHA : MySQL haute dispo, chez Viadeo par Olivier DasiniOlivier DASINI
 
07 03 sécurisation d'un serveur dns
07 03 sécurisation d'un serveur dns07 03 sécurisation d'un serveur dns
07 03 sécurisation d'un serveur dnsNoël
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesSOAT
 
Scalabilité de MongoDB
Scalabilité de MongoDBScalabilité de MongoDB
Scalabilité de MongoDBMongoDB
 

Tendances (20)

08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)08 04 mise en place d'un serveur mandataire (proxy)
08 04 mise en place d'un serveur mandataire (proxy)
 
Meetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupalMeetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupal
 
Tout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pasTout ce que le getting started mongo db ne vous dira pas
Tout ce que le getting started mongo db ne vous dira pas
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web
 
Zabbix, garder un oeil toujours ouvert
Zabbix, garder un oeil toujours ouvertZabbix, garder un oeil toujours ouvert
Zabbix, garder un oeil toujours ouvert
 
Squid squid guard
Squid squid guardSquid squid guard
Squid squid guard
 
Installer et configurer MariaDB
Installer et configurer MariaDBInstaller et configurer MariaDB
Installer et configurer MariaDB
 
Configuration Management avec Drupal 8
Configuration Management avec Drupal 8Configuration Management avec Drupal 8
Configuration Management avec Drupal 8
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Squid
SquidSquid
Squid
 
Pgbackrest meetup
Pgbackrest meetupPgbackrest meetup
Pgbackrest meetup
 
Drupal 7 : tour d'horizon des nouveautés
Drupal 7 : tour d'horizon des nouveautésDrupal 7 : tour d'horizon des nouveautés
Drupal 7 : tour d'horizon des nouveautés
 
08 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 208 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 2
 
09 01 configuration du serveur samba
09 01 configuration du serveur samba09 01 configuration du serveur samba
09 01 configuration du serveur samba
 
1 2-3-grails
1 2-3-grails1 2-3-grails
1 2-3-grails
 
MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
MHA : MySQL haute dispo, chez Viadeo par Olivier DasiniMHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
 
07 03 sécurisation d'un serveur dns
07 03 sécurisation d'un serveur dns07 03 sécurisation d'un serveur dns
07 03 sécurisation d'un serveur dns
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de données
 
Scalabilité de MongoDB
Scalabilité de MongoDBScalabilité de MongoDB
Scalabilité de MongoDB
 
Samba 4
Samba 4Samba 4
Samba 4
 

Similaire à Sécuriser & chiffrer Mariadb - JDLL 2017

MariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeursMariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeursChristophe Villeneuve
 
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)Alphorm
 
Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)Christophe Villeneuve
 
Deployer PHP et MariaDB dans Azure - TechDays
Deployer PHP et MariaDB dans Azure - TechDaysDeployer PHP et MariaDB dans Azure - TechDays
Deployer PHP et MariaDB dans Azure - TechDaysChristophe Villeneuve
 
Déployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans AzureDéployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans AzureMicrosoft
 
Les nouveautés stockage dans Windows Server 2012 R2
Les nouveautés stockage dans Windows Server 2012 R2Les nouveautés stockage dans Windows Server 2012 R2
Les nouveautés stockage dans Windows Server 2012 R2Georgeot Cédric
 
Journées SQL Server - Optimisation SQL Server pour SharePoint
Journées SQL Server - Optimisation SQL Server pour SharePointJournées SQL Server - Optimisation SQL Server pour SharePoint
Journées SQL Server - Optimisation SQL Server pour SharePointBenoit Jester
 
GAB 2015 - Nouveautes sur le stockage de donnees dans Azure
GAB 2015  - Nouveautes sur le stockage de donnees dans AzureGAB 2015  - Nouveautes sur le stockage de donnees dans Azure
GAB 2015 - Nouveautes sur le stockage de donnees dans AzureJean-Luc Boucho
 
Dev cloud java : la tête dans les nuages
Dev cloud java : la tête dans les nuagesDev cloud java : la tête dans les nuages
Dev cloud java : la tête dans les nuagesSOAT
 
Meetup juin2013
Meetup juin2013Meetup juin2013
Meetup juin2013nperu
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasBruno Bonnin
 
Ce que tout DBA doit savoir sur SQL Server et SharePoint 2013
Ce que tout DBA doit savoir sur SQL Server et SharePoint 2013Ce que tout DBA doit savoir sur SQL Server et SharePoint 2013
Ce que tout DBA doit savoir sur SQL Server et SharePoint 2013serge luca
 
CV - Database Administrator ( French )
CV - Database Administrator ( French )CV - Database Administrator ( French )
CV - Database Administrator ( French )Franck VICTORIA
 
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data LakeGUSS
 
Récupération d’un Active Directory: comment repartir en confiance après une c...
Récupération d’un Active Directory: comment repartir en confiance après une c...Récupération d’un Active Directory: comment repartir en confiance après une c...
Récupération d’un Active Directory: comment repartir en confiance après une c...Identity Days
 

Similaire à Sécuriser & chiffrer Mariadb - JDLL 2017 (20)

MariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeursMariaDB à l'assaut des developpeurs
MariaDB à l'assaut des developpeurs
 
CVMourad2
CVMourad2CVMourad2
CVMourad2
 
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)
Alphorm.com Formation Microsoft SQL Server 2016 Business Intelligence (SSIS)
 
MariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQLMariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQL
 
MySQL et MariaDB dans le web‎
MySQL et MariaDB dans le web‎ MySQL et MariaDB dans le web‎
MySQL et MariaDB dans le web‎
 
Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)Automatisation des gestionnaires de contenus (CMS)
Automatisation des gestionnaires de contenus (CMS)
 
Deployer PHP et MariaDB dans Azure - TechDays
Deployer PHP et MariaDB dans Azure - TechDaysDeployer PHP et MariaDB dans Azure - TechDays
Deployer PHP et MariaDB dans Azure - TechDays
 
Déployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans AzureDéployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans Azure
 
Infrastructure as code drupal
Infrastructure as code drupalInfrastructure as code drupal
Infrastructure as code drupal
 
Les nouveautés stockage dans Windows Server 2012 R2
Les nouveautés stockage dans Windows Server 2012 R2Les nouveautés stockage dans Windows Server 2012 R2
Les nouveautés stockage dans Windows Server 2012 R2
 
Mariadb une base de données NewSQL
Mariadb une base de données NewSQLMariadb une base de données NewSQL
Mariadb une base de données NewSQL
 
Journées SQL Server - Optimisation SQL Server pour SharePoint
Journées SQL Server - Optimisation SQL Server pour SharePointJournées SQL Server - Optimisation SQL Server pour SharePoint
Journées SQL Server - Optimisation SQL Server pour SharePoint
 
GAB 2015 - Nouveautes sur le stockage de donnees dans Azure
GAB 2015  - Nouveautes sur le stockage de donnees dans AzureGAB 2015  - Nouveautes sur le stockage de donnees dans Azure
GAB 2015 - Nouveautes sur le stockage de donnees dans Azure
 
Dev cloud java : la tête dans les nuages
Dev cloud java : la tête dans les nuagesDev cloud java : la tête dans les nuages
Dev cloud java : la tête dans les nuages
 
Meetup juin2013
Meetup juin2013Meetup juin2013
Meetup juin2013
 
Tout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pasTout ce que le getting started MongoDB ne vous dira pas
Tout ce que le getting started MongoDB ne vous dira pas
 
Ce que tout DBA doit savoir sur SQL Server et SharePoint 2013
Ce que tout DBA doit savoir sur SQL Server et SharePoint 2013Ce que tout DBA doit savoir sur SQL Server et SharePoint 2013
Ce que tout DBA doit savoir sur SQL Server et SharePoint 2013
 
CV - Database Administrator ( French )
CV - Database Administrator ( French )CV - Database Administrator ( French )
CV - Database Administrator ( French )
 
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
[JSS2015] Azure SQL Data Warehouse - Azure Data Lake
 
Récupération d’un Active Directory: comment repartir en confiance après une c...
Récupération d’un Active Directory: comment repartir en confiance après une c...Récupération d’un Active Directory: comment repartir en confiance après une c...
Récupération d’un Active Directory: comment repartir en confiance après une c...
 

Plus de Christophe Villeneuve

La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxChristophe Villeneuve
 
controler vos donnees éthiques dans le web
controler vos donnees éthiques dans le webcontroler vos donnees éthiques dans le web
controler vos donnees éthiques dans le webChristophe Villeneuve
 
Open Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteOpen Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteChristophe Villeneuve
 
Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?Christophe Villeneuve
 
La sécurité applicative par le design
La sécurité applicative par le designLa sécurité applicative par le design
La sécurité applicative par le designChristophe Villeneuve
 
Mozilla french speaking community activites
Mozilla french speaking community activitesMozilla french speaking community activites
Mozilla french speaking community activitesChristophe Villeneuve
 
Monitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et MicrosoftMonitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et MicrosoftChristophe Villeneuve
 
Le futur de l'authentification webAuthn
Le futur de l'authentification webAuthnLe futur de l'authentification webAuthn
Le futur de l'authentification webAuthnChristophe Villeneuve
 
Tests d'accessibilite par la pratique
Tests d'accessibilite par la pratiqueTests d'accessibilite par la pratique
Tests d'accessibilite par la pratiqueChristophe Villeneuve
 
La réalité mélangée dans vos applications
La réalité mélangée dans vos applicationsLa réalité mélangée dans vos applications
La réalité mélangée dans vos applicationsChristophe Villeneuve
 
la boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtoolsla boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtoolsChristophe Villeneuve
 

Plus de Christophe Villeneuve (20)

La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans Firefox
 
pister les pisteurs
pister les pisteurspister les pisteurs
pister les pisteurs
 
controler vos donnees éthiques dans le web
controler vos donnees éthiques dans le webcontroler vos donnees éthiques dans le web
controler vos donnees éthiques dans le web
 
Open Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteOpen Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnante
 
Pentest bus pirate
Pentest bus piratePentest bus pirate
Pentest bus pirate
 
Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?
 
La sécurité applicative par le design
La sécurité applicative par le designLa sécurité applicative par le design
La sécurité applicative par le design
 
Foxfooding semaine 3
Foxfooding semaine 3Foxfooding semaine 3
Foxfooding semaine 3
 
Foxfooding
FoxfoodingFoxfooding
Foxfooding
 
Accessibilite web wcag rgaa
Accessibilite web wcag rgaaAccessibilite web wcag rgaa
Accessibilite web wcag rgaa
 
Mozilla french speaking community activites
Mozilla french speaking community activitesMozilla french speaking community activites
Mozilla french speaking community activites
 
Monitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et MicrosoftMonitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et Microsoft
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
Le futur de l'authentification webAuthn
Le futur de l'authentification webAuthnLe futur de l'authentification webAuthn
Le futur de l'authentification webAuthn
 
Send large files with addons
Send large files with addonsSend large files with addons
Send large files with addons
 
Tests d'accessibilite par la pratique
Tests d'accessibilite par la pratiqueTests d'accessibilite par la pratique
Tests d'accessibilite par la pratique
 
Donnez la voix aux machines
Donnez la voix aux machinesDonnez la voix aux machines
Donnez la voix aux machines
 
La réalité mélangée dans vos applications
La réalité mélangée dans vos applicationsLa réalité mélangée dans vos applications
La réalité mélangée dans vos applications
 
la boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtoolsla boite à outils de développements dans firefox devtools
la boite à outils de développements dans firefox devtools
 
la réalité mélangée de A a Z
la réalité mélangée de A a Zla réalité mélangée de A a Z
la réalité mélangée de A a Z
 

Sécuriser & chiffrer Mariadb - JDLL 2017

  • 1. JDLL – 1er avril 2017 Sécuriser et Chiffrer MariaDB Christophe Villeneuve @hellosct1 SQL – NoSQL – NewSQL - BigData
  • 2. Qui ??? Christophe Villeneuve mozilla reps - firefox os - B2GOS - ausy - afup – lemug.fr – mysql – mariadb – drupal – demoscene – firefoxos – drupagora – phptour – forumphp – solutionlinux – Libre@toi – eyrolles – editions eni – programmez – linux pratique – webriver – phptv – elephpant - owasp -security
  • 3. JDLL – 1er avril 2017 Slide du premier Avril - poissonavril Otarie ● Mammifère vivant en mer ● 120 espèces ● Espèce en voie de disparition ● Otarie VS Homme – La Chasse – Spectacle – Dresser pour une utilisation militaire ● Nourriture préférée – Harengs, calmars, maquereaux, poissons... SLIDE
  • 4. JDLL – 1er avril 2017 Aujourd'hui ● On a bien rigolé :-) ● Quelques rappels MariaDB ● SQL + NoSQL = NewSQL ● BigData ● Sécurité ● Chiffrement
  • 5. JDLL – 1er avril 2017 Mémoire
  • 6. JDLL – 1er avril 2017 ✔ Fondé par ✔ Monty Widenius ✔ David Axmark ✔ 1983 – 1ère idée ✔ Fondé en 1995 ✔ 2007 Préparation pour Nasdaq ✔ 2008 Rachat par Sun ✔ 2009 Sun racheté par Oracle ✔ Promesse de Oracle sur 5 ans (fin 2014) L'origine Dates importantes Rappels
  • 7. JDLL – 1er avril 2017 ✔ Communauté d'amis ✔ 100 % Open source et compatible MySQL ✔ Plateforme d'innovation ✔ Des commiteurs ✔ Fondation (2013) ✔ Dec 2008 Création de  Monty Program   → Monty Widenius ­­­­­­­­­­­­ MariaDB ­­­­­­­­­­­­­ ✔ 5.1 (Fev 2010) ✔ 5.5.x (Dec 2016) ✔ 10.0 (Mars 2013) ✔ 10.1.x (Mars 2017) ✔ 10.2 (1er semestre 2017)  Galera people Compression Multimaster Replication MariaDB : Le projet...
  • 8. JDLL – 1er avril 2017 ✔ PHP (driver natif) → BSD licence ✔ Python ✔ Perl ✔ Ruby ✔ .NET avec MyODBC ✔ JDBC (basé sur drizzle driver) ✔ C ✔ Oracle connector (licence GPL) Tous sont LGPL → Aucune licence commerciale Différents connecteurs avec MariaDB
  • 9. JDLL – 1er avril 2017 MariaDB Repositories : installation > sudo apt-get install software-properties-common > sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db > sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://fr.mirror.babylon.network/mariadb/repo/10.1/ubuntu trusty main' https://downloads.mariadb.org/mariadb/repositories/#mirror=babylon-fr&distro=Ubuntu&distro_release=trusty--ubuntu_trusty&version=10.1
  • 10. JDLL – 1er avril 2017 ✔ sudo apt-get install mariadb-server mariadb-client ✔ Vous retrouvez : ✔ /etc/mysql/my.cnf ✔ > mysql ✔ Au final Linux
  • 11. JDLL – 1er avril 2017 NewSQL → Développement → Moteur de stockages +
  • 12. JDLL – 1er avril 2017 Développement
  • 13. JDLL – 1er avril 2017 ✔ Pont entre les BDD relationnelles et non relationnelles ✔ Toutes les colonnes stockées dans un « blob » ✔ Possibilité de le manipuler ✔ Possibilité de créer des index Virtuels Colonnes Dynamiques
  • 14. JDLL – 1er avril 2017 create table newsql(  id int      auto_increment         primary key, nom varchar(40), type enum       ('animal',      'ordinateur'), prix int, nosql blob); COLUMN_CREATE( column_nr,  value [as type], [ column_nr,  value [as type] ],  ...) Exemple (colonne dynamique) 1/3 ID nom type Prix blob Multi produits
  • 15. JDLL – 1er avril 2017 Exemple (colonne dynamique) 2/3 >INSERT into newsql values (NULL, 'Atari' ,'ordinateur',500,  COLUMN_CREATE('couleur', 'Noir', 'type' , 'STe')); >INSERT into newsql values (NULL, 'elePHPant','animal',20,  COLUMN_CREATE('taille', 'normal', 'description' , 'peluche')); >UPDATE newsql SET nosql = COLUMN_ADD(nosql, 'couleur' , 'blue')  WHERE id=2; ID Nom type prix couleur type taille description 1 Atari Ordinateur 500 Noir Ste 2 elePHPant animal 20 bleu normal peluche >SELECT nom, column_list (nosql) FROM newsql; Multi produits
  • 16. JDLL – 1er avril 2017 Exemple (colonne dynamique) 3/3 >SELECT nom, COLUMN_JSON(nosql) FROM newsql; >SELECT id,type,nom, COLUMN_GET(nosql, 'couleur' as char) AS couleur,prix FROM newsql; Multi produits
  • 17. JDLL – 1er avril 2017 Moteur de stockage storage engine
  • 18. JDLL – 1er avril 2017 Ouverture vers le NewSQL ● Moteur de stockage : CassandraSE ● Dispo MariaDB 10.0+ ● Brique de Apache Cassandra ● Données non relationnelles (NoSQL) ● Assurer l'intégration des données SQL / NoSQL ● Mapping possible ● Manipulations : static columns, dynamic columns, rowkey ● Installation dans My.cnf [mysqld] plugin-load=ha_cassandra.so
  • 19. JDLL – 1er avril 2017 CassandraSE : Utilisation (1/2) > create table t2 (rowkey varchar(36) primary key, data1 varchar(60), data2 varchar(60) ) engine=cassandra keyspace='mariadbtest' thrift_host='localhost' column_family='cf1'; Clé primaire obligatoire Colonnes statiques Sous ensemble des colonnes CF
  • 20. JDLL – 1er avril 2017 CassandraSE : Utilisation (2/2) > insert into t1 values ('rowkey10', 'data1-value', 123456), ('rowkey11', 'data1-value2', 34543); > select * from t1 where rowkey='rowkey11';
  • 21. JDLL – 1er avril 2017 Manipuler les données : Connect ● Dispo MariaDB 10.0+ ● ETL : Extract, transform et Load ● Lecture / Ecriture / MAJ – TXT, DBF, INI, XML – MS Access, MS Excel, TBL (similaire à MERGE) – ODBC, MySQL,SQLite, Oracle, DB2, WMI… – NoSQL : MongoDB ● Locale ou distant ● Custom possible ● Accès en parallèle sur multitables ● Installation dans My.cnf [mysqld] plugin-load=ha_connect.so
  • 22. JDLL – 1er avril 2017 Connect : exemple CSV ● Fichier – first,last,birthday – "Christophe","Villeneuve","Jan 1" – "PHP","ODBC","Nov 22" > CREATE TABLE users_csv ( first varchar(32) NOT NULL, last varchar(32) NOT NULL, birthday varchar(50) NOT NULL ) ENGINE=CONNECT TABLE_TYPE =CSV FILE_NAME ='/var/lib/mysql/users.csv' HEADER=1 SEP_CHAR=',' QUOTED=1; > SELECT * FROM users_csv; | first | last | birthday | +---------------+---------------+-------------+ | Christophe | Villeneuve | Jan 1 | | PHP | ODBC | Nov 22 | +---------------+---------------+-------------+
  • 23. JDLL – 1er avril 2017 Connect : exemple ODBC > create Table table2 ENGINE=CONNECT TABLE_TYPE=ODBC SRCDEF='select key, sum(l_quantity) qt from dbt3.table1 group by key' CONNECTION='DSN=oracle;UID=login;PWD=password'; > MariaDB [dbt3]> select sum(qt) from (select qt from table2) as result; → 31444 Valeur de sum(qt)
  • 24. JDLL – 1er avril 2017 Connect : exemple MongoDB (1/2) ● Driver : ha_connect.so ● Méthode ODBC – > mongoexport –db test –collection restaurants –out /var/lib/mysql/test/restaurants.json –jsonArray https://github.com/NYUITP/sp13_10g
  • 25. JDLL – 1er avril 2017 Connect : exemple MongoDB (2/2) ● Avec MariaDB { “_id” : ObjectId(“580cda5aaf1de8b908ccfe40”), “address” : { “building” : “522”, “coord” : [ -73.95171, 40.767461 ], “street” : “East 74 Street”, “zipcode” : “10021” }, “borough” : “Manhattan”, “cuisine” : “American”, “grades” : [ { “date” : ISODate(“2014-09-02T00:00:00Z”), “grade” : “A”, “score” : 12 }, { “date” : ISODate(“2013-12-19T00:00:00Z”), “grade” : “B”, “score” : 16 }, { “date” : ISODate(“2013-05-28T00:00:00Z”), “grade” : “A”, “score” : 9 }, { “date” : ISODate(“2012- 12-07T00:00:00Z”), “grade” : “A”, “score” : 13 }, { “date” : ISODate(“2012-03-29T00:00:00Z”), “grade” : “A”, “score” : 11 } ], “name” : “Glorious Food”, “restaurant_id” : “40361521” } > SELECT proprietors.owner, restaurants.name, grades_grade FROM proprietors, restaurants WHERE proprietors.restaurant_id=restaurants.restaurant_id AND grades_date>‘2015-01-08’ AND grades_grade IN(‘A’,‘B’); +———————+————————————————+————–+ | owner | name | grades_grade | +———————+————————————————+————–+ | Treva Tullis | Bagels N Buns | A | | Maud Morningstar | La Fusta Restaurant | A | | Vanessa Vowell | The Greek Corner | A | | Teressa Truex | Mcdonald’S | A | | Eli Enright | Neron’S Pizza | A ● Avec MongoDB
  • 26. JDLL – 1er avril 2017 Storage Engine : ColumnStore BigData
  • 27. JDLL – 1er avril 2017 MariaDB ColumnStore ● Portage de la Base de données : InfiniDB 4.6.7 ● Disponible à partir de MariaDB 10.1 ● Moteur de stockage orienté en colonnes ● Architecture (en parallèle) – Exécution de requêtes distribuée – Chargement de données ● Licence GPL
  • 28. JDLL – 1er avril 2017 Axée sur la rangée VS Orienté Column ● Axée sur la rangée – Les Lignes stockées séquentiellement dans un fichier ● Orienté colonne – Chaque colonne est stockée dans un fichier séparé
  • 29. JDLL – 1er avril 2017 Pourquoi ? ● Traitement des 'petabytes' de données ● Utilisation – Temps de réponse en temps réel ● aux requêtes analytiques – Traitement par lots → Batch – Algorithmique ● Sécurité – Bénéficie des mêmes fonctionnalités de sécurité existante – Cryptage sur les données en mouvement
  • 30. JDLL – 1er avril 2017 Réplication (en temps réel) ● MariaDB MaxScale – Maitre(s) / Eclave(s) ● Réplications les transactions – MariaDB → Hadoop ● Pas d'impact – Sur les performances – Sur les métadonnées
  • 31. JDLL – 1er avril 2017 Architecture ● Moteur utilisateur : précompte les requêtes SQL ● Module de performance : moteur de traitement distribué (C) MariaDB
  • 32. JDLL – 1er avril 2017 Sécuriser
  • 33. JDLL – 1er avril 2017 Lors de l'installation > mysql_secure_installation Enter current password for root (enter for none): ← Entrée Set root password? [Y/n] ← y New password: ← saisir nouveau Mot de passe Re-enter new password: ← resaisir Mot de passe Remove anonymous users? [Y/n] ← y Disallow root login remotely? [Y/n] ← y Reload privilege tables now? [Y/n] ← y
  • 34. JDLL – 1er avril 2017 Les connexions 'SSL / TLS' sécurisés disponibles ● Connexions client / serveur → protocole TLS – Les données peuvent être cryptées pendant le transfert à l'aide du protocole TLS ● Variable système SSL / TLS ● Variable d'état SSL / TLS ● Réplication avec connexions sécurisées – Maître(s) / Esclave(s) avec des données cryptées
  • 35. JDLL – 1er avril 2017 Connexion 'SSL / TLS' ● Par défaut – Connexion non chiffré ● Si le serveur prend en charge les connexions sécurisées → OUI ● Pour activer TLS – Démarrer le serveur avec l'option --ssl > SHOW VARIABLES LIKE 'have_ssl'; +---------------+----------+ | Variable_name | Value | +---------------+----------+ | have_ssl | DISABLED | +---------------+----------+ https://mariadb.com/kb/en/mariadb/secure-connections-overview/
  • 36. JDLL – 1er avril 2017 ● Cryptage de données ● Transfert TLS ● Exemple – have_openssl – have_ssl ● Interchangeable SSL ● SSL n'est plus considéré comme sécurisé ● Exemple – ssl_ca – ssl_capath – ... Options 'SSL / TLS' Système/Status de variables Attention https://mariadb.com/kb/en/mariadb/ssltls-system-variables/ https://mariadb.com/kb/en/mariadb/ssltls-status-variables/
  • 37. JDLL – 1er avril 2017 Réplication https://mariadb.com/kb/en/mariadb/replication-with-secure-connections/ ● Maître(s) / Esclave(s) ● Répliqués des données cryptées ● Activation des connexions sécurisées (obligatoire) ● Cluster Attention Si un des serveurs n'est pas configuré pour les connexions sécurisés → les connexions ne seront pas cryptées
  • 38. JDLL – 1er avril 2017 Réplication : exemple (1/3) ● Création SSL dans chaque serveur sudo mkdir -p /etc/mariadb/ssl ● Gestion des certificats $ sudo openssl genrsa 4096 > ca-key.pem $ sudo openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem ● Créer un certificat de serveur sur serveur1 $ sudo openssl req -newkey rsa:4096 -days 3600 -nodes -keyout server-key.pem -out server-req.pem $ sudo openssl rsa -in server-key.pem -out server-key.pem $ sudo openssl x509 -req -in server-req.pem -days 3600 -CA ca-cert.pem -CAkey ca- key.pem -set_serial 01 -out server-cert.pem
  • 39. JDLL – 1er avril 2017 Réplication : exemple (2/3) ● Vérification des certificats (serveur1) sudo openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem ● Résultat server-cert.pem: OK client-cert.pem: OK ● Copier le certificat vers les autres serveurs sudo scp /etc/mariadb/ssl/*.pem root@10.0.0.2:/etc/mariadb/ssl/ ● Installation MariaDB sudo apt-get install mariadb mariadb-server -y
  • 40. JDLL – 1er avril 2017 Réplication : exemple (3/3) ● Configuration de my.cnf – pour chaque serveur # SSL ssl-ca=/etc/mariadb/ssl/ca-cert.pem ADD under [mysqld]: # SSL ssl-ca=/etc/mariadb/ssl/ca-cert.pem ssl-cert=/etc/mariadb/ssl/server-cert.pem ssl-key=/etc/mariadb/ssl/server-key.pem CHANGE under [mysqld]: server-id = 1 log-bin=mysql-bin binlog_format=mixed Pas de modifications (processus identique) pour : La réplication / MariaDB Galera Cluster
  • 41. JDLL – 1er avril 2017 Le chiffrement
  • 42. JDLL – 1er avril 2017 Pourquoi chiffrer ? ● Avec MySQL / MariaDB / Percona ● Mariadb → Chiffrer au niveau des tables – Innodb – XtraDB (Percona) $ INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123')); $ SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'admin';
  • 43. JDLL – 1er avril 2017 Chiffrement (1/2) ● Disponible pour 10.1+ ● Contribution Google ● Chiffrer – Pas de modification pour vos applications – Pas de dégradation des performances globales – Une meilleure pratique en matière de sécurité de données ● Storage engine supporté – XtraDB – InnoDB
  • 44. JDLL – 1er avril 2017 Chiffrement (2/2) ● Chiffrement : support de clefs (AES Algorithm) table individuel → PAGE_ENCRYPTION=1 tablespace encryption → Crypte tout ainsi que les logs ● Plugin : file_key_management – Plugin de cryptage – Lit les clés de cryptage d'un fichier – Options : ● File_key_management_filename → Où se trouve le fichier ● File_key_management_filekey → Clé facultative pour déchiffrer le fichier de clés ● File_key_management_encryption_algorithm → Algorithme de cryptage à utiliser. https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/
  • 45. JDLL – 1er avril 2017 Avantages ● Par rapport à d'autres BDD Open Source – Chiffrement des données au repos . Chiffrement au niveau des instances et des tables . Avec support des clés tournantes (contribution Google) – Validation des mots de passe – Contrôle d'accès de base de profils (par défaut) . Renforcé et optimisé ● Type de chiffrement supporté – Clefs de chiffrement identifier (32 bit) – Advanced Encryption Standard (AES) 128 / 192 / 256 bit – Exemple : $ openssl enc -aes-256-cbc -md sha1 -k secret -in keys.txt -out keys.enc
  • 46. JDLL – 1er avril 2017 config MariaDB : my.cnf [mysqld] plugin-load-add=file_key_management.so file-key-management file-key-management-filename = /home/mdb/keys.enc innodb-encrypt-tables innodb-encrypt-log innodb-encryption-threads=4 aria-encrypt-tables=1 # PAGE row format encrypt-tmp-disk-tables=1 # this is for Aria
  • 47. JDLL – 1er avril 2017 Chiffrer une table CREATE TABLE client ( client_id bigint not null primary key, client_name varchar(80), client_infosensible varchar(20) ) ENGINE=InnoDB page_encryption=1 page_encryption_key=1; Clef 1 Chiffrement 1 Information très sensible Password... ● En mode fixe
  • 48. JDLL – 1er avril 2017 Chiffrer : mode avancé ● Tablespace encrypton (Google) ● Choisir un algorithme de cryptage ● Spécifier ce qui doit être chiffrer – Innodb-encrypt-tables – Aria – Aria-encrypt-tables – Crypter-tmp-disk-tables – Innodb-encrypt-log ● Prévoir les rotations (impératif) – innodb-encryption-threads = 4 – innodb-encryption-rotate-key-age = 1800
  • 49. JDLL – 1er avril 2017 Validation du mot de passe ● Les rappels du mot de passe ● MariaDB propose : Validation de mot de passe – S'assurer que les mots de passe 'utilisateur' répondent à certaines exigences de sécurité – Plugin dédiée – Contrôle par rapport à la configuration ● Fonctions : SET PASSWORD et GRAND https://mariadb.com/kb/en/mariadb/password-validation/
  • 50. JDLL – 1er avril 2017 Exemple (1/2) SET PASSWORD = PASSWORD('plain-text password'); SET PASSWORD FOR `user`@`host` = PASSWORD('plain-text password'); SET PASSWORD = OLD_PASSWORD('plain-text password'); SET PASSWORD FOR `user`@`host` = OLD_PASSWORD('plain-text password'); CREATE USER `user`@`host` IDENTIFIED BY 'plain-text password'; GRANT privileges TO `user`@`host` IDENTIFIED BY 'plain-text password'; https://mariadb.com/kb/en/mariadb/password-validation/ SET PASSWORD = 'password hash'; SET PASSWORD FOR `user`@`host` = 'password hash'; CREATE USER `user`@`host` IDENTIFIED BY PASSWORD 'password hash'; CREATE USER `user`@`host` IDENTIFIED VIA mysql_native_password USING 'password hash'; CREATE USER `user`@`host` IDENTIFIED VIA mysql_old_password USING 'password hash'; GRANT privileges TO `user`@`host` IDENTIFIED BY PASSWORD 'password hash'; GRANT privileges TO `user`@`host` IDENTIFIED VIA mysql_native_password USING 'password hash'; GRANT privileges TO `user`@`host` IDENTIFIED VIA mysql_old_password USING 'password hash'; ● Avant ● Avec clé de hash
  • 51. JDLL – 1er avril 2017 Exemple (2/2) ● Vérification ● Erreur de validation $ UPDATE mysql.user SET password='password hash' WHERE user='user' AND host='host'; $ FLUSH PRIVILEGES; SUCCES > grant select on *.* to foobar identified by 'toto'; ERROR HY000: Your password does not satisfy the current policy requirements > show warnings;
  • 52. JDLL – 1er avril 2017 En résumé
  • 53. JDLL – 1er avril 2017 Merci Questions Christophe Villeneuve @hellosct1