1. Connettiti a mysql come root o un utente amministratore
Dovrai connetterti al tuo server MySQL utilizzando un account utente che ha privilegi sufficienti per creare utenti e concedere le autorizzazioni. In genere, questo è l'utente `root` o un altro utente amministrativo.
`` `Bash
mysql -u root -p
`` `
Immettere la password di root quando richiesto.
2. Crea l'utente
Utilizzare l'istruzione "Crea utente" per creare l'utente. È meglio specificare l'host da cui l'utente può connettersi. Se si desidera che l'utente si connetta da qualsiasi host, utilizzare `%`. Stai molto attento all'utilizzo di `%` per account sensibili! Per un approccio più sicuro, limita l'utente a connettersi solo da specifici indirizzi IP o nomi host.
`` `sql
Crea utente 'public_user'@'%' identificato da 'your_strong_password';
`` `
* `'public_user'@'%'` :Questo definisce il nome utente (`public_user`) e l'host (`%`significa qualsiasi host). Sostituisci `your_strong_password` con una password forte e univoca.
* `Identificato da 'your_strong_password'` :Questo imposta la password per l'utente. Usa una password forte che è lunga, complessa e include un mix di lettere, numeri e simboli maiuscola e minuscola. Prendi in considerazione l'utilizzo di un gestore di password per generare e archiviare in modo sicuro le password.
Nota di sicurezza importante: Utilizzando `'%'` come host consente all'utente di connettersi da * qualsiasi indirizzo IP. Questo può essere un rischio per la sicurezza. Se possibile, limitare l'utente a un indirizzo IP specifico o a una gamma di indirizzi IP. Per esempio:
`` `sql
Crea l'utente 'public_user'@'192.168.1.100' identificato da 'your_strong_password'; - Consenti solo da IP 192.168.1.100
Crea l'utente 'public_user'@'192.168.1.%' identificato da 'your_strong_password'; - Consenti dalla sottorete 192.168.1.x
`` `
3. Concedere privilegi di sola lettura al database
Utilizzare la dichiarazione `Grant 'per concedere i privilegi di sola lettura dell'utente nel database desiderato.
`` `sql
Concedi seleziona su your_database.* A 'public_user'@'%';
`` `
* `Grant Select` :Ciò specifica che l'utente avrà solo il privilegio `Select`, che consente loro di leggere i dati. * Non * saranno in grado di inserire, aggiornare, eliminare o modificare la struttura del database.
* `su your_database.*` :Questo specifica il database (`your_database`) e che il privilegio si applica a tutte le tabelle all'interno di quel database (`.*`). Sostituisci `your_database` con il nome effettivo del database.
* `a 'public_user'@'%'` :Ciò specifica l'utente a cui è concesso il privilegio. Assicurati che questo corrisponda all'utente creato nel passaggio 2.
4. Privilegi a filo
Dopo aver concesso privilegi, è essenziale eliminare le tabelle dei privilegi per garantire che le modifiche abbiano effetto immediatamente.
`` `sql
Privilegi a filo;
`` `
5. Test dell'utente
Esci dall'account root o amministratore e accedi utilizzando l'account `public_user` appena creato.
`` `Bash
mysql -u public_user -p -h yor_mysql_server_address
`` `
Sostituisci `your_mysql_server_address` con l'indirizzo effettivo del tuo server MySQL. Se ti stai collegando dalla stessa macchina, puoi spesso usare `localhost '.
Immettere la password impostata per `public_user` quando richiesto.
Una volta effettuato l'accesso, prova a selezionare i dati dal database:
`` `sql
Usa your_database;
Seleziona * da your_table;
`` `
Se l'istruzione `Select` funziona, all'utente è stato concesso l'accesso di sola lettura. Prova un'operazione che richiede altri privilegi, come `insert`,` update`, `delete` o` Crea table`. Questi dovrebbero fallire con un errore di "autorizzazione negata".
Esempio completo:
`` `sql
-Connetti come root:mysql -u root -p
- Crea l'utente (sostituire con una password forte!)
Crea utente 'public_user'@'%' identificato da 'supersecretpassword123!';
-Concedi l'accesso di sola lettura al database "myDatabase"
Concedere seleziona su mydatabase.* A 'public_user'@'%';
- Aggiorna i privilegi
Privilegi a filo;
- Esci dalla sessione di root
USCITA;
- Accedi come nuovo utente (dalla riga di comando):
-mysql -u public_user -p -h your_mysql_server_address
- testare le autorizzazioni:
Usa myDatabase;
Seleziona * dai clienti; - dovrebbe funzionare
Inserisci i valori dei clienti (nome) ("nuovo cliente"); - dovrebbe fallire
- Esci dalla sessione di public_user
USCITA;
`` `
Considerazioni importanti e migliori pratiche:
* Privilegio minimo: Concedere solo i privilegi necessari. Evita di concedere privilegi più ampi di quanto richiesto. Ad esempio, se l'utente deve solo leggere da una tabella specifica, concedi `selezionare" solo su quella tabella, non l'intero database.
* Restrizione host: Limitare gli host da cui l'utente può connettersi. Non utilizzare `'%'` a meno che non si capisca le implicazioni di sicurezza.
* Gestione password: Applicare politiche di password forti e ruotare regolarmente le password. Usa un gestore di password.
* Registrazione di audit: Abilita la registrazione di audit sul server MySQL per tenere traccia dell'attività dell'utente, inclusi accessi, query e altre operazioni. Questo può aiutarti a rilevare e indagare su incidenti di sicurezza.
* Audit di sicurezza regolari: Rivedi regolarmente la configurazione MySQL, gli account utente e i privilegi per identificare e affrontare potenziali vulnerabilità di sicurezza.
* Crittografia: Utilizzare la crittografia per proteggere i dati a riposo e in transito. Abilita SSL per le connessioni client.
* Firewall: Configura il tuo firewall per consentire solo il traffico necessario per il server MySQL.
* Monitoraggio: Monitora il tuo server MySQL per problemi di prestazioni e minacce alla sicurezza.
* Design del database: Progetta il tuo database pensando alla sicurezza. Utilizzare tipi e vincoli di dati appropriati per prevenire la corruzione dei dati e gli attacchi di iniezione. Prendi in considerazione l'uso di dichiarazioni preparate per prevenire l'iniezione di SQL.
* Evita di esporre direttamente a Internet: Nella maggior parte dei casi, non dovresti * esporre direttamente il tuo database MySQL a Internet pubblico. Invece, utilizzare un server delle applicazioni (ad esempio un server Web che esegue PHP, Python, Node.js, ecc.) Per gestire le richieste dai client e interagire con il database per conto dell'utente. Ciò consente di implementare controlli di sicurezza più severi e proteggere il database da attacchi diretti. Ciò è fondamentale per prevenire l'accesso non autorizzato e le violazioni dei dati.
* Nessuna esposizione diretta all'utente finale: Non consentire mai all'utente finale di inserire direttamente nel database, utilizza un sito Web.
Seguendo questi passaggi e le migliori pratiche, è possibile creare un utente pubblico che richiede una password per visualizzare i dati in MySQL mantenendo un livello ragionevole di sicurezza. Ricorda di adattare queste istruzioni al proprio ambiente specifico e ai requisiti di sicurezza. Dai la priorità sempre alla sicurezza e rivedi regolarmente la configurazione per assicurarti che rimanga efficace.
Programmazione © www.354353.com