GNU/Linux >> Linux Esercitazione >  >> Linux

Comprendere i privilegi di MySQL

La funzione principale del sistema di autorizzazione MySQL è associare un utente autenticato con privilegi su un database, come SELECT, INSERT, UPDATE e DELETE. La funzionalità del sistema di autorizzazione include la possibilità di avere utenti anonimi e di abilitare funzioni specifiche come LOAD DATA INFILE e varie operazioni amministrative. Questa autorizzazione garantisce che gli utenti possano eseguire solo le operazioni per le quali sono stati concessi i privilegi appropriati.

Determinazione dei privilegi utente appropriati

Puoi concedere diversi tipi di privilegi a un account MySQL a diversi livelli:a livello globale o per database, tabelle o colonne particolari. Ad esempio, puoi dare a un utente la possibilità di selezionare da qualsiasi tabella in qualsiasi database concedendo all'utente il privilegio SELECT a livello globale.

Puoi dare a un account il controllo completo su un database specifico senza avere alcuna autorizzazione su altri database. L'account può quindi creare il database, creare tabelle e altri oggetti del database, selezionare dalle tabelle e aggiungere, eliminare o aggiornare nuovi record.

Concessione di privilegi amministrativi

I seguenti privilegi globali si applicano agli utenti amministrativi:

  • FILE :consente agli utenti di istruire il server MySQL a leggere e scrivere file nel file system host del server.
  • PROCESSO :consente agli utenti di utilizzare l'istruzione SHOW PROCESSLIST per visualizzare tutte le istruzioni che i client stanno eseguendo.
  • SUPER :consente agli utenti di terminare le altre connessioni client o di modificare la configurazione di runtime del server.
  • TUTTI :Concede tutti i privilegi tranne la possibilità di concedere privilegi ad altri utenti.

Il SUPER il privilegio amministrativo offre agli utenti la possibilità di eseguire attività aggiuntive, inclusa l'impostazione di variabili globali e la terminazione delle connessioni client. Ci sono anche alcuni specificatori di privilegi speciali:

– Utilizzare TUTTI e TUTTI I PRIVILEGI per concedere tutti i privilegi tranne la possibilità di concedere privilegi ad altri account. Usa CONCEDERE TUTTI... CON L'OPZIONE CONCESSIONE per concedere tutti i privilegi, inclusa la possibilità di concedere privilegi ad altri account.
– Utilizzare USAGE per concedere la possibilità di connettersi al server. Questo privilegio crea un record nella tabella utente per l'account, ma senza alcun privilegio. L'account può quindi essere utilizzato per accedere al server per scopi limitati, come l'emissione di dichiarazioni SHOW VARIABLES o SHOW STATUS. L'account non può essere utilizzato per accedere ai contenuti del database come le tabelle, sebbene tali privilegi possano essere concessi in un secondo momento.

Altri privilegi amministrativi includono CREA UTENTE , CREA TABELLE TEMPORANEE , MOSTRA BANCHE DATI , BLOCCO TABELLE , RICARICA e SPEGNIMENTO . I privilegi amministrativi, inclusi quelli nella diapositiva, possono essere utilizzati per compromettere la sicurezza, accedere a dati privilegiati o eseguire attacchi denial-of-service su un server. Concedi privilegi amministrativi con parsimonia, perché possono essere abusati da utenti malintenzionati o negligenti.

Dichiarazione GRANT

L'estratto conto GRANT crea un nuovo account o modifica un account esistente.

Sintassi GRANT:

 GRANT SELECT ON world_innodb.* TO 'kari'@'localhost' IDENTIFIED BY 'Abc123';

Nella sintassi/esempio sopra, l'istruzione concede il privilegio SELECT per tutte le tabelle nel database world_innodb a un utente chiamato kari, che deve connettersi dall'host locale e utilizzare una password di Abc123.

Clausole della dichiarazione:
1. Privilegi da concedere
2. Livello di privilegio:

  • Globale:*.*
  • Database:[db_name].*
  • Tabella:[db_name].[table_name]
  • Routine memorizzata:[db_name].[routine_name]

3. Account a cui stai concedendo il privilegio.
4. Una password opzionale.

