GNU/Linux >> Belajar Linux >  >> Linux

Panduan Pemula untuk Manajemen Pengguna MySQL

Mengelola pengguna di MySQL memberi Anda kemampuan untuk mengontrol apa yang bisa dan tidak bisa dilakukan pengguna.

  • Buat akun pengguna dengan hak istimewa berbeda yang sesuai dengan fungsinya.
  • Hindari penggunaan akun root – Batasi aplikasi yang disusupi dan lindungi dari kesalahan selama pemeliharaan rutin.
  • Pastikan integritas data dengan penetapan hak istimewa pengguna individual yang tepat. Izinkan pengguna yang berwenang untuk melakukan pekerjaan mereka. Cegah pengguna yang tidak sah mengakses data di luar hak istimewa mereka.

Verifikasi Akun Pengguna

Saat Anda terhubung ke server MySQL dan menjalankan kueri, itu mengotentikasi Anda dan mengotorisasi aktivitas Anda.

  • Otentikasi :Memverifikasi identitas pengguna. Ini adalah tahap pertama dari kontrol akses. Anda harus berhasil mengotentikasi setiap kali Anda terhubung. Jika Anda gagal mengautentikasi, koneksi Anda gagal dan klien Anda terputus.
  • Otorisasi :Memverifikasi hak istimewa pengguna. Tahap kedua dari kontrol akses ini terjadi untuk setiap permintaan pada koneksi aktif yang otentikasinya telah berhasil. Untuk setiap permintaan, MySQL menentukan operasi apa yang ingin Anda lakukan, dan kemudian memeriksa apakah Anda memiliki hak yang cukup untuk melakukannya.

Lihat Pengaturan Akun Pengguna

– Query database mysql untuk melihat info identifikasi pengguna:

mysql> SELECT user, host, password
-> FROM mysql.user WHERE user='root'; 
+------+-----------+-------------------------------------------+ 
| user | host      | password                                  | 
+------+-----------+-------------------------------------------+ 
| root | localhost | *2447D497B9A6A15F2776055CB2D1E9F86758182F | 
| root | 127.0.0.1 | *2447D497B9A6A15F2776055CB2D1E9F86758182F | 
| root | ::1       | *2447D497B9A6A15F2776055CB2D1E9F86758182F |
+------+-----------+-------------------------------------------+ 
3 rows in set (0.00 sec)

Lihat semua info pengguna, termasuk hak istimewa:

mysql> SELECT * FROM mysql.user\G 
***************** 1. row ***************** 
...
   Select_priv: Y
   Insert_priv: Y
   Update_priv: Y
   Delete_priv: Y
...

Database mysql berisi informasi untuk semua akun pengguna di server. Untuk melihat informasi ini, jalankan pernyataan SELECT yang ditunjukkan di atas. Nilai Y dalam *_priv bidang menunjukkan bahwa hak istimewa diaktifkan. Akun root memiliki akses penuh. Semua kolom hak istimewanya memiliki nilai Y.

Selain hak istimewa, tabel pengguna berisi informasi lain yang berguna dalam proses otentikasi. Misalnya, Anda dapat melihat pada output berikut bahwa pengguna penguji:

  • Memiliki kata sandi (terlihat dalam bentuk terenkripsi di kolom Kata Sandi), dan kata sandi ini tidak kedaluwarsa (ditunjukkan dengan N di kolom kata sandi_kedaluwarsa)
  • Tidak memiliki batasan sumber daya yang ditentukan (ditunjukkan dengan 0 di kolom max_*)
  • Tidak memiliki setelan SSL atau x509 (ditunjukkan dengan nilai kosong di kolom ssl_* dan x509_*)
  • Menggunakan plugin mysql_native_password untuk mengautentikasi (Nama plugin tercantum di kolom plugin.)
*************************** 1. row ***************************
                  Host: localhost
                  User: testuser
              Password: *14E65567ABDB5135D0CFD9A70B3032C179A49EE7
           Select_priv: Y
           Insert_priv: N
...
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type:
            ssl_cipher:
           x509_issuer:
          x509_subject:
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string:
      password_expired: N

Otentikasi Asli

Saat Anda terhubung ke server MySQL menggunakan plugin otentikasi kata sandi asli (mekanisme otentikasi default), itu cocok dengan nama pengguna yang Anda tentukan, host dari mana Anda terhubung, dan kata sandi Anda terhadap baris di tabel mysql.user untuk menentukan apakah Anda dapat terhubung dan melakukan tindakan.

