Di antara banyak tugas administrator dan arsitek basis data adalah tugas penting untuk memastikan hanya pengguna yang tepat yang dapat mengakses data yang disimpan dalam basis data. Memastikan akses data yang tepat (keamanan) datang dalam berbagai bentuk. Sebagai contoh Show
Kegagalan keamanan di salah satu titik ini dapat membahayakan integritas semua data di mesin database. Dalam bab ini, kami memeriksa cara mengamankan MySQL di semua tingkatan Keamanan basis data mencakup mengizinkan atau melarang tindakan pengguna pada basis data dan objek di dalamnya. Ketika Anda akan membuat aplikasi database, kebijakan keamanan adalah langkah pertama. Kebijakan keamanan aplikasi adalah daftar persyaratan dan aturan keamanan aplikasi yang mengatur akses pengguna ke objek database. Bab ini membahas aspek keamanan aplikasi dan fitur-fitur Database MySQL yang berisi topik berikut Isi Masalah keamanan umum MySQL Pedoman Keamanan
Menjaga Kata Sandi Aman
Membuat MySQL Aman Terhadap Penyerang Untuk membuat sistem MySQL aman, Anda harus mempertahankan saran berikut
Opsi dan Variabel mysqld Terkait Keamanan Tabel berikut menunjukkan opsi mysqld dan variabel sistem yang memengaruhi keamanan NameDescriptionCmd-LineOption fileSystem VarVar ScopeDynamic izinkan-mencurigakan-udfs Opsi ini mengontrol apakah fungsi yang ditentukan pengguna yang hanya memiliki simbol xxx untuk fungsi utama dapat dimuat. Secara default,YesYes automatic_sp_privilegesBila variabel ini memiliki nilai 1 (default), server secara otomatis memberikan hak istimewa EXECUTE dan ALTER ROUTINE kepada pembuat rutinitas yang disimpan, jika pengguna belum dapat menjalankan dan mengubah atau menghentikan rutinitas. (Hak istimewa MENGUBAH RUTIN diperlukan untuk menghentikan rutinitas. ) Server juga secara otomatis menghapus hak istimewa tersebut dari pembuatnya saat rutinitas dihapus. Jika automatic_sp_privileges adalah 0, server tidak secara otomatis menambah atau menghapus hak istimewa ini. YesGlobalYeschrootLetakkan server mysqld di lingkungan tertutup selama startup dengan menggunakan panggilan sistem chroot(). YaYa des-key-fileBaca kunci DES default dari file ini. Kunci ini digunakan oleh fungsi DES_ENCRYPT() dan DES_DECRYPT(). YaYa local_infileApakah LOCAL didukung untuk pernyataan LOAD DATA INFILE. Jika variabel ini dinonaktifkan, klien tidak dapat menggunakan LOKAL dalam pernyataan LOAD DATA. YesGlobalYesold_passwordsVariabel ini menentukan jenis hashing kata sandi yang dilakukan oleh fungsi dan pernyataan PASSWORD() seperti CREATE USER dan GRANT. YesBothYessafe-user-createJika opsi ini diaktifkan, pengguna tidak dapat membuat pengguna MySQL baru dengan menggunakan pernyataan GRANT kecuali jika pengguna memiliki hak istimewa INSERT untuk mysql. tabel pengguna atau kolom apa pun dalam tabel. IYesYes secure-authOpsi ini menyebabkan server memblokir koneksi oleh klien yang mencoba menggunakan akun yang memiliki sandi yang disimpan di versi lama (sebelum 4. 1) format. Gunakan itu untuk mencegah semua penggunaan kata sandi menggunakan format lama (dan karenanya komunikasi tidak aman melalui jaringan). YaYa GlobalYa- Variabel. secure_authJika variabel ini diaktifkan, server memblokir koneksi oleh klien yang mencoba menggunakan akun yang memiliki kata sandi yang disimpan di versi lama (pra-4. 1) format. YesGlobalYessecure-file-privSecara default, variabel ini kosong. Jika disetel ke nama direktori, ini membatasi efek fungsi LOAD_FILE() dan LOAD DATA dan SELECT. Pernyataan INTO OUTFILE hanya berfungsi dengan file di direktori itu. YaYa GlobalTidak- Variabel. secure_file_priv YesGlobalNoskip-grant-tablesOpsi ini menyebabkan server memulai tanpa menggunakan sistem hak istimewa sama sekali, yang memberi siapa saja yang memiliki akses ke server akses tak terbatas ke semua database. YaYa lewati-nama-resolveSemua interaksi dengan mysqld harus dilakukan menggunakan pipa bernama atau memori bersama (di Windows) atau file soket Unix (di Unix). Opsi ini sangat disarankan untuk sistem yang hanya mengizinkan klien lokal. YaYa GlobalTidak- Variabel. skip_name_resolve YesGlobalNoskip-networkingSemua interaksi dengan mysqld harus dilakukan menggunakan pipa bernama atau memori bersama (di Windows) atau file soket Unix (di Unix). Opsi ini sangat disarankan untuk sistem yang hanya mengizinkan klien lokal. YaYa GlobalTidak- Variabel. skip_networking YesGlobalNoskip-show-databaseOpsi ini menyetel variabel sistem skip_show_database yang mengontrol siapa yang diizinkan untuk menggunakan pernyataan SHOW DATABASES. YaYa GlobalTidak- Variabel. skip_show_database YesGlobalNo Cara Menjalankan MySQL sebagai Pengguna Biasa
Masalah Keamanan dengan LOAD DATA LOCAL Ada dua potensi masalah keamanan dengan mendukung pernyataan LOAD DATA versi LOKAL
Pedoman Keamanan Pemrograman Klien Aplikasi yang mengakses MySQL tidak boleh mempercayai data apa pun yang dimasukkan oleh pengguna, yang dapat mencoba mengelabui kode Anda dengan memasukkan urutan karakter khusus atau lolos dalam formulir Web, URL, atau aplikasi apa pun yang telah Anda buat. Pastikan aplikasi Anda tetap aman jika pengguna memasukkan sesuatu seperti "; DROP DATABASE mysql;". Ini adalah contoh ekstrem, tetapi kebocoran keamanan besar dan kehilangan data mungkin terjadi akibat peretas menggunakan teknik serupa jika Anda tidak mempersiapkannya. Lihat pedoman berikut
Sistem Hak Istimewa Akses MySQL Keistimewaan yang Disediakan oleh MySQL MySQL memberikan hak istimewa yang berlaku dalam konteks yang berbeda dan pada tingkat operasi yang berbeda
Hak Istimewa yang Diperbolehkan untuk GRANT dan REVOKE PrivilegeColumnContextCREATECreate_privdatabases, tables, or indexesDROPDrop_privdatabases, tables, or viewsGRANT OPTIONGrant_privdatabases, tables, or stored routinesLOCK TABLESLock_tables_privdatabasesREFERENCESReferences_privdatabases or tablesEVENTEvent_privdatabasesALTERAlter_privtablesDELETEDelete_privtablesINDEXIndex_privtablesINSERTInsert_privtables or columnsSELECTSelect_privtables or columnsUPDATEUpdate_privtables or columnsCREATE TEMPORARY TABLESCreate_tmp_table_privtablesTRIGGERTrigger_privtablesCREATE VIEWCreate_view_privviewsSHOW VIEWShow_view_privviewsALTER ROUTINEAlter_routine_privstored routinesCREATE ROUTINECreate_routine_privstored routinesEXECUTEExecute_privstored routinesFILEFile_privfile access on server hostCREATE TABLESPACECreate_tablespace_privserver administrationCREATE USERCreate_user_privserver administrationPROCESSProcess_privserver administrationPROXYsee proxies_priv tableserver administrationRELOADReload_privserver administrationREPLICATION CLIENTRepl_client_privserver administrationREPLICATION SLAVERepl_slave_privserver administrationSHOW DATABASESShow_db_privserver administrationSHUTDOWNShutdown_privserver administrationSUPERSuper_privserver administrationALL [PRIVILEGES] server administrationUSAGE server administration Tabel Hibah Sistem Privilege Biasanya, Anda memanipulasi konten tabel hibah di database mysql secara tidak langsung dengan menggunakan pernyataan seperti GRANT dan REVOKE untuk menyiapkan akun dan mengontrol hak istimewa yang tersedia untuk masing-masing akun. Tabel database mysql ini berisi informasi hibah
Menentukan Nama Akun Nama akun MySQL terdiri dari nama pengguna dan nama host. Ini memungkinkan pembuatan akun untuk pengguna dengan nama yang sama yang dapat terhubung dari host yang berbeda. Bagian ini menjelaskan cara menulis nama akun, termasuk nilai khusus dan aturan wildcard. Dalam pernyataan SQL seperti CREATE USER, GRANT, dan SET PASSWORD, tulis nama akun menggunakan aturan berikut
Kontrol Akses, Tahap 1. Verifikasi Koneksi Saat Anda mencoba terhubung ke server MySQL, server menerima atau menolak koneksi berdasarkan identitas Anda dan apakah Anda dapat memverifikasi identitas Anda dengan memberikan kata sandi yang benar. Jika tidak, server menolak akses Anda sepenuhnya. Jika tidak, server menerima koneksi, lalu memasuki Tahap 2 dan menunggu permintaan. Identitas Anda didasarkan pada dua informasi
Kontrol Akses, Tahap 2. Verifikasi Koneksi Setelah Anda membuat koneksi, server memasuki Tahap 2 kontrol akses. Untuk setiap permintaan yang Anda keluarkan melalui koneksi itu, server menentukan operasi apa yang ingin Anda lakukan, lalu memeriksa apakah Anda memiliki cukup hak untuk melakukannya. Di sinilah kolom hak istimewa dalam tabel hibah berperan. Hak istimewa ini dapat berasal dari tabel pengguna, db, tables_priv, kolom_priv, atau procs_priv mana pun Tabel pengguna memberikan hak istimewa yang diberikan kepada Anda secara global dan yang berlaku apa pun database defaultnya. Misalnya, jika tabel pengguna memberi Anda hak istimewa DELETE, Anda dapat menghapus baris dari tabel mana pun di database mana pun di host server. Adalah bijaksana untuk memberikan hak istimewa di tabel pengguna hanya kepada orang yang membutuhkannya, seperti administrator basis data Tabel db memberikan hak istimewa khusus basis data. Nilai dalam kolom cakupan tabel ini dapat mengambil bentuk berikut
Saat Perubahan Hak Istimewa Mulai Berlaku Ketika mysqld dimulai, ia membaca semua konten tabel hibah ke dalam memori. Tabel dalam memori menjadi efektif untuk kontrol akses pada saat itu. Jika Anda memodifikasi tabel hibah secara tidak langsung menggunakan pernyataan manajemen akun seperti GRANT, REVOKE, SET PASSWORD, atau RENAME USER, server akan memperhatikan perubahan ini dan segera memuat tabel hibah ke dalam memori Penyebab Kesalahan Access-Denied Jika Anda mengalami masalah saat mencoba menyambung ke server MySQL, item berikut ini menjelaskan beberapa tindakan yang dapat Anda lakukan untuk memperbaiki masalah tersebut
Manajemen Akun Pengguna MySQL Nama Pengguna dan Kata Sandi MySQL menyimpan akun di tabel pengguna dari database mysql. Akun didefinisikan dalam istilah nama pengguna dan host klien atau host tempat pengguna dapat terhubung ke server. Akun tersebut mungkin juga memiliki kata sandi Menambahkan dan menghapus akun pengguna Anda dapat membuat akun MySQL dengan dua cara
Untuk menghapus akun, gunakan pernyataan DROP USER, Menetapkan Batas Sumber Daya Akun Di MySQL5. 6, Anda dapat membatasi penggunaan sumber daya server berikut untuk masing-masing akun
Menetapkan Kata Sandi Akun Kredensial yang diperlukan untuk klien yang terhubung ke server MySQL dapat menyertakan kata sandi. Di MySQL5. 6, klien juga dapat mengotentikasi menggunakan plugin Untuk menetapkan kata sandi saat Anda membuat akun baru dengan CREATE USER, sertakan klausa IDENTIFIED BY mysql> CREATE USER 'user'@'localhost' -> IDENTIFIED BY 'mypass'; Untuk menetapkan atau mengubah kata sandi untuk akun yang ada, salah satu caranya adalah dengan mengeluarkan pernyataan SET PASSWORD Yang mana kontrol akses MySQL?Kontrol akses MySQL melibatkan dua tahap saat Anda menjalankan program klien yang terhubung ke server . Tahap 1. Server menerima atau menolak koneksi berdasarkan identitas Anda dan apakah Anda dapat memverifikasi identitas Anda dengan memberikan kata sandi yang benar.
Bagaimana cara mengontrol akses ke database MySQL?Untuk mengontrol pengguna mana yang dapat terhubung, setiap akun dapat diberi kredensial autentikasi seperti sandi . Antarmuka pengguna ke akun MySQL terdiri dari pernyataan SQL seperti CREATE USER , GRANT , dan REVOKE.
Bagaimana izin diberikan di MySQL?Untuk mengakomodasi pemberian hak kepada pengguna dari host arbitrer, MySQL mendukung penentuan nilai pengguna dalam bentuk ' user_name '@' host_name ' . Anda dapat menentukan wildcard di nama host. Misalnya, ' nama_pengguna '@'%. contoh. com' berlaku untuk nama_pengguna untuk semua host dalam contoh. com domain, dan 'user_name'@'198. 51.
Bagaimana cara membuat MySQL aman?Membuat MySQL Aman Terhadap Penyerang. Pastikan bahwa satu-satunya akun pengguna Unix dengan hak baca atau tulis di direktori database adalah akun yang digunakan untuk menjalankan mysqld. Jangan pernah menjalankan server MySQL sebagai pengguna root Unix. Jangan berikan hak istimewa FILE kepada pengguna nonadministratif |