Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:come evitare che un utente veda anche se ho altri DB e concedere l'accesso selezionato a una vista su un DB?

Ho trovato la panoramica contenuta in questo articolo ancora più utile dell'effettiva documentazione MySQL per aver descritto il quadro generale di come vengono concessi o negati i privilegi MySQL.

Il succo dell'articolo di panoramica è che i privilegi sono controllati da una serie di tabelle di autorizzazioni sempre più dettagliate in mysql database:mysql.user , mysql.db , mysql.host , mysql.tables_priv , mysql.columns_priv , mysql.procs_priv . La regola generale è che un valore "Y" per un privilegio in una tabella a grana più fine prevale su un valore "N" in una tabella a grana più grossa. Quindi la strategia consigliata è iniziare negando la maggior parte dei privilegi nell'user tabella (che fornisce il controllo più grossolano), quindi esegui solo le sostituzioni specifiche che desideri nelle tabelle a grana più fine.

In particolare, esiste un privilegio chiamato SHOW_DATABASES che è determinato da Show_db_priv colonna nel mysql.user tavolo; ti consigliamo di impostarlo su "N" per l'utente in questione (e come descritto sopra, potresti voler impostare anche la maggior parte delle altre autorizzazioni nella tabella utente su "N") e quindi concedere solo i privilegi che l'utente ha effettivamente bisogno nel mysql.db o mysql.tables_priv tabella o qualsiasi altra cosa sarebbe appropriata per il tuo caso particolare.