Untuk terhubung ke server lokal menggunakan klien mysql, tentukan nama pengguna dan kata sandi untuk akun yang ingin Anda gunakan:

shell> mysql -u[username] -p[password]
Catatan bahwa nama host yang terkait dengan pengguna Anda di tabel mysql.user mengacu pada nama host dari mana Anda terhubung, bukan ke host server.

Untuk terhubung ke server yang tidak diinstal pada host lokal klien Anda, berikan nama host server yang Anda sambungkan:

shell> mysql -u[username] -p[password] -h[server_host]

Membuat Akun Pengguna

Nama akun terdiri dari nama pengguna dan nama host klien dari mana pengguna harus terhubung ke server. Nama akun memiliki format 'nama_pengguna'@'nama_host '. Nama pengguna bisa sampai 16 karakter. Anda harus menggunakan tanda kutip tunggal di sekitar nama pengguna dan nama host jika ini berisi karakter khusus, seperti tanda hubung. Jika suatu nilai valid sebagai pengenal tanpa tanda kutip, tanda kutip adalah opsional. Namun, Anda selalu dapat menggunakan tanda kutip.

Misalnya, gunakan pernyataan CREATE USER…IDENTIFIED BY untuk membuat akun:
– Untuk pengguna bernama jim
– Untuk terhubung dari localhost
– Menggunakan kata sandi Abc123

CREATE USER 'jim'@'localhost' IDENTIFIED BY 'Abc123';

Hindari kemungkinan risiko keamanan saat membuat akun:

  • Jangan membuat akun tanpa kata sandi.
  • Jangan membuat akun anonim.
  • Jika memungkinkan, hindari karakter pengganti saat Anda menentukan nama host akun.

Pola Nama Host

Gunakan pola host yang berisi % atau _ karakter wildcard untuk membuat akun yang memungkinkan pengguna terhubung dari host mana pun di seluruh domain atau subnet. Jika Anda menghilangkan bagian host dari nama akun saat menulis pernyataan manajemen akun, MySQL akan menggunakan nama host %.

Nilai host %.example.com cocok dengan host mana pun di domain example.com. Nilai host 192.168.% cocok dengan host mana pun di subnet 192.168. Nilai host % cocok dengan host mana pun, memungkinkan pengguna untuk terhubung dari host mana pun. Gunakan alamat IP dengan subnet mask untuk memungkinkan pengguna terhubung dari host mana pun dengan alamat di dalam subnet itu. Misalnya, nilai 10.0.0.0/255.255.255.0 cocok dengan host mana pun dengan 10.0.0 dalam 24 bit pertama alamat IP-nya.

Hindari penggunaan wildcard dalam nama host kecuali jika benar-benar diperlukan dan diaudit dengan benar untuk menghindari penyalahgunaan atau paparan yang tidak disengaja. Jalankan pemeriksaan berkala sebagai berikut:

mysql> SELECT User, Host FROM mysql.user WHERE Host LIKE '%\%%';

Contoh nama pengguna dan nama host:

  • [email protected]
  • john@’10.20.30.%’
  • john@’%.domainkami.com’
  • john@’10.20.30.0/255.255.255.0′

Untuk menentukan akun pengguna anonim (yaitu, akun yang cocok dengan nama pengguna apa pun), tentukan string kosong untuk bagian nama pengguna dari nama akun:

mysql> CREATE USER ''@'localhost';

Hindari membuat akun anonim, terutama yang tidak memiliki kata sandi (seperti pada contoh di atas). Ini membantu menghindari risiko keamanan yang akan datang dari membuka akses ke instalasi MySQL. Jika sebuah host cocok dengan dua atau lebih pola, MySQL akan memilih pola yang paling spesifik.

Menyetel Kata Sandi Akun

Cara paling umum untuk mengubah sandi akun yang ada tanpa mengubah hak istimewanya adalah dengan menggunakan SET PASSWORD penyataan. Misalnya, untuk mengatur kata sandi jim di host lokal ke NewPass, gunakan pernyataan berikut:

mysql> SET PASSWORD FOR jim@localhost = PASSWORD('NewPass');

