GNU/Linux >> Linux Esercitazione >  >> Linux

Guida per principianti alla gestione degli utenti MySQL

La gestione degli utenti in MySQL ti dà la possibilità di controllare ciò che gli utenti possono e non possono fare.

  • Crea account utente con privilegi diversi appropriati alla loro funzione.
  • Evita di utilizzare l'account root:limita le applicazioni compromesse e proteggile dagli errori durante la manutenzione ordinaria.
  • Garantire l'integrità dei dati mediante la corretta assegnazione dei privilegi dei singoli utenti. Consenti agli utenti autorizzati di svolgere il proprio lavoro. Impedisci agli utenti non autorizzati di accedere ai dati oltre i loro privilegi.

Verifica dell'account utente

Quando ti connetti a un server MySQL ed esegui una query, ti autentica e autorizza la tua attività.

  • Autenticazione :verifica l'identità dell'utente. Questa è la prima fase del controllo degli accessi. Devi autenticarti correttamente ogni volta che ti connetti. Se non riesci ad autenticarti, la tua connessione non riesce e il tuo client si disconnette.
  • Autorizzazione :verifica i privilegi dell'utente. Questa seconda fase di controllo degli accessi avviene per ogni richiesta su una connessione attiva su cui l'autenticazione è riuscita. Per ogni richiesta, MySQL determina quale operazione si desidera eseguire, quindi verifica se disponi di privilegi sufficienti per farlo.

Visualizza le impostazioni dell'account utente

– Interroga il database mysql per visualizzare le informazioni di identificazione dell'utente:

mysql> SELECT user, host, password
-> FROM mysql.user WHERE user='root'; 
+------+-----------+-------------------------------------------+ 
| user | host      | password                                  | 
+------+-----------+-------------------------------------------+ 
| root | localhost | *2447D497B9A6A15F2776055CB2D1E9F86758182F | 
| root | 127.0.0.1 | *2447D497B9A6A15F2776055CB2D1E9F86758182F | 
| root | ::1       | *2447D497B9A6A15F2776055CB2D1E9F86758182F |
+------+-----------+-------------------------------------------+ 
3 rows in set (0.00 sec)

Visualizza tutte le informazioni sull'utente, inclusi i privilegi:

mysql> SELECT * FROM mysql.user\G 
***************** 1. row ***************** 
...
   Select_priv: Y
   Insert_priv: Y
   Update_priv: Y
   Delete_priv: Y
...

Il database mysql contiene le informazioni per tutti gli account utente sul server. Per visualizzare queste informazioni, eseguire le istruzioni SELECT mostrate sopra. Il valore Y in un *_priv campo indica che il privilegio è abilitato. L'account root ha accesso completo. Tutte le sue colonne di privilegi hanno il valore Y.

Oltre ai privilegi, la tabella utente contiene altre informazioni utili nel processo di autenticazione. Ad esempio, puoi vedere nel seguente output che l'utente tester:

  • Ha una password (visibile in forma crittografata nella colonna Password) e questa password non è scaduta (indicata dalla N nella colonna password_expired)
  • Non ha limiti di risorse definiti (indicati dagli 0 nelle colonne max_*)
  • Non ha alcuna impostazione SSL o x509 (indicata dai valori vuoti nelle colonne ssl_* e x509_*)
  • Utilizza il plug-in mysql_native_password per l'autenticazione (il nome del plug-in è elencato nella colonna del plug-in.)
*************************** 1. row ***************************
                  Host: localhost
                  User: testuser
              Password: *14E65567ABDB5135D0CFD9A70B3032C179A49EE7
           Select_priv: Y
           Insert_priv: N
...
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type:
            ssl_cipher:
           x509_issuer:
          x509_subject:
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string:
      password_expired: N

Autenticazione nativa

