Sebuah skrip seperti ini akan menggunakan klien cli mysql untuk mencetak serangkaian pernyataan hibah yang perlu Anda gunakan untuk membuat ulang akun pengguna. Perintah ini akan bekerja paling baik jika kredensial basis data Anda tersimpan di dalam .my.cnf Anda
#!/bin/bash
# adapted from (http://www.pyrosoft.co.uk/blog/2006/10/18/show-grants-for-all-users-on-mysql/)
(
mysql --batch --skip-column-names -e "SELECT user, host FROM user" mysql
) | while read user host
do
echo "# $user @ $host"
mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
done
Jika Anda melompat dari satu versi mysql ke versi lain, Anda mungkin ingin menggunakan ini alih-alih hanya membuang dari database mysql. Skema database mysql terkadang diperbarui.
Ini juga akan memungkinkan Anda untuk memilih dan memilih akun yang ingin Anda buat ulang, jika ada beberapa kesalahan yang ingin Anda hilangkan.
Saya baru-baru ini menggunakan ini pada pengguna yang menyertakan spasi dalam nama, yang bingung read
, karena IFS secara default menyertakan karakter spasi sebagai pemisah. Perintah baru dan lebih baik saya, yang tampaknya bekerja lebih baik pada sistem nama pengguna aneh.
IFS=$'\t'; while read user host; do
echo "user:$user host:$host"
mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
echo ""
done < <(mysql --batch --skip-column-names -e "SELECT user, host FROM mysql.user")