MySQLInitConf » Cronologia » Versione 25
Simone Piccardi, 24-09-2019 15:17
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 | 23 | Simone Piccardi | 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-----@). Ma il server fallisce miseramente (partendo però lo stesso, ma con un warning di @SSL error: Unable to get private key from '/etc/mysql/server-key.pem'@ nei log) 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 | 21 | Simone Piccardi | |
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 | 1 | Amministratore Truelite | (aggiungere il mancante @RSA@ alla riga di intestazione *NON* funziona). |
141 | 23 | Simone Piccardi | |
142 | 25 | Simone Piccardi | Una volta riavviato il server, si potrà verificare che il supporto per SSL sia attivo con: |
143 | 23 | Simone Piccardi | |
144 | 25 | Simone Piccardi | <pre> |
145 | show variables like '%ssl%'; |
||
146 | </pre> |
||
147 | |||
148 | e si deve ottenere qualcosa del tipo: |
||
149 | |||
150 | <pre> |
||
151 | +---------------------+----------------------------+ |
||
152 | | Variable_name | Value | |
||
153 | +---------------------+----------------------------+ |
||
154 | | have_openssl | NO | |
||
155 | | have_ssl | YES | |
||
156 | | ssl_ca | /etc/mysql/ca-cert.pem | |
||
157 | | ssl_capath | | |
||
158 | | ssl_cert | /etc/mysql/server-cert.pem | |
||
159 | | ssl_cipher | | |
||
160 | | ssl_crl | | |
||
161 | | ssl_crlpath | | |
||
162 | | ssl_key | /etc/mysql/server-key.pem | |
||
163 | | version_ssl_library | YaSSL 2.4.4 | |
||
164 | +---------------------+----------------------------+ |
||
165 | 10 rows in set (0.00 sec) |
||
166 | </pre> |
||
167 | |||
168 | con @have_ssl@ o @have_openssl@ a @YES@. |
||
169 | |||
170 | |||
171 | 23 | Simone Piccardi | h2. Provare la connessione remota SSL |
172 | |||
173 | Si potrebbe pensare che se si richiede l'utilizzo di una connessione cifrata con SSL invocando il client con l'opzione @--ssl@ (se non la si specifica non verrà comunque usato, che sia disponibile o meno) e che la connessione venga stabilita comporti che sia tutto a posto. In realtà non è affatto così ed il client, se SSL non sta funzionando sul server (perché assente o perché la sua configurazione è fallita, cosa che comunque non blocca l'avvio del server) si collega in chiaro. |
||
174 | |||
175 | Pertanto per verificare che la connessione cifrata è funzionante occorre verificarlo esplicitamente all'interno della connessione, con qualcosa del tipo: |
||
176 | |||
177 | <pre> |
||
178 | $ mysql -h mysql.truelite.it -u prova -p -ssl |
||
179 | ... |
||
180 | > SHOW SESSION STATUS LIKE 'Ssl_version'; |
||
181 | </pre> |
||
182 | |||
183 | 24 | Simone Piccardi | se il risultato è: |
184 | 23 | Simone Piccardi | |
185 | <pre> |
||
186 | +---------------+-------+ |
||
187 | | Variable_name | Value | |
||
188 | +---------------+-------+ |
||
189 | | Ssl_version | | |
||
190 | +---------------+-------+ |
||
191 | </pre> |
||
192 | |||
193 | 24 | Simone Piccardi | SSL non sta funzionando, se invece funziona comparirà qualcosa del tipo: |
194 | 23 | Simone Piccardi | |
195 | <pre> |
||
196 | +---------------+-------+ |
||
197 | | Variable_name | Value | |
||
198 | +---------------+-------+ |
||
199 | | Ssl_version | TLSv1 | |
||
200 | +---------------+-------+ |
||
201 | </pre> |
||
202 | |||
203 | 25 | Simone Piccardi | alternativamente si potranno verificare i dati della connessione controllando che sia attiva con: |
204 | |||
205 | <pre> |
||
206 | mysql> \s |
||
207 | ... |
||
208 | SSL: Cipher in use is DHE-RSA-AES256-SHA |
||
209 | ... |
||
210 | </pre> |
||
211 | |||
212 | mentre se non è attiva si avrà: |
||
213 | |||
214 | <pre> |
||
215 | MySQL [(none)]> \s |
||
216 | -------------- |
||
217 | ... |
||
218 | SSL: Not in use |
||
219 | ... |
||
220 | </pre> |
||
221 | 21 | Simone Piccardi | |
222 | |||
223 | h2. Creazione di database ed utenti |
||
224 | 19 | Simone Piccardi | |
225 | 1 | Amministratore Truelite | Fatto questo si potrà passare alla creazione di un proprio database con il comando: |
226 | 18 | Simone Piccardi | |
227 | 16 | Amministratore Truelite | <pre> |
228 | 3 | Amministratore Truelite | mysqladmin -u root -p create nomedb |
229 | 1 | Amministratore Truelite | </pre> |
230 | 18 | Simone Piccardi | |
231 | 1 | Amministratore Truelite | che chiederà la precedente password, creando il database, a questo punto ci si potrà collegare al nuovo database con: |
232 | 18 | Simone Piccardi | |
233 | 16 | Amministratore Truelite | <pre> |
234 | 3 | Amministratore Truelite | mysql -u root -p nomedb |
235 | 1 | Amministratore Truelite | </pre> |
236 | 18 | Simone Piccardi | |
237 | 1 | Amministratore Truelite | e si potrà dare l'accesso allo stesso ad uno specifico utente con i comandi: |
238 | 18 | Simone Piccardi | |
239 | 16 | Amministratore Truelite | <pre> |
240 | 15 | Amministratore Truelite | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, ALTER, DROP |
241 | 12 | Amministratore Truelite | ON nomedb.* TO 'utentedb'@'localhost' IDENTIFIED BY 'password'; |
242 | 1 | Amministratore Truelite | </pre> |
243 | 18 | Simone Piccardi | |
244 | 1 | Amministratore Truelite | e per garantirsi che questi siano immediatamente disponibili, si dovrà aggiuntere: |
245 | 18 | Simone Piccardi | |
246 | 16 | Amministratore Truelite | <pre> |
247 | 6 | Amministratore Truelite | FLUSH PRIVILEGES; |
248 | 16 | Amministratore Truelite | </pre> |
249 | 5 | Amministratore Truelite | |
250 | 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: |
251 | 18 | Simone Piccardi | |
252 | 16 | Amministratore Truelite | <pre> |
253 | 1 | Amministratore Truelite | use mysql; |
254 | DELETE FROM user WHERE user="utentedacancellare"; |
||
255 | 19 | Simone Piccardi | </pre> |
256 | |||
257 | 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: |
||
258 | |||
259 | <pre> |
||
260 | mysqladmin -u root -p drop nomedb |
||
261 | 16 | Amministratore Truelite | </pre> |