Pengguna Database MySQL: Hak Istimewa apa yang dibutuhkan?

52

Instruksi pemasangan singkat untuk WordPress ( "5 Menit" ) menyatakan bahwa:

Buat database untuk WordPress di server web Anda, serta pengguna MySQL yang memiliki semua hak istimewa untuk mengakses dan memodifikasinya.

Saat membuat blog baru secara profesional, saya bertanya-tanya bagaimana cara memetakan apa yang ditawarkan oleh konfigurasi hak akses / izin pengguna database MySQL:

  • Data: SELECT , INSERT, UPDATE,DELETE
  • Definisi: CREATE , ALTER,DROP
  • Tambahan: INDEX
  • Lebih:
    1. LOCK TABLES
    2. REFERENCES
    3. CREATE TEMPORARY TABLES
    4. CREATE VIEW
    5. SHOW VIEW
    6. CREATE ROUTINE
    7. EXECUTE
    8. ALTER ROUTINE

Saya cukup yakin untuk tiga grup pertama, saya menamainya Data, Definisi, dan Ekstra di sini. Tetapi bagaimana dengan yang lain di bawah entri More ? Biasanya saya akan mengatakan, itu tidak diperlukan, tetapi saya ingin mendapatkan pendapat kedua.

hakre
sumber

Jawaban:

13

Yang lain tidak diperlukan seperti yang Anda tunjukkan.

Btw, yang bisa Anda lakukan adalah, mengatur pengguna / pass secara kondisional berdasarkan halaman yang diminta. Seperti di unprivileged dengan pilih / masukkan / perbarui / hapus untuk penggunaan normal, dan diistimewakan dengan hal-hal terkait definisi / indeks di samping ketika mengunjungi halaman upgrade.

Denis de Bernardy
sumber
1
Apakah ada referensi tentang cara mengatur pengguna / pass secara kondisional berdasarkan halaman yang diminta di lingkungan WordPress? TA
superjos
@superjos: Bukannya saya sadar dari atas kepala saya, tetapi intinya adalah untuk menentukan pengguna DB normal pilih / masukkan / perbarui / hapus dalam wp-config dan, ketika url cocok dengan yang relevan / halaman wp-admin (kemungkinan meningkatkan, mengaktifkan tema, dan mengaktifkan plugin), untuk menentukan pengguna alternatif yang dapat melakukan segalanya.
Denis de Bernardy
34

"Semua hak istimewa" biasanya berarti Anda harus memberikan segalanya kepada pengguna. Namun ...

Saya telah menemukan setidaknya satu artikel yang mengklaim bahwa pengguna MySQL hanya membutuhkan:

  • PILIH
  • MEMASUKKAN
  • MEMPERBARUI

Menggali lebih dalam , saya menemukan bahwa untuk beroperasi sepenuhnya (pembaruan otomatis, instalasi / pencopotan plug-in, dll.), WordPress memerlukan beberapa izin tambahan:

  • MENGHAPUS
  • ALTER (untuk pembaruan)
  • BUAT TABEL
  • DROP TABEL

Juga, tidak dirujuk tetapi masuk akal:

  • INDEKS

Tapi itu adalah dua referensi solid yang bisa saya temukan yang didukung oleh pendapat yang diposting di tempat lain. Saya masih mendorong Anda untuk tetap menggunakan GRANT ALL, tetapi jika Anda benar - benar harus membatasi penggunaan DB Anda, mulailah dengan 7 hak istimewa ini dan uji sepenuhnya untuk memastikan semuanya berjalan seperti yang diharapkan.

EAMann
sumber
Terima kasih telah berbagi pemikiran Anda. Untuk situs yang terinstal, saya tidak MENGHARGAI SEMUA karena ini bukan situs pengembangan dan sebaliknya tetap berpegang pada semua. INDEKS. Terlihat bagus sejauh ini, saya pikir saya tetap melacaknya selama beberapa hari ke depan, itu adalah situs kehidupan nyata termasuk. banyak penggunaan plugin dan sejenisnya. Untuk INDEX saya mungkin sedikit mencari inti dan manual mysql.
hakre
1
Ingatlah bahwa plug-in pihak ke-3 dapat menghubungi hampir semua pernyataan SQL yang mereka inginkan ... jadi pastikan Anda memeriksanya dengan benar sebelum menginstal hal-hal yang tergantung pada hak istimewa yang telah Anda batalkan.
EAMann
12

Inilah yang dikatakan Codex tentang membatasi hak pengguna basis data:

Untuk operasi WordPress normal, seperti memposting posting blog, mengunggah file media, memposting komentar, membuat pengguna WordPress baru dan menginstal plugin WordPress, pengguna basis data MySQL hanya perlu pembacaan data dan hak menulis data ke basis data MySQL; SELECT, INSERT, UPDATE, dan DELETE.

Oleh karena itu setiap struktur basis data dan hak istimewa administrasi lainnya, seperti DROP, ALTER dan GRANT dapat dicabut. Dengan mencabut hak istimewa tersebut, Anda juga meningkatkan kebijakan penahanan.

Catatan: Beberapa plugin, tema, dan pembaruan WordPress utama mungkin diperlukan untuk membuat perubahan struktural basis data, seperti menambahkan tabel baru atau mengubah skema. Dalam kasus seperti itu, sebelum menginstal plugin atau memperbarui perangkat lunak untuk sementara waktu, berikan hak akses kepada pengguna database.

http://codex.wordpress.org/Hardening_WordPress

redburn
sumber
2
Saya mencoba untuk mempraktikkan prinsip Least Privilege bila memungkinkan. Informasi yang dikutip (bermanfaat) tidak lagi ada dalam artikel Codex yang tertaut jadi terima kasih telah menyalinnya di sini.
Anthony G - keadilan untuk Monica
2

Mengenai "Catatan" di posting redburn, Wordpress Codex juga memiliki Peringatan Anda juga harus membaca tentang pembaruan dan perubahan skema database ...

(Sunting: Namun saya perhatikan bahwa saya TIDAK MELIHAT "GRANT" dalam daftar hak istimewa lagi ketika membuat atau memperbarui pengguna. Mungkin "CREATE" harus ditambahkan ke daftar? Apakah ada yang punya informasi mengenai ini? - menggunakan Hostgator cPanel , Maret 2016 -)

PERINGATAN:
Mencoba pembaruan tanpa memiliki hak istimewa ini [ PILIH, INSERT, PEMBARUAN, HAPUS, DROP, ALTER, dan GRANT] dapat menyebabkan masalah ketika perubahan skema database terjadi. Jadi, TIDAK dianjurkan untuk mencabut hak istimewa ini. Jika Anda merasa perlu melakukan ini untuk alasan keamanan, maka pastikan bahwa Anda memiliki rencana cadangan yang solid terlebih dahulu, dengan cadangan seluruh basis data reguler yang telah Anda uji valid dan yang dapat dengan mudah dipulihkan. Pemutakhiran basis data yang gagal biasanya dapat diselesaikan dengan mengembalikan basis data kembali ke versi lama, memberikan izin yang tepat, dan kemudian membiarkan WordPress mencoba pembaruan basis data lagi. Mengembalikan database akan mengembalikannya ke versi lama dan layar administrasi WordPress kemudian akan mendeteksi versi lama dan memungkinkan Anda untuk menjalankan perintah SQL yang diperlukan di dalamnya. Sebagian besar peningkatan WordPress tidak mengubah skema, tetapi beberapa melakukan perubahan. Hanya peningkatan poin utama (3,7 menjadi 3,8, misalnya) akan mengubah skema. Upgrade kecil (3.8 ke 3.8.1) umumnya tidak. Meskipun demikian, simpan cadangan secara teratur.

Codex: http://codex.wordpress.org/Hardening_WordPress

Jerry9
sumber
0

Pendapat saya sama dengan @EAMann di atas, serta sumber-sumber yang dia referensikan: GRANT ALL diperlukan untuk memastikan situs Anda berfungsi dan bukti di masa mendatang. Bahkan di lokasi produksi, Anda harus tetap menggunakan panduan pengguna.

Sebagai seseorang yang menyumbangkan kode ke inti WordPress dan beberapa plug-in, saya sarankan Anda mempertahankan hak DB default seperti yang disarankan dalam manual pengguna (GRANT ALL PRIVILEGES ON wpdatabasename. * TO "wordpressusername" @ "hostname").

Kode sumber WordPress (sekarang dan di masa depan) mengasumsikan bahwa pengguna DB WordPress memiliki semua hak istimewa DB untuk database WordPress yang diberikan. Jika pengaturan Anda kehilangan hak istimewa DB, Anda dapat mengalami masalah saat Anda meningkatkan WordPress dan menambahkan lebih banyak plug-in.

Jadi Anda benar-benar tidak boleh menggunakan hak istimewa DB berbeda dari hak istimewa DB default yang direkomendasikan oleh manual, kecuali jika Anda tahu apa yang Anda lakukan, memiliki kebutuhan yang sangat spesifik, dan tidak akan lupa Anda memiliki hak istimewa DB kustom.

Sejak itu halaman Codex telah diperbarui tentang cara melakukan ini dengan contoh-contoh pada berbagai sistem dan tangkapan layar. https://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User

Membuat nama dan pengguna Databse (via PHPMyAdmin): https://codex.wordpress.org/Installing_WordPress#Using_phpMyAdmin

Membuat nama dan pengguna Databse (melalui klien baris perintah MySQL): https://codex.wordpress.org/Installing_WordPress#Using_the_MySQL_Client

mysql> CREATE DATABASE wpdatabasename;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON wpdatabasename.* TO "wordpressusername"@"hostname"
    -> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> EXIT
Steven Lin
sumber