Jika Anda masuk sebagai pengguna non-root dan pengguna Anda tidak memiliki hak istimewa UPDATE untuk database mysql, Anda hanya dapat mengubah kata sandi Anda sendiri. Lakukan ini dengan menggunakan pernyataan SET PASSWORD tanpa klausa FOR:

mysql> SET PASSWORD = PASSWORD('NewPass');

Saat menggunakan SET PASSWORD, gunakan PASSWORD() berfungsi untuk mengenkripsi password. Perhatikan bahwa pernyataan CREATE USER secara otomatis mengenkripsi kata sandi yang Anda berikan, jadi Anda tidak perlu menggunakan fungsi PASSWORD() saat membuat pengguna dengan CREATE USER.

Gunakan perintah mysqladmin berikut untuk mengatur kata sandi dari shell:

shell> mysqladmin -u root password 'rootpass'
shell> mysqladmin -u root -h host_name password 'rootpass'

Dalam contoh sebelumnya, 'rootpass' mewakili kata sandi root dan 'host_name' adalah nama host dari mana akun root mengakses server MySQL.

Mengonfirmasi Kata Sandi

Tetapkan kata sandi yang kuat dan unik untuk semua akun pengguna. Hindari password yang mudah ditebak. Gunakan pernyataan SELECT berikut untuk membuat daftar akun apa pun
tanpa kata sandi:

SELECT Host, User FROM mysql.user WHERE Password = '';

Untuk mengidentifikasi kata sandi duplikat:

SELECT User FROM mysql.user GROUP BY password HAVING count(user)>1;

Untuk kedaluwarsa kata sandi pengguna, gunakan kueri di bawah ini:

ALTER USER jim@localhost PASSWORD EXPIRE;

Untuk mengeluarkan pernyataan SELECT dalam contoh di atas, Anda harus terhubung dengan akun pengguna dengan hak istimewa SELECT pada skema mysql atau tabel mysql.user. Anda dapat memiliki beberapa akun yang berlaku untuk nama pengguna tertentu. Misalnya, jika pengguna jim masuk dari dua lokasi dan Anda menyiapkan akun untuk setiap lokasi, seperti jim@localhost dan jim@’192.168.14.38′, kedua akun yang diidentifikasi sebagai jim mungkin memiliki sandi yang sama.

Anda dapat kedaluwarsa kata sandi pengguna dengan pernyataan ALTER USER…PASSWORD EXPIRE. Jika kata sandi Anda kedaluwarsa, Anda harus mengubah kata sandi Anda menggunakan pernyataan SET PASSWORD saat berikutnya Anda masuk. Semua pernyataan yang Anda jalankan yang tidak dimulai dengan SET mengembalikan kesalahan sampai Anda mengubah kata sandi Anda, seperti dalam contoh ini:

mysql> SELECT * FROM City WHERE 1=2;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
mysql> SET PASSWORD = PASSWORD('new_pwd'); 
Query OK, 0 rows affected (0.01 sec) 

mysql> SELECT * FROM City WHERE 1=2;
Empty set (0.00 sec)

Memanipulasi Akun Pengguna

Gunakan GANTI NAMA PENGGUNA pernyataan untuk mengganti nama akun pengguna:

RENAME USER 'jim'@'localhost' TO 'james'@'localhost';

Kueri di atas mengubah nama akun dari akun yang ada atau Mengubah nama pengguna atau nama host bagian dari nama akun, atau keduanya.

Gunakan pernyataan DROP USER untuk menghapus akun pengguna:

DROP USER 'jim'@'localhost';

Kueri di atas mencabut semua hak istimewa untuk akun yang ada dan kemudian menghapus akun tersebut. Itu juga menghapus semua catatan untuk akun dari tabel hibah mana pun yang ada.

Memahami Otentikasi Pluggable MySQL
Memahami Keistimewaan MySQL


Linux
  1. Manajemen Pengguna Linux Dasar

  2. Terhubung ke database MySQL dari jarak jauh

  3. Panduan Pemula untuk Manajemen Perangkat Lunak Linux dengan RPM

  1. Manajemen Dokumen Sumber Terbuka?

  2. CentOS / RHEL :Panduan pemula untuk cron

  3. Apa tujuan dari pengguna "mysql.sys@localhost"?

  1. Dasar-dasar pengguna dan basis data MySQL

  2. Panduan Pemula untuk Swap Space Management di Linux

  3. Panduan Pemula untuk SELinux