Progetto

Generale

Profilo

MySQLInitConf » Cronologia » Versione 22

Simone Piccardi, 23-12-2016 18:05

1 17 Simone Piccardi
h1. Configurazione di base per _MySQL_
2 16 Amministratore Truelite
 
3 1 Amministratore Truelite
4 17 Simone Piccardi
La configurazione di base di _MySQL_ eseguita da Debian subito dopo l'installazione del pacchetto consente l'accesso database con l'utente di amministrazione _root_ senza password. Per questo motivo il primo passo da fare, immediatamente dopo l'installazione, è impostare una password per _root_; questo si fa con il comando:
5 1 Amministratore Truelite
6
<pre>
7 18 Simone Piccardi
/usr/bin/mysqladmin -u root password NuovaPassword
8 11 Amministratore Truelite
</pre>
9
10 21 Simone Piccardi
con le versioni più recenti questo non è più necessario in quanto la password per l'utente _root_ viene chiesta dal sistema del _debconf_.
11
12
h2. Reimpostare la password di _root_
13
14 17 Simone Piccardi
Se invece si è persa la password di _root_ del database il precedente comando non funziona in quanto una volta impostata detta password questa diventa necessaria per poterlo utilizzare. Per questo per poterla recuperare (o meglio resettare) occorre seguire la seguente procedura. Il primo passo è fermare il database e farlo ripartire senza meccanismi di controllo di autenticazione, questo si fa con i comandi:
15 1 Amministratore Truelite
16 16 Amministratore Truelite
<pre>
17 1 Amministratore Truelite
/etc/init.d/mysql stop
18
/usr/bin/mysqld_safe --skip-grant-tables --skip-networking &
19 16 Amministratore Truelite
</pre>
20 1 Amministratore Truelite
21
a questo punto ci si potrà collegare al database direttamente con:
22
23 16 Amministratore Truelite
<pre>
24 10 Amministratore Truelite
mysql -u root
25 16 Amministratore Truelite
</pre>
26 1 Amministratore Truelite
27 10 Amministratore Truelite
ottenendo una shell SQL con privilegi di amministrazione; qui si potrà modificare la password impostata per l'utente _root_ tramite le seguenti istruzioni:
28 16 Amministratore Truelite
29 10 Amministratore Truelite
<pre>
30 16 Amministratore Truelite
use mysql;
31 1 Amministratore Truelite
UPDATE user SET Password=PASSWORD("NuovaPassword") WHERE User="root";
32
exit
33 16 Amministratore Truelite
</pre>
34 10 Amministratore Truelite
35 17 Simone Piccardi
fatto questo la passord di _root_ è stata modificata e si potrà fermare il database e riavviarlo con:
36 10 Amministratore Truelite
37
<pre>
38 1 Amministratore Truelite
/etc/init.d/mysql stop
39 16 Amministratore Truelite
/etc/init.d/mysql start
40 8 Amministratore Truelite
</pre>
41 9 Amministratore Truelite
42 17 Simone Piccardi
Dopo di che si potrà verificare che l'accesso è possibile con la nuova password con:
43 1 Amministratore Truelite
44 16 Amministratore Truelite
<pre>
45 1 Amministratore Truelite
server:~# mysql -u root -p
46
Enter password:
47 16 Amministratore Truelite
Welcome to the [[MySQL]] monitor.  Commands end with ; or \g.
48
Your [[MySQL]] connection id is 9 to server version: 4.0.24_Debian-5-log
49 1 Amministratore Truelite
50
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
51
52
mysql> show databases;
53
+-------------+
54
| Database    |
55
+-------------+
56
| mysql       |
57
| test        |
58
+-------------+
59
2 rows in set (0.00 sec)
60
61
mysql> \q
62
Bye
63 16 Amministratore Truelite
server:~#
64 1 Amministratore Truelite
</pre>
65 9 Amministratore Truelite
66 21 Simone Piccardi
67
h2. Ricreare l'utente _root_
68
69 20 Simone Piccardi
Qualora invece si debba ricreare da zero l'utente root nel caso di errata cancellazione, sarà necessario reimpostare manualmente tutti i privilegi con qualcosa del tipo:
70
71
<pre>
72
INSERT INTO mysql.user SET user = 'root',
73
      host = 'localhost',
74
      password = Password('passwordlungaecomplicata'),
75
      super_priv = 'y',
76
      select_priv = 'y',
77
      insert_priv = 'y',
78
      update_priv = 'y',
79
      delete_priv = 'y',
80
      create_priv = 'y',
81
      drop_priv = 'y',
82
      reload_priv = 'y',
83
      shutdown_priv = 'y',
84
      process_priv = 'y',
85
      file_priv = 'y',
86
      grant_priv = 'y',
87
      references_priv = 'y',
88
      index_priv = 'y',
89
      alter_priv = 'y',
90
      show_db_priv = 'y',
91
      create_tmp_table_priv = 'y',
92
      lock_tables_priv = 'y',
93
      execute_priv = 'y',
94
      repl_slave_priv = 'y',
95
      repl_client_priv = 'y',
96
      create_view_priv = 'y',
97
      show_view_priv = 'y',
98
      create_routine_priv = 'y',
99
      alter_routine_priv = 'y',
100
      create_user_priv = 'y';
