2013-04-20 14 views
18

Dato un sistema MySQL con più utenti remoti (utenti del modulo 'joecool'@'192.168.1.2'); c'è una dichiarazione SQL che posso usare per REQUIRE SSL per tutti gli utenti remoti?Come richiedere SSL per tutti gli utenti remoti

Il comando singolo utente è:

GRANT USAGE ON *.* TO 'joecool'@'192.168.1.2' REQUIRE SSL; 

Avere una versione "tutti gli utenti" sarebbe particolarmente utile perché phpMyAdmin non supporta il flag Richiedi SSL per la creazione o la modifica di utenti.

+1

Noto che posso trovare persone senza 'REQUIRE SSL' tramite' SELECT * FROM mysql.user WHERE host come '192.168.%' AND ssl_type! = 'ANY'; '- Posso modificare' mysql .user' table direttamente? –

+0

Nota per i visitatori di oggi: phpMyAdmin ha una sezione SSL in basso durante la creazione o la modifica degli utenti. –

risposta

9

La risposta (precedentemente accettata) di Honza sembra errata, vedere i suoi commenti. Non sembra possibile utilizzare una query GRANT per modificare più utenti contemporaneamente dal MySQL does not support wildcards for user names.

Come suggerito da soli è possibile modificare i record nella tabella mysql.user direttamente usando un UPDATE query e come suggerito Marc Delisle, privilegi poi sciacquare con:

FLUSH PRIVILEGES; 

vedere anche dba.stackexchange.com > How to grant multiple users privileges.

2

Sì, è possibile modificare direttamente la tabella mysql.user (attenzione). Quindi devi semplicemente emettere un'istruzione FLUSH PRIVILEGES per applicare le modifiche al server in esecuzione.

+1

Il campo che deve essere modificato è 'ssl_type' di tipo \t' enum ('', 'ANY', 'X509', 'SPECIFICATO') '. Quindi per simulare 'REQUIRE SSL' che dovresti eseguire,' UPDATE mysql.user SET ssl_type = 'ANY' WHERE user = 'sei sicuro?' '. Si noti che l'impostazione di questo flag (su un valore non vuoto), non sembra avere effetto durante la connessione come 'someuser @ localhost'. (almeno non mi ha impedito di accedere come 'somuser @ localhost', ma applica SSL per le connessioni remote) –

+0

@DimitryK Probabilmente non influenza le connessioni localhost perché quelle sono più spesso (almeno con la CLI MySQL) fatto usando un socket UNIX (o una named pipe su Windows) e quindi TLS non è necessario. Immagino che se si provasse a connettersi usando 'mysql -h 127.0.0.1' sarebbe necessario utilizzare SSL. –

+0

@ChristopherSchultz, SSL ** non influisce sulle connessioni socket UNIX, quindi se hai bisogno di un trasporto locale ad alte prestazioni potresti stare meglio assicurarti che ssl sia disabilitato sul tuo client. Puoi vedere lo stato SSL con il comando '\ s'. Tieni presente che SSL/TLS è solo un livello sopra un socket di streaming, quindi può essere eseguito su qualsiasi tipo di socket di streaming. Potrebbero esserci anche casi d'uso, es. utilizzando un proxy socket per un server remoto. –

0

È possibile configurare mysqld con require_secure_transport.

[mysqld] 
... 
ssl-ca = ... 
ssl-cert = ... 
ssl-key = ... 
... 
require-secure-transport = ON 

Questa capacità integratori requisiti SSL per-conto, che prendono precedenza. Ad esempio, se un account è definito con REQUIRE SSL, l'abilitazione require_secure_transport non consente di utilizzare l'account per connettersi utilizzando un file socket Unix.

Problemi correlati