Je crée un script bash qui, entre autres, rassemble des données à partir d'une base de données MySQL. Mon utilisateur MySQL a des privilèges d'écriture, mais pour des raisons de sécurité, je voudrais le mettre temporairement en lecture seule. Est-il possible de le faire à partir d'une ligne de commande?
Pour répondre à votre question d'origine, vous pouvez mettre toute votre base de données en mode lecture seule par ces commandes:
FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = 1;
et revenir en mode normal avec:
SET GLOBAL read_only = 0;
UNLOCK TABLES;
Attention, il s'agit d'une opération qui aura un impact profond sur le comportement de la base de données. Donc, avant d'exécuter cela, lisez la documentation disponible pour les commandes ci-dessus. Une manière beaucoup plus courante consiste à révoquer les privilèges DML de l'utilisateur spécifique et à les accorder ensuite.
Si vous utilisez MySQL 5.6 ou plus récent et InnoDB, vous pouvez rendre une session en lecture seule.
SET SESSION TRANSACTION READ ONLY;
https://dev.mysql.com/doc/refman/5.6/en/set-transaction.html
"LIRE SEULEMENT" offre également un modeste avantage de performance .
Eh bien, si l'utilisateur dispose actuellement de tous les privilèges, vous devez le révoquer
$>mysql -u DB_USER -pDB_PASS --execute="REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'YOUR_USER';"
Après cela, vous lui donnez l'autorisation de sélection
$>mysql -u DB_USER -pDB_PASS --execute="GRANT SELECT ON 'YOUR_DATABASE'@.* TO 'YOUR_USER'@'%';FLUSH PRIVILEGES;"
Faites votre travail et accordez ensuite des privilèges à l'utilisateur
$>mysql -u DB_USER -pDB_PASS --execute="GRANT ALL ON 'YOUR_DATABASE'@.* TO 'YOUR_USER'@'%';FLUSH PRIVILEGES;"
Et c'est tout le monde
REMARQUE: examen pour devis, j'ai peut-être oublié quelque chose