Quando ti connetti a un server MySQL utilizzando il plug-in di autenticazione della password nativa (il meccanismo di autenticazione predefinito), corrisponde al nome utente specificato, all'host da cui ti stai connettendo e alla tua password rispetto alle righe nella tabella mysql.user per determinare se puoi connetterti ed eseguire azioni.

Per connetterti al server locale utilizzando il client mysql, specifica il nome utente e la password per l'account che desideri utilizzare:

shell> mysql -u[username] -p[password]
Nota che il nome host associato al tuo utente nella tabella mysql.user fa riferimento al nome dell'host da cui ti stai connettendo, non all'host del server.

Per connetterti a un server che non è installato sull'host locale del tuo client, fornisci il nome host del server a cui ti stai connettendo:

shell> mysql -u[username] -p[password] -h[server_host]

Creazione di un account utente

Un nome account è costituito da un nome utente e dal nome dell'host client da cui l'utente deve connettersi al server. I nomi degli account hanno il formato "nome_utente"@"nome_host '. I nomi utente possono contenere fino a 16 caratteri. È necessario utilizzare virgolette singole attorno a nomi utente e nomi host se contengono caratteri speciali, ad esempio trattini. Se un valore è valido come identificatore senza virgolette, le virgolette sono facoltative. Tuttavia, puoi sempre usare le virgolette.

Ad esempio, utilizza l'istruzione CREATE USER…IDENTIFIED BY per creare un account:
– Per un utente denominato jim
– Per connettersi da localhost
– Usando la password Abc123

CREATE USER 'jim'@'localhost' IDENTIFIED BY 'Abc123';

Evita possibili rischi per la sicurezza durante la creazione di account:

  • Non creare account senza una password.
  • Non creare account anonimi.
  • Ove possibile, evita i caratteri jolly quando specifichi i nomi host degli account.

Modelli di nome host

Utilizza un modello host contenente il % o _ caratteri jolly per configurare un account che consenta all'utente di connettersi da qualsiasi host in un intero dominio o sottorete. Se ometti la parte host di un nome account quando scrivi un estratto conto, MySQL assume un nome host di %.

Un valore host di %.example.com corrisponde a qualsiasi host nel dominio example.com. Un valore host di 192.168.% corrisponde a qualsiasi host nella sottorete 192.168. Un valore host di % corrisponde a qualsiasi host, consentendo all'utente di connettersi da qualsiasi host. Utilizzare un indirizzo IP con una subnet mask per consentire all'utente di connettersi da qualsiasi host con un indirizzo all'interno di quella subnet. Ad esempio, un valore di 10.0.0.0/255.255.255.0 corrisponde a qualsiasi host con 10.0.0 nei primi 24 bit del suo indirizzo IP.

Evitare l'uso di caratteri jolly nei nomi host, a meno che non sia strettamente necessario e adeguatamente controllato per evitare abusi o esposizioni accidentali. Eseguire i controlli periodici come segue:

mysql> SELECT User, Host FROM mysql.user WHERE Host LIKE '%\%%';

Esempi di nome utente e nome host:

  • [email protected]
  • giovanni@'10.20.30.%'
  • john@'%.ourdomain.com'
  • giovanni@'10.20.30.0/255.255.255.0'

Per specificare un account utente anonimo (ovvero un account che corrisponde a qualsiasi nome utente), specifica una stringa vuota per la parte nome utente del nome account:

mysql> CREATE USER ''@'localhost';