101
</pre>
102 17 Simone Piccardi
103 22 Simone Piccardi
h2. Accesso remoto a MySQL e configurazione SSL
104 21 Simone Piccardi
105 1 Amministratore Truelite
Si tenga presente infine che le ultime versioni del pacchetto Debian non richiedono più un intervento manuale per abilitare l'ascolto su @localhost@ in quanto la riga:
106 16 Amministratore Truelite
107 1 Amministratore Truelite
<pre>
108 16 Amministratore Truelite
bind-address            = 127.0.0.1
109 1 Amministratore Truelite
</pre>
110
111 21 Simone Piccardi
è già presente in @/etc/my.cnf@; occorre però fare attenzione, l'uso del comando @mysql -h localhost@ comporta automaticamente l'uso del socket, per cui in caso di più istanze accessibili su porte diverse non saranno mai raggiunte in quanto l'opzione @-p@ verrà ignorata in maniera silente (nel caso si usi l'opzione @-h 127.0.0.1@). 
112 1 Amministratore Truelite
113 21 Simone Piccardi
114
Qualora si debba abilitare il raggiungimento del server da altre macchine occorrerà modificare la direttiva, ed inserire qualcosa del tipo:
115
116 19 Simone Piccardi
<pre>
117
bind-address            = 0.0.0.0
118
</pre>
119 1 Amministratore Truelite
120 21 Simone Piccardi
Se oltre a questo si vuole abilitare l'uso di SSL diventano necessarie anche le ulteriori direttive che consentono di indicare i file con certificati e chiavi da usare per SSL, un possibile esempio è:
121
122
<pre>
123
ssl-ca = /etc/mysql/ca.pem
124
ssl-cert = /etc/mysql/server-cert.pem
125
ssl-key = /etc/mysql/server-key.pem
126
</pre>
127
128
dove @ssl-ca@ indica il certificato della Certification Authority che firma i certificati (il cui uso può anche essere omesso se non interessa autenticare i client, cosa che comunque non viene fatta di default). Invece @ssl-cert@ e @ssl-key@ indicano rispettivamente i file che contengono certificato e corrispondente chiave che verranno usate dal server per SSL.
129
130
Questi file si possono creare seguendo le istruzioni fornite dalla documentazione su http://dev.mysql.com/doc/refman/5.7/en/creating-ssl-rsa-files-using-mysql.html ma se li si vogliono creare con un qualunque programma di gestione di Certification Authority SSL (@tiny-ca@, @easy-rsa@ o @openssl@ stessa) o ottenere direttamente da una CA commerciale si possono avere problemi.  
131
132
Il supporto di SSL di MySQL infatti è abbastanza penoso, ed in particolare accetta solo chiavi in formato PKCS#1 (quelle introdotte da una riga di intestazione nella forma @-----BEGIN RSA PRIVATE KEY-----@). Il server fallisce miseramente (con un errore @SSL error: Unable to get private key from '/etc/mysql/server-key.pem'@) se gli si fornisce una chiave nel più recente PKCS#8 (quelle con intestazione nella forma @-----BEGIN PRIVATE KEY-----@), che però è il default per @openssl@ ed è quello che viene usato anche da @easy-rsa@ e dalla gran parte delle CA commerciali. 
133
134
Qualora si disponga di una di queste chiavi questa deve essere convertita al vecchio formato con:
135
136
<pre>
137
openssl rsa -in chiave-che-non-va-in-pkcs8.pem -out chiave-che-andra-in-pkcs1.pem 
138
</pre>
139
140
(aggiungere il mancante @RSA@ alla riga di intestazione *NON* funziona). 
141
142
143
h2. Creazione di database ed utenti
144 19 Simone Piccardi
145 1 Amministratore Truelite
Fatto questo si potrà passare alla creazione di un proprio database con il comando:
146 18 Simone Piccardi
147 16 Amministratore Truelite
<pre>
148 3 Amministratore Truelite
mysqladmin -u root -p create nomedb
149 1 Amministratore Truelite
</pre>
150 18 Simone Piccardi
151 1 Amministratore Truelite
che chiederà la precedente password, creando il database, a questo punto ci si potrà collegare al nuovo database con:
152 18 Simone Piccardi
153 16 Amministratore Truelite
<pre>
154 3 Amministratore Truelite
mysql -u root -p nomedb
155 1 Amministratore Truelite
</pre>
156 18 Simone Piccardi
157 1 Amministratore Truelite
e si potrà dare l'accesso allo stesso ad uno specifico utente con i comandi:
158 18 Simone Piccardi
159 16 Amministratore Truelite
<pre>
160 15 Amministratore Truelite
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, ALTER, DROP 
161 12 Amministratore Truelite
ON nomedb.* TO 'utentedb'@'localhost' IDENTIFIED BY 'password';
162 1 Amministratore Truelite
</pre>
163 18 Simone Piccardi
164 1 Amministratore Truelite
e per garantirsi che questi siano immediatamente disponibili, si dovrà aggiuntere:
165 18 Simone Piccardi
166 16 Amministratore Truelite
<pre>
167 6 Amministratore Truelite
FLUSH PRIVILEGES;
168 16 Amministratore Truelite
</pre>
169 5 Amministratore Truelite
170 1 Amministratore Truelite
Nel caso si sia fatto un errore nell'assegnare i permessi e nel creare l'utente, lo si potrà cancellare con i comandi:
171 18 Simone Piccardi
172 16 Amministratore Truelite
<pre>
173 1 Amministratore Truelite
use mysql;
174
DELETE FROM user WHERE user="utentedacancellare";
175 19 Simone Piccardi
</pre>
176
177
Nel caso si voglia cancellare completamente un database si potrà farlo sia con i comandi SQL specifici (@DROP DATABASE nomedb@) da dentro la riga di comando di @mysql@ oppure direttamente dalla della shell con il comando:
178
179
<pre>
180
mysqladmin -u root -p drop nomedb
181 16 Amministratore Truelite
</pre>