Le clausole della dichiarazione GRANT hanno i seguenti effetti:

  • CONCESSIONE parola chiave:specifica uno o più nomi di privilegi che indicano quali privilegi si stanno concedendo. I nomi dei privilegi non fanno distinzione tra maiuscole e minuscole. Per elencare più privilegi, separali con virgole.
  • ACCESO clausola:specifica il livello dei privilegi che stai concedendo.
  • A clausola:specifica l'account a cui si stanno concedendo i privilegi. Se l'account non esiste già, l'estratto conto lo crea.
  • IDENTIFICATO DA clausola:(Facoltativo) Assegna la password specificata all'account. Se l'account esiste già, la password sostituisce quella precedente.

L'omissione della clausola IDENTIFIED BY ha il seguente effetto:

  • Se l'account nella clausola TO esiste, la sua password rimane invariata.
  • Se l'account nella clausola TO non esiste, viene creato con una password vuota.

Come misura di sicurezza, abilita NO_AUTO_CREATE_USER Modalità SQL per evitare che l'estratto conto GRANT crei nuovi account quando non specifichi una clausola IDENTIFIED BY.

Mostra i privilegi GRANT

SHOW GRANTS visualizza le istruzioni che ricreano i privilegi per l'utente specificato. Mostra i privilegi solo per l'esatto conto specificato nell'estratto conto. L'esempio seguente mostra i privilegi solo per [email protected], non per kari@%.

 SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER();

Puoi anche specificare un nome account per mostrare le sovvenzioni per:

 mysql>SHOW GRANTS FOR
'kari'@'myhost.example.com'; 
+----------------------------------------------------------------+ 
| Grants for [email protected]                             | 
+----------------------------------------------------------------+ 
| GRANT FILE ON *.* TO 'kari'@'myhost.example.com'               | 
| GRANT SELECT ON `world_innodb`.* TO 'kari'@'myhost.example.com‘| 
| IDENTIFIED BY PASSWORD                                         | 
| '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA'                    | 
+----------------------------------------------------------------+

L'output visualizzato sopra è costituito da due istruzioni GRANT. Le loro clausole ON mostrano i privilegi rispettivamente a livello globale e di database. Se l'account ha una password, SHOW GRANTS visualizza una clausola IDENTIFIED BY PASSWORD alla fine dell'istruzione GRANT; questa clausola elenca i privilegi globali dell'account. La parola PASSWORD dopo IDENTIFIED BY indica che il valore della password visualizzato è il valore crittografato memorizzato nella tabella utente, non la password effettiva. Poiché la password viene archiviata utilizzando la crittografia unidirezionale, MySQL non ha modo di visualizzare la password non crittografata.

Se l'account può concedere alcuni o tutti i suoi privilegi ad altri account, l'output viene visualizzato WITH GRANT OPTION alla fine di ogni istruzione GRANT a cui si applica.

Restrizioni privilegi utente

Non puoi negare esplicitamente l'accesso a un utente specifico. Non puoi associare una password a un oggetto specifico come un database, una tabella o una routine.

Tabelle delle sovvenzioni

Il server MySQL legge le tabelle di concessione dal database mysql in memoria all'avvio e basa tutte le decisioni di controllo dell'accesso su quelle tabelle. Le tabelle corrispondono ai livelli di privilegio:

Livello di privilegio/Tabella Contenuti e privilegi
utente Contiene un record per ogni account noto al server
db Privilegi specifici del database
tables_priv Privilegi specifici della tabella
colonne_priv Privilegi specifici della colonna
procs_priv Procedure memorizzate e privilegi di funzioni

L'utente tabella contiene un record per ogni account noto al server, nonché i suoi privilegi globali. Indica anche altre informazioni sull'account, come:

  • Eventuali limiti di risorse a cui è soggetto
  • Se le connessioni client che utilizzano l'account devono essere effettuate tramite una connessione sicura tramite SSL

Ogni account deve avere un record di tabella utente; il server determina se accettare o rifiutare ogni tentativo di connessione leggendo il contenuto di quella tabella. Ogni account ha record anche nelle altre tabelle di concessione se dispone di privilegi a un livello diverso da quello globale.

Utilizzo delle tabelle delle sovvenzioni

Il server determina se un client può connettersi in base alle colonne Host, Utente e Password della tabella utenti. Per connettersi correttamente, MySQL deve abbinare un record nella tabella utente all'host da cui si connette il client, il nome utente fornito dal client e la password elencata nel record corrispondente.

Dopo che un client si è connesso, MySQL controlla i privilegi di accesso per ogni istruzione confrontando l'identità dell'account con le colonne Host e User delle tabelle dei privilegi.

  • I privilegi in ogni riga della tabella utente si applicano globalmente all'account identificato dalle colonne Host e Utente.
  • I privilegi nei record corrispondenti delle tabelle db, tables_priv, columns_priv e procs_priv si applicano al livello identificato dal nome della tabella dei privilegi specifica.

Ad esempio, i privilegi in un record di tabella db si applicano al database denominato nel record, ma non ad altri database. Il processo di installazione di MySQL crea le tabelle di concessione.

  • Le tabelle Grant utilizzano il motore di archiviazione MyISAM.
  • La disponibilità di MyISAM è garantita.

Effettuare modifiche ai privilegi

Il server legge le tabelle di concessione in memoria durante la sequenza di avvio e utilizza le copie in memoria per controllare l'accesso del client. Il server aggiorna le sue copie in memoria delle tabelle delle sovvenzioni alle seguenti condizioni:

  • Modifichi un account utente emettendo un estratto conto come CREATE USER, GRANT, REVOKE o SET PASSWORD.
  • Ricarichi le tabelle in modo esplicito emettendo un'istruzione FLUSH PRIVILEGES o eseguendo un comando mysqladmin flush-privileges o mysqladmin reload.

Evita di apportare modifiche direttamente alle tabelle delle sovvenzioni per i seguenti motivi:

  • La sintassi degli estratti conto è progettata per essere chiara e diretta.
  • Se si commette un errore in un estratto conto, l'estratto conto non riesce e non cambia alcuna impostazione.
  • Se commetti un errore modificando direttamente le tabelle delle sovvenzioni, puoi bloccare tutti gli utenti fuori dal sistema.

Quando vengono applicate le modifiche

  • Le modifiche ai privilegi e alle password globali si applicano solo alle connessioni successive di quell'account.
  • Le modifiche ai privilegi a livello di database si applicano dopo la successiva istruzione USE db_name del client.
  • Le modifiche alla tabella e ai privilegi di routine vengono applicate immediatamente.

Revocare i privilegi dell'account

Utilizzare l'istruzione REVOKE per revocare privilegi specifici dell'istruzione SQL:

REVOKE DELETE, INSERT, UPDATE ON world_innodb.* FROM 'Amon'@'localhost';

Utilizzare l'istruzione REVOKE per revocare i privilegi da un account. È possibile scegliere di revocare i privilegi per vari motivi, ad esempio una riduzione dell'accesso richiesto di un utente. La sintassi dell'istruzione REVOKE ha le seguenti clausole:

  • REVOCA parola chiave:specifica l'elenco dei privilegi da revocare.
  • ACCESO clausola:indica il livello al quale i privilegi devono essere revocati.
  • DA clausola:specifica il nome dell'account.

Nell'esempio mostrato sopra, si presuppone che Amon abbia i privilegi SELECT, DELETE, INSERT e UPDATE sul database world_innodb, ma si desidera modificare l'account in modo che abbia solo l'accesso SELECT. Il primo esempio revoca i privilegi che gli consentono di apportare modifiche.

Per revocare il privilegio di concedere privilegi ad altri utenti:

REVOKE GRANT OPTION ON world_innodb.* FROM 'Jan'@'localhost';

L'esempio sopra revoca la capacità di Jan di concedere ad altri utenti tutti i privilegi che detiene per il database world_innodb, revocando il privilegio GRANT OPTION dal suo account.

Per revocare tutti i privilegi, inclusa la concessione di privilegi ad altri:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'Sasha'@'localhost';

L'esempio precedente revoca tutti i privilegi detenuti dall'account di Sasha (a qualsiasi livello), revocando TUTTI I PRIVILEGI e l'OPZIONE DI CONCESSIONE dal suo account.

Nota :utilizza l'istruzione SHOW GRANTS prima di emettere REVOKE per determinare quali privilegi revocare, quindi di nuovo in seguito per confermare il risultato. Guida per principianti alla gestione degli utenti MySQL
Informazioni sull'autenticazione pluggable MySQL


Linux
  1. Installa MariaDB o MySQL su Linux

  2. Come aggiungere un nuovo utente MySQL e concedere privilegi di accesso

  3. Comprendere YAML per Ansible

  4. Riparazione di database MySQL InnoDB

  5. Utilità di pianificazione eventi MySQL

Come rimuovere o eliminare un account utente MySQL

Comprendere i permessi dei file Linux

Come controllare i privilegi utente MySQL in Linux

Comprensione dei processi su Linux

Come impostare privilegi limitati su un account rivenditore in WHM?

Che cos'è MySQL vs MariaDB vs Percona