Evita di creare account anonimi, in particolare quelli che non hanno password (come nell'esempio sopra). Questo aiuta a evitare i rischi per la sicurezza che deriverebbero dall'apertura dell'accesso all'installazione di MySQL. Se un host corrisponde a due o più pattern, MySQL sceglie il pattern più specifico.

Impostazione della password dell'account

Il modo più comune per modificare la password di un account esistente senza modificare nessuno dei suoi privilegi è utilizzare IMPOSTA PASSWORD dichiarazione. Ad esempio, per impostare la password per jim sull'host locale su NewPass, utilizza la seguente istruzione:

mysql> SET PASSWORD FOR jim@localhost = PASSWORD('NewPass');

Se hai effettuato l'accesso come utente non root e il tuo utente non ha il privilegio UPDATE per il database mysql, puoi modificare solo la tua password. A tale scopo, utilizzare l'istruzione SET PASSWORD senza la clausola FOR:

mysql> SET PASSWORD = PASSWORD('NewPass');

Quando usi SET PASSWORD, usa la PASSWORD() funzione per crittografare la password. Si noti che l'istruzione CREATE USER crittografa automaticamente la password fornita, quindi non è necessario utilizzare la funzione PASSWORD() quando si crea un utente con CREATE USER.

Usa i seguenti comandi mysqladmin per impostare le password dalla shell:

shell> mysqladmin -u root password 'rootpass'
shell> mysqladmin -u root -h host_name password 'rootpass'

Negli esempi precedenti, 'rootpass' rappresenta la password di root e 'host_name' è il nome dell'host da cui l'account root accede al server MySQL.

Conferma delle password

Assegna password complesse e univoche a tutti gli account utente. Evita le password che possono essere facilmente indovinate. Utilizza la seguente istruzione SELECT per elencare tutti gli account
senza password:

SELECT Host, User FROM mysql.user WHERE Password = '';

Per identificare password duplicate:

SELECT User FROM mysql.user GROUP BY password HAVING count(user)>1;

Per far scadere la password di qualsiasi utente, utilizzare la query seguente:

ALTER USER jim@localhost PASSWORD EXPIRE;

Per emettere le istruzioni SELECT negli esempi precedenti, devi connetterti con un account utente con privilegi SELECT sullo schema mysql o sulla tabella mysql.user. Puoi avere più account che si applicano a un nome utente specifico. Ad esempio, se l'utente jim accede da due posizioni e tu configuri account per ciascuna posizione, come jim@localhost e jim@'192.168.14.38', entrambi gli account identificati come jim potrebbero avere la stessa password.

È possibile far scadere la password di un utente con l'istruzione ALTER USER…PASSWORD EXPIRE. Se la password scade, è necessario modificare la password utilizzando un'istruzione SET PASSWORD al successivo accesso. Tutte le istruzioni eseguite che non iniziano con SET restituiscono un errore finché non si modifica la password, come in questo esempio:

mysql> SELECT * FROM City WHERE 1=2;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
mysql> SET PASSWORD = PASSWORD('new_pwd'); 
Query OK, 0 rows affected (0.01 sec) 

mysql> SELECT * FROM City WHERE 1=2;
Empty set (0.00 sec)

Manipolazione degli account utente

Usa RINOMINA UTENTE dichiarazione per rinominare un account utente:

RENAME USER 'jim'@'localhost' TO 'james'@'localhost';

La query precedente cambia il nome dell'account di un account esistente o cambia il nome utente o le parti del nome host del nome dell'account, o entrambi.

Utilizzare l'istruzione DROP USER per rimuovere un account utente:

DROP USER 'jim'@'localhost';

La query precedente revoca tutti i privilegi per un account esistente e quindi rimuove l'account. Elimina anche tutti i record per l'account da qualsiasi tabella di sovvenzione in cui esistono.

Comprensione dell'autenticazione pluggable MySQL
Comprensione dei privilegi MySQL


Linux
  1. Gestione dei documenti open source?

  2. Gestione utenti Linux di base

  3. Connettiti a un database MySQL da remoto

  4. Nozioni di base su utenti e database MySQL

  5. Guida per principianti alla gestione del software Linux con RPM

Guida agli eventi MySQL e all'utilità di pianificazione degli eventi

Una guida per principianti a LVM

Una guida per principianti a Cron Jobs

Una guida per principianti alla gestione degli utenti su desktop e server Ubuntu

Guida completa all'amministrazione degli utenti su Linux

La guida completa per installare MySQL su Ubuntu