GNU/Linux >> Belajar Linux >  >> Linux

Memahami Hak Istimewa MySQL

Fungsi utama dari sistem otorisasi MySQL adalah untuk mengasosiasikan pengguna yang diautentikasi dengan hak istimewa pada database, seperti SELECT, INSERT, UPDATE, dan DELETE. Fungsionalitas sistem otorisasi mencakup kemampuan untuk memiliki pengguna anonim dan untuk mengaktifkan fungsi tertentu seperti LOAD DATA INFILE dan berbagai operasi administratif. Otorisasi ini memastikan bahwa pengguna hanya dapat melakukan operasi di mana mereka telah diberikan hak istimewa yang sesuai.

Menentukan Hak Pengguna yang Tepat

Anda dapat memberikan beberapa jenis hak istimewa ke akun MySQL pada tingkat yang berbeda:secara global, atau untuk database, tabel, atau kolom tertentu. Misalnya, Anda dapat memberi pengguna kemampuan untuk memilih dari tabel mana pun di database apa pun dengan memberikan hak istimewa SELECT kepada pengguna di tingkat global.

Anda dapat memberi akun kontrol penuh atas database tertentu tanpa memiliki izin apa pun pada database lain. Akun tersebut kemudian dapat membuat database, membuat tabel dan objek database lainnya, memilih dari tabel, dan menambahkan, menghapus, atau memperbarui catatan baru.

Memberikan Keistimewaan Administratif

Hak istimewa global berikut berlaku untuk pengguna administratif:

  • FILE :Memungkinkan pengguna untuk menginstruksikan server MySQL untuk membaca dan menulis file di sistem file host server.
  • PROSES :Memungkinkan pengguna menggunakan pernyataan SHOW PROCESSLIST untuk melihat semua pernyataan yang dijalankan klien.
  • SUPER :Memungkinkan pengguna untuk mematikan koneksi klien lain atau mengubah konfigurasi runtime server.
  • SEMUA :Memberikan semua hak istimewa kecuali kemampuan untuk memberikan hak istimewa kepada pengguna lain.

SUPER hak istimewa administratif memberi pengguna kemampuan untuk melakukan tugas tambahan, termasuk mengatur variabel global dan mengakhiri koneksi klien. Ada juga beberapa penentu hak istimewa:

– Gunakan SEMUA dan SEMUA HAK ISTIMEWA untuk memberikan semua hak istimewa kecuali kemampuan untuk memberikan hak istimewa ke akun lain. Gunakan HIBAH SEMUA … DENGAN PILIHAN HIBAH untuk memberikan semua hak istimewa termasuk kemampuan untuk memberikan hak istimewa ke akun lain.
– Gunakan USAGE untuk memberikan kemampuan untuk terhubung ke server. Hak istimewa ini membuat catatan di tabel pengguna untuk akun tersebut, tetapi tanpa hak istimewa apa pun. Akun tersebut kemudian dapat digunakan untuk mengakses server untuk tujuan terbatas, seperti mengeluarkan pernyataan SHOW VARIABLES atau SHOW STATUS. Akun tidak dapat digunakan untuk mengakses konten database seperti tabel, meskipun hak istimewa tersebut dapat diberikan di lain waktu.

Hak istimewa administratif lainnya termasuk BUAT PENGGUNA , BUAT TABEL SEMENTARA , TAMPILKAN BASIS DATA , KUNCI TABEL , MUAT ULANG , dan MATI . Hak istimewa administratif, termasuk yang ada di slide, dapat digunakan untuk mengkompromikan keamanan, mengakses data yang diistimewakan, atau melakukan serangan penolakan layanan di server. Berikan hak istimewa administratif dengan hemat, karena dapat disalahgunakan oleh pengguna yang jahat atau ceroboh.

Pernyataan HIBAH

Pernyataan GRANT membuat akun baru atau memodifikasi akun yang ada.

Sintaks GRANT:

 GRANT SELECT ON world_innodb.* TO 'kari'@'localhost' IDENTIFIED BY 'Abc123';

Dalam sintaks/contoh di atas, pernyataan memberikan hak istimewa SELECT untuk semua tabel di database world_innodb kepada pengguna bernama kari, yang harus terhubung dari host lokal dan menggunakan kata sandi Abc123.

Klausul pernyataan:
1. Hak istimewa yang akan diberikan
2. Tingkat hak istimewa:

  • Global:*.*
  • Basis data:[db_name].*
  • Tabel:[db_name].[table_name]
  • Rutin tersimpan:[db_name].[routine_name]

3. Akun yang Anda beri hak istimewa.
4. Kata sandi opsional.

Klausa pernyataan GRANT memiliki efek sebagai berikut:

  • HIBAH kata kunci:Menentukan satu atau lebih nama hak istimewa yang menunjukkan hak istimewa yang Anda berikan. Nama hak istimewa tidak peka huruf besar-kecil. Untuk membuat daftar beberapa hak istimewa, pisahkan dengan koma.
  • AKTIF klausa:Menentukan tingkat hak istimewa yang Anda berikan.
  • KEPADA klausa:Menentukan akun yang Anda berikan hak istimewa. Jika akun belum ada, pernyataan akan membuatnya.
  • DIIDENTIFIKASI OLEH klausa:(Opsional) Menetapkan kata sandi yang ditentukan ke akun. Jika akun sudah ada, kata sandi menggantikan yang lama.

Menghilangkan klausa IDENTIFIED BY memiliki efek sebagai berikut:

  • Jika akun dalam klausa TO ada, sandinya tetap tidak berubah.
  • Jika akun dalam klausa TO tidak ada, akun tersebut dibuat dengan kata sandi kosong.

Sebagai tindakan keamanan, aktifkan NO_AUTO_CREATE_USER Mode SQL untuk mencegah pernyataan GRANT membuat akun baru saat Anda tidak menentukan klausa IDENTIFIED BY.

Tampilkan Hak Istimewa HIBAH

SHOW GRANTS menampilkan pernyataan yang membuat ulang hak istimewa untuk pengguna tertentu. Ini menunjukkan hak istimewa hanya untuk akun persis yang ditentukan dalam pernyataan. Contoh di bawah, menunjukkan hak istimewa hanya untuk [email protected], bukan untuk kari@%.

 SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER();

Anda juga dapat menentukan nama akun untuk menunjukkan hibah untuk:

 mysql>SHOW GRANTS FOR
'kari'@'myhost.example.com'; 
+----------------------------------------------------------------+ 
| Grants for [email protected]                             | 
+----------------------------------------------------------------+ 
| GRANT FILE ON *.* TO 'kari'@'myhost.example.com'               | 
| GRANT SELECT ON `world_innodb`.* TO 'kari'@'myhost.example.com‘| 
| IDENTIFIED BY PASSWORD                                         | 
| '*E74858DB86EBA20BC33D0AECAE8A8108C56B17FA'                    | 
+----------------------------------------------------------------+

Output yang ditampilkan di atas terdiri dari dua pernyataan GRANT. Klausa ON mereka menampilkan hak istimewa di tingkat global dan database, masing-masing. Jika akun memiliki kata sandi, SHOW GRANTS menampilkan klausa IDENTIFIED BY PASSWORD di akhir pernyataan GRANT; klausul ini mencantumkan hak istimewa global akun. Kata PASSWORD setelah IDENTIFIED BY menunjukkan bahwa nilai sandi yang ditampilkan adalah nilai terenkripsi yang disimpan dalam tabel pengguna, bukan sandi yang sebenarnya. Karena kata sandi disimpan menggunakan enkripsi satu arah, MySQL tidak memiliki cara untuk menampilkan kata sandi yang tidak terenkripsi.

Jika akun dapat memberikan sebagian atau semua hak istimewanya ke akun lain, output ditampilkan WITH GRANT OPTION di akhir setiap pernyataan GRANT yang berlaku.

Batasan Hak Istimewa Pengguna

Anda tidak dapat secara eksplisit menolak akses ke pengguna tertentu. Anda tidak dapat mengaitkan kata sandi dengan objek tertentu seperti database, tabel, atau rutin.

Hibah Tabel

Server MySQL membaca tabel hibah dari database mysql ke dalam memori saat startup, dan mendasarkan semua keputusan kontrol akses pada tabel tersebut. Tabel sesuai dengan tingkat hak istimewa:

Tingkat Hak/ Tabel Isi dan Hak Istimewa
pengguna Berisi catatan untuk setiap akun yang diketahui server
db Hak istimewa khusus basis data
tables_priv Hak istimewa khusus tabel
columns_priv Hak istimewa khusus kolom
procs_priv Prosedur tersimpan dan hak fungsi

Pengguna tabel berisi catatan untuk setiap akun yang diketahui server, serta hak istimewa globalnya. Ini juga menunjukkan informasi lain tentang akun, seperti:

  • Setiap batasan sumber daya yang harus dipatuhi
  • Apakah koneksi klien yang menggunakan akun harus dilakukan melalui koneksi aman menggunakan SSL

Setiap akun harus memiliki catatan tabel pengguna; server menentukan apakah akan menerima atau menolak setiap upaya koneksi dengan membaca isi tabel itu. Setiap akun juga memiliki catatan di tabel hibah lain jika memiliki hak istimewa di tingkat selain tingkat global.

Penggunaan Tabel Hibah

Server menentukan apakah klien dapat terhubung berdasarkan kolom Host, Pengguna, dan Kata Sandi dari tabel pengguna. Agar berhasil terhubung, MySQL harus mencocokkan catatan di tabel pengguna dengan host dari mana klien terhubung, nama pengguna yang diberikan oleh klien, dan kata sandi yang tercantum dalam catatan yang cocok.

Setelah klien terhubung, MySQL memeriksa hak akses untuk setiap pernyataan dengan mencocokkan identitas akun dengan kolom Host dan Pengguna dari tabel hak istimewa.

  • Hak istimewa di setiap baris tabel pengguna berlaku secara global untuk akun yang diidentifikasi oleh kolom Host dan Penggunanya.
  • Hak istimewa dalam catatan yang cocok dari tabel db, tables_priv, kolom_priv, dan procs_priv berlaku pada tingkat yang diidentifikasi oleh nama tabel hak istimewa tertentu.

Misalnya, hak istimewa dalam catatan tabel db berlaku untuk database yang disebutkan dalam catatan, tetapi tidak untuk database lain. Proses instalasi MySQL membuat tabel hibah.

  • Tabel Hibah menggunakan mesin penyimpanan MyISAM.
  • MyISAM dijamin akan tersedia.

Mempengaruhi Perubahan Hak Istimewa

Server membaca tabel hibah ke dalam memori selama urutan startup dan menggunakan salinan dalam memori untuk memeriksa akses klien. Server me-refresh salinan tabel hibah dalam memori dalam kondisi berikut:

  • Anda mengubah akun pengguna dengan mengeluarkan pernyataan pengelolaan akun seperti CREATE USER, GRANT, REVOKE, atau SET PASSWORD.
  • Anda memuat ulang tabel secara eksplisit dengan mengeluarkan pernyataan FLUSH PRIVILEGES atau dengan menjalankan perintah mysqladmin flush-privileges atau mysqladmin reload.

Hindari membuat perubahan langsung pada tabel hibah karena alasan berikut:

  • Sintaks pernyataan manajemen akun dirancang agar jelas dan lugas.
  • Jika Anda membuat kesalahan dalam pernyataan manajemen akun, pernyataan tersebut gagal dan tidak mengubah pengaturan apa pun.
  • Jika Anda membuat kesalahan saat mengubah tabel hibah secara langsung, Anda dapat mengunci semua pengguna dari sistem.

Kapan perubahan diterapkan

  • Perubahan pada hak istimewa global dan sandi hanya berlaku untuk koneksi berikutnya dari akun tersebut.
  • Perubahan pada hak istimewa tingkat basis data berlaku setelah pernyataan USE db_name klien berikutnya.
  • Perubahan pada tabel dan hak rutin langsung berlaku.

Mencabut Hak Istimewa Akun

Gunakan pernyataan REVOKE untuk mencabut hak istimewa pernyataan SQL tertentu:

REVOKE DELETE, INSERT, UPDATE ON world_innodb.* FROM 'Amon'@'localhost';

Gunakan pernyataan REVOKE untuk mencabut hak istimewa dari akun. Anda dapat memilih untuk mencabut hak istimewa karena berbagai alasan, seperti pengurangan akses yang diperlukan pengguna. Sintaks pernyataan REVOKE memiliki klausa berikut:

  • CANTUMKAN kata kunci:Menentukan daftar hak istimewa yang akan dicabut.
  • AKTIF klausa:Menunjukkan tingkat di mana hak istimewa harus dicabut.
  • DARI klausa:Menentukan nama akun.

Contoh yang ditunjukkan di atas, asumsikan bahwa Amon memiliki hak istimewa SELECT, DELETE, INSERT, dan UPDATE di database world_innodb, tetapi Anda ingin mengubah akun sehingga dia hanya memiliki akses SELECT. Contoh pertama mencabut hak istimewa yang memungkinkannya melakukan perubahan.

Untuk mencabut hak istimewa untuk memberikan hak istimewa kepada pengguna lain:

REVOKE GRANT OPTION ON world_innodb.* FROM 'Jan'@'localhost';

Contoh di atas mencabut kemampuan Jan untuk memberikan hak istimewa apa pun kepada pengguna lain yang dia miliki untuk database world_innodb, dengan mencabut hak istimewa GRANT OPTION dari akunnya.

Untuk mencabut semua hak istimewa, termasuk memberikan hak istimewa kepada orang lain:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'Sasha'@'localhost';

Contoh di atas mencabut semua hak istimewa yang dimiliki oleh akun Sasha (pada level mana pun), dengan mencabut SEMUA HAK ISTIMEWA dan GRANT OPTION dari akunnya.

Catatan :Gunakan pernyataan SHOW GRANTS sebelum mengeluarkan REVOKE untuk menentukan hak istimewa mana yang harus dicabut, dan sekali lagi sesudahnya untuk mengonfirmasi hasilnya.Panduan Pemula untuk Manajemen Pengguna MySQL
Memahami Otentikasi Pluggable MySQL


Linux
  1. Instal MariaDB atau MySQL di Linux

  2. Cara Menambahkan Pengguna MySQL Baru dan Memberikan Hak Akses

  3. Memperbaiki database MySQL InnoDB

  1. Pencadangan MySQL 1.1

  2. Memahami Hak Istimewa MySQL

  3. Memahami Otentikasi Pluggable MySQL

  1. Memahami YAML untuk Ansible

  2. Memahami Jika?

  3. Memahami Desktop Linux?