MySQL SHOW GRANTS
menunjukkan izin dari pengguna saat ini.
Apakah ada cara untuk login sebagai root dan menunjukkan izin semua pengguna?
mysql
permissions
Adam Matan
sumber
sumber
ERROR 1146 (42S02): Table 'common_schema.sql_show_grants' doesn't exist
information_schema.user_privileges
?SUNTING:
Seperti yang disebutkan oleh Shlomi Noach:
sumber
information_schema.user_privileges
hanya mencantumkan hak istimewa tingkat pengguna, sepertiSUPER
,RELOAD
dll. Ia juga mencantumkan hibah DML serba sepertiSELECT
. Itu tidak mencantumkan basis data spesifik, khusus tabel, khusus kolom, khusus rutin. Ada kedepan, hibahGRANT SELECT ON mydb.* TO myuser@localhost
tidak tidak ditampilkan diinformation_schema.user_privileges
. Thecommon_schema
solusi yang disajikan di atas Data agregat dariuser_privileges
dan tabel lain untuk memberikan gambaran lengkap.Fragmen shell Linux ini melingkupi semua pengguna MySQL dan melakukan SHOW GRANTS untuk masing-masing:
Berfungsi paling baik jika Anda dapat terhubung ke MySQL tanpa kata sandi.
Output diformat sehingga dapat dijalankan di shell MySQL. Perhatian: Keluaran juga berisi izin dan kata sandi pengguna root MySQL! Hapus baris-baris itu jika Anda tidak ingin pengguna root MySQL diubah.
sumber
mysql --defaults-file=/auth/root-mysql.cnf --batch --skip-column-names --execute "SELECT User, Host from mysql.user" | while read user host; do echo "SHOW GRANTS FOR '${user}'@'${host}';"; done | mysql --defaults-file=/auth/root-mysql.cnf --batch | sed 's/^Grants for/-- Grants for/'
select * from mysql.user;
Dapat memberi Anda Daftar pengguna dan Hak yang ditugaskan untuk masing-masing, memerlukan akses ke
mysql.user
tabel danroot
pengguna memilikinya.sumber
mysql.db
. Hak istimewa pada tabel tertentu adamysql.tables_priv
, dan seterusnya. Jadi tidak sesederhana itu.select * from mysql.user
ke crackstation.net dan lihat output yang tidak rusak.One liner (ubah
-uroot
menjadi-u$USER_NAME
untuk digunakan dengan pengguna lain) di bash Unix (karena backticks):atau tanpa backticks dan dengan kata sandi inline (ruang di depan perintah mengecualikannya dari Bash history di Ubuntu):
Di Windows:
sumber
Jika Anda dapat menjalankan pernyataan SELECT berikut tanpa kesalahan:
maka jangan ragu untuk menggunakan kode berikut (di bawah), yang ditulis dalam sintaks .sql.
Saya merancang kueri ini dalam upaya membangun kembali pernyataan GRANT untuk semua izin yang ada (untuk pemeliharaan rutin selama migrasi basis data). Ada beberapa masalah yang harus ditangani, seperti penautan kata sandi pengguna, tetapi karena kami sering memperbarui kata sandi, itu tidak termasuk dalam ruang lingkup proyek ini.
Dengan senang hati menjawab / memverifikasi semua pertanyaan atau masalah
sumber
Ini akan memberi Anda pandangan yang lebih baik ...
sumber
Perintah
SHOW GRANTS [FOR user]
dapat menampilkan pengguna yang Anda inginkan. Lihat di sini untuk detail lebih lanjut.sumber
Seperti yang disebutkan dalam jawaban ini , Anda dapat menjalankan serangkaian perintah berikut untuk membuat daftar hak basis data spesifik, spesifik tabel, khusus kolom, dan khusus rutin semua pengguna. Perhatikan bahwa Anda perlu menjalankan ini dari shell, bukan command prompt MySQL.
Keuntungan dari pendekatan ini adalah Anda tidak perlu menginstal perangkat lunak tambahan.
sumber
Jika Anda sering mengelola basis data, Anda mungkin ingin tetap memiliki hak istimewa yang ketat. Anda dapat menggunakan prosedur tersimpan untuk menjalankan pemeriksaan dengan cepat. Contoh ini berfungsi di mariadb mungkin perlu tweak untuk bekerja dengan versi mysql standar.
Menggunakan jawaban dari Mansur Ali dengan sedikit tweak penataan ulang kolom dan menambahkan beberapa pemesanan untuk lebih mengatur output.
Menggunakan login root:
Anda bisa mengubah prosedur untuk memeriksa tabel mysql.user sebagai gantinya.
Penggunaan, menggunakan login root:
Saya menggunakan meja kerja mysql di Ubuntu untuk menjalankan bagian create procedure dari jawaban ini.
Sebagai tambahan dan sedikit keluar dari topik di sini tetapi, Anda juga bisa memiliki prosedur untuk menunjukkan host atau pengguna yang tidak dikenal. Contoh untuk host yang tidak dikenal:
Catatan penggunaan: Berikan string host yang dipisahkan oleh koma sehingga hanya satu set '' yang digunakan:
Anda juga bisa membuat variabel kolom dengan memasukkan parameter lain dalam prosedur dan menyebutnya dengan ShowUnknownHosts (pengguna, 'user1, user2'); sebagai contoh.
sumber