Apakah ini satu set normal hak istimewa MySQL?

9

Menggunakan phpmyadmin pada setup wamp pengujian lokal, dan juga cukup banyak judul menyatakan, ada 3 pengguna ditandai sebagai pengguna = APA SAJA, kata sandi = TIDAK, seperti:

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

Tidak satu pun dari 3 pengguna yang memiliki hak khusus untuk tabel apa pun, sehingga tampaknya mereka tidak bisa berbuat banyak. Apakah ini semacam tindakan keamanan umum, untuk secara eksplisit menyatakan bahwa pengguna 'Apa saja' yang tidak termasuk dalam kelompok pengguna lain tidak memiliki hak istimewa?

Chris
sumber
Ini sebenarnya pertanyaan yang sangat bagus karena mysql hadir dengan izin default yang tidak dipublikasikan. +1 !!!
RolandoMySQLDBA

Jawaban:

6

Pada kenyataannya, ketiga akun pengguna itu sebenarnya cukup berbahaya. Mereka menimbulkan ancaman yang sangat besar untuk menguji basis data.

Sayangnya, mysql hadir dengan akses penuh untuk menguji basis data. Bagaimana Anda bisa menemukannya?

Jalankan kueri ini:

 SELECT user,host,db from mysql.db;

Setelah pemasangan mysql, Anda akan melihat dua baris yang memberikan akses penuh ke database apa pun yang bernama 'test' atau yang 5 karakter pertamanya adalah 'test_'.

Mengapa ini menjadi masalah ???

Coba jalankan perintah ini:

$ mysql -u'' -Dtest

Anda akan menghubungkan database pengujian tanpa kata sandi.

Sekarang, buat tabel dan muat dengan baris:

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

OK, masalah besar. Bisakah Anda menggandakan tabel ini dalam ukuran 30 kali ???

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

Mendapatkan apa ?? Tabel dengan 1.073.741.824 baris. Mudah, 4GB +.

Bayangkan membuat tabel ukuran apa saja. Bagaimana kalau membuat banyak tabel dalam database pengujian dan secara bebas mengaksesnya sesuka hati?

Hal terbaik yang dapat Anda lakukan dalam situasi ini adalah menjalankan kueri ini:

DELETE FROM mysql.db;

dan mulai kembali mysql. Kemudian, ketiga akun tersebut akan dianggap tidak beroperasi dengan benar.

Cobalah !!!

UPDATE 2011-09-12 10:00 EDT

Ini menghapus:

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

hanya apa yang Anda butuhkan untuk instalasi awal. Namun, jika Anda sudah memiliki pengguna, Anda dapat menjalankan ini sebagai gantinya:

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

Ini akan menghapus dua izin DB khusus.

Seperti yang saya sebutkan dalam jawaban saya, tiga izin sangat berbahaya untuk database pengujian. Menjalankan DELETE ini akan menetralisir akun tersebut karena memiliki hak penuh untuk menguji basis data.

RolandoMySQLDBA
sumber
Terima kasih atas penjelasannya, tetapi akan HAPUS DARI mysql.db menghapus bagian lain dari 3 pengguna itu? Saya tidak ingin menghapus data / hak istimewa selain dari itu 3
Chris
@ Chris - Saya memperbarui jawaban saya 3 jam yang lalu untuk menanggapi komentar Anda.
RolandoMySQLDBA
-1

Bahaya menyimpan akun akun anonim ini telah dijelaskan dengan sangat baik.

Manual ini menyediakan daftar langkah-langkah komprehensif yang harus diambil untuk " Mengamankan Akun MySQL awal ".

Secara khusus, bagian "Menetapkan Kata Sandi Akun Anonim" menyarankan untuk menghapus akun ini.

Juga, bab "Mengamankan Database Uji" menyarankan:

Secara default, mysql.dbtabel berisi baris yang mengizinkan akses oleh pengguna ke testdatabase dan database lain dengan nama yang dimulai dengan test_. (...) Ini berarti bahwa basis data semacam itu dapat digunakan bahkan oleh akun yang sebaliknya tidak memiliki hak istimewa. Jika Anda ingin menghapus akses pengguna mana pun untuk menguji basis data, lakukan hal berikut:

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(...) Dengan perubahan sebelumnya, hanya pengguna yang memiliki hak istimewa basis data global atau hak istimewa yang diberikan secara eksplisit untuk database pengujian yang dapat menggunakannya.

Khususnya, pada sistem non-Windows, disarankan untuk menjalankan mysql_secure_installationskrip. Pemasang Windows yang saya percaya menawarkan beberapa profil pemasangan. Beberapa dari mereka akan secara otomatis menonaktifkan pengaturan tidak aman. Jika tidak, daftar periksa perlu dijalankan secara manual.

Perawatan harus diambil dengan installer pihak ketiga seperti WAMP. Izin default yang ditunjukkan dalam manual MySQL resmi mungkin tidak selalu berlaku untuk instalasi kustom ini (seperti dalam "di luar lingkup manual). Tentu saja, untuk server produksi, instalasi WAMP dan sejenisnya harus dihindari dengan cara apa pun .

RandomSeed
sumber
mengapa downvote pada jawaban ini?
user12345