Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana mengelola hak istimewa dengan peran di MySQL


Pengantar

Kontrol akses dan manajemen pengguna adalah dua area yang dapat dengan cepat menjadi kompleks karena jumlah pengguna dan entitas database yang berbeda dalam sistem Anda meningkat. Mengelola banyak hak istimewa yang berbeda pada berbagai objek database, memastikan pengguna yang memiliki tanggung jawab yang sama memiliki tingkat akses yang sama, dan mengaudit serta mempersempit akses menjadi semakin sulit seiring waktu.

Untuk membantu mengatasi ini, MySQL memiliki konsep yang disebut "peran" yang memungkinkan Anda untuk mengelompokkan kumpulan hak istimewa di bawah nama tertentu, memungkinkan Anda untuk menetapkan dan mengubah pengaturan secara massal. Dalam panduan ini, kita akan membahas cara kerja peran dalam MySQL dan cara menggunakannya untuk mempermudah pengelolaan akses data bagi pengguna Anda.


Perintah

Berikut adalah perintah SQL utama yang akan kita diskusikan terkait dengan pengelolaan peran MySQL.

  • CREATE ROLE :CREATE ROLE perintah mendefinisikan peran baru dalam sistem database.
  • DROP ROLE :DROP ROLE perintah melakukan sebaliknya, menghapus peran yang ada.
  • GRANT :GRANT perintah memiliki dua tujuan berbeda yang terkait dengan peran:menambahkan hak istimewa ke peran dan menambahkan akun pengguna sebagai anggota peran.
  • REVOKE :Dalam konteks peran, REVOKE perintah menghapus hak istimewa dari peran dan juga menghapus keanggotaan peran dari akun pengguna.
  • SHOW GRANTS :SHOW GRANTS perintah menunjukkan hak istimewa dari akun atau peran pengguna yang diberikan.
  • SET ROLE :SET ROLE perintah mengubah peran yang digunakan akun pengguna secara aktif. Ini memungkinkan Anda untuk menentukan kumpulan izin mana yang berlaku untuk akun untuk sesi tersebut.
  • SET DEFAULT ROLE :SET DEFAULT ROLE perintah mendefinisikan peran yang diterapkan secara otomatis ketika klien masuk sebagai akun pengguna tertentu.


Hak istimewa yang diperlukan

Untuk mengikuti panduan ini, Anda memerlukan hak istimewa berikut:

  • CREATE ROLE
  • GRANT OPTION
  • CREATE USER (untuk menyetel peran default untuk pengguna lain)
  • ROLE_ADMIN (untuk menyetel variabel sistem yang mengubah perilaku peran)
  • SYSTEM_VARIABLES_ADMIN (untuk menyetel variabel sistem yang mengubah perilaku peran)

CREATE ROLE hak istimewa adalah versi yang lebih rendah dari CREATE USER hak istimewa, memungkinkan Anda membuat dan mengelola peran. Akun yang sudah memiliki CREATE USER hak istimewa secara otomatis memiliki semua fungsi yang diperlukan untuk mengelola peran.

GRANT OPTION hak istimewa diperlukan untuk menetapkan hak istimewa ke suatu peran. Anda harus memiliki GRANT OPTION diaktifkan untuk hak istimewa apa pun yang ingin Anda tetapkan ke peran.




Apa itu role?

Di MySQL, peran adalah entitas yang berfungsi sebagai wadah atau kumpulan hak istimewa. Administrator dapat menetapkan hak istimewa untuk peran dengan cara yang sama seperti mereka memberikan hak istimewa ke akun pengguna. Anda kemudian dapat menambahkan akun pengguna sebagai anggota peran, yang memungkinkan akun tersebut mengakses hak istimewa yang terkait dengan peran tersebut.

Pada dasarnya, peran berfungsi sebagai cara untuk menggabungkan berbagai hak istimewa terkait untuk mempermudah pengelolaan hak istimewa. Alih-alih memastikan bahwa setiap pengguna memiliki tingkat akses yang tepat yang mereka butuhkan dengan menetapkan hak istimewa individu, menggunakan pengelompokan hak istimewa yang diberi nama memungkinkan Anda mengelola lebih sedikit, lebih mudah untuk memahami tugas.

Ini memiliki keuntungan yang jelas saat menetapkan tingkat akses, karena lebih mudah untuk menetapkan developer , sysadmin , atau financeteam peran kepada pengguna daripada mengelola lusinan hak istimewa secara individual. Itu juga membuatnya cepat untuk mengubah akses ke beberapa akun sekaligus. Jika Anda membuat database baru untuk tim penjualan, Anda dapat memberikan salesteam akses peran ke sana alih-alih melacak setiap akun yang seharusnya memiliki akses.



Membuat peran

Jika Anda memiliki akun dengan CREATE ROLE hak istimewa, Anda dapat mengelola peran menggunakan CREATE ROLE perintah.


Apa sintaks MySQL untuk peran?

Nama peran harus mengikuti format khusus untuk MySQL agar dianggap valid. Dalam banyak hal, mereka mencerminkan format yang digunakan untuk mendefinisikan akun pengguna MySQL, tetapi dengan beberapa perbedaan penting.

Peran mengikuti format berikut:

'<role>'@'<host>'

Seperti pengguna, peran memiliki dua komponen:nama peran dan host tempat klien terhubung. Namun, cara MySQL menginterpretasikan komponen ini berbeda.

Dengan peran, '<role>' bagian dari nama tidak boleh kosong. Tidak ada konsep peran menjadi "anonim" seperti halnya dengan pengguna. Di sisi lain, menghilangkan '<host>' porsi adalah masih diperbolehkan, dan MySQL akan menggunakan % sebagai tuan rumah. Namun, % dalam konteks ini ditafsirkan sebagai karakter literal, bukan karakter pengganti.

Secara efektif, ini berarti bahwa meskipun nama peran secara dangkal berbagi format nama akun pengguna, mereka tidak menjalani jenis evaluasi apa pun seperti yang dilakukan akun pengguna dan hanya label dengan dua komponen. Alasan mereka melakukannya memiliki dua bagian untuk namanya adalah Anda dapat membuat akun pengguna yang dapat berfungsi sebagai pengguna dan peran. Saat digunakan sebagai pengguna, komponen tersebut tunduk pada aturan evaluasi khusus yang dijelaskan dalam artikel manajemen pengguna dan saat digunakan sebagai peran, namanya dicocokkan secara langsung menggunakan nama komponen literal.

Karena aturan ini, dalam banyak kasus, administrator memilih untuk menentukan peran hanya menggunakan '<role>' komponen. Ini menyebabkan MySQL mengganti % liter literal karakter untuk '<host>' komponen, secara efektif membuat bagian nama itu tidak terlihat dan tidak penting. Jika Anda tidak ingin nama digunakan sebagai akun pengguna dan peran, Anda dapat melakukan hal yang sama.



Bagaimana cara membuat peran?

Untuk membuat peran baru, gunakan CREATE ROLE perintah.

Sintaks dasarnya terlihat seperti ini:

CREATE ROLE '<role>'@'<host>';

Anda juga dapat membuat beberapa peran sekaligus dengan memisahkan setiap nama peran dengan koma:

CREATE ROLE '<role_1>'@'<host>', '<role_2>'@'<host>', '<role_3>'@'<host>';

Jika salah satu peran yang Anda tentukan sudah ada di sistem, perintah akan gagal dengan kesalahan.

Untuk menghindari hal ini dan menyebabkan MySQL hanya mengeluarkan peringatan, Anda dapat menyertakan IF NOT EXISTS klausa setelah CREATE ROLE perintah sebelum nama peran:

CREATE ROLE IF NOT EXISTS '<role>'@'<host>';

Seperti disebutkan di atas, sering kali administrator menghilangkan '<host>' bagian dari nama peran untuk kesederhanaan, secara implisit menyetelnya ke % liter literal karakter. Jadi dalam praktiknya, banyak perintah pembuatan peran Anda mungkin terlihat seperti ini:

CREATE ROLE '<role>';



Bagaimana Anda memberikan hak istimewa untuk suatu peran?

Setelah membuat peran baru, prioritas Anda berikutnya biasanya membuatnya bermakna dengan memberi mereka hak istimewa.

Anda memberikan hak istimewa ke peran dengan cara yang sama seperti Anda memberikan hak istimewa ke akun pengguna. Anda memberikan hak istimewa yang tepat yang ingin Anda berikan, menentukan cakupan dengan menyediakan database dan objek database tempat hak istimewa tersebut valid, dan entitas yang harus diberikan hak istimewa — dalam hal ini, peran:

GRANT <privileges> ON <database>.<object> TO '<role>'@'<host>';

Misalnya, untuk memberikan SELECT hak istimewa untuk peran yang disebut readapp pada appdb database dan semua objek yang dikandungnya, Anda dapat mengetik:

GRANT SELECT ON appdb.* TO 'readapp';

Demikian pula, Anda dapat memberikan hak menulis ke database yang sama ke peran yang disebut writeapp dengan mengetik:

GRANT SELECT,INSERT,UPDATE,DELETE ON appdb.* TO 'writeapp';

Anda dapat memberikan hak istimewa kepada dan mencabutnya dari peran persis seperti yang Anda lakukan secara langsung dengan akun pengguna. Jadi Anda selalu dapat mengubah hak istimewa yang terkait dengan peran jika Anda perlu menyesuaikan tingkat akses yang ingin Anda berikan.



Bagaimana cara memberikan keanggotaan kepada pengguna untuk suatu peran?

Setelah Anda menambahkan hak istimewa ke peran, Anda dapat mulai menambahkan anggota ke peran untuk memberi mereka hak istimewa terkait.

Untuk melakukan ini, MySQL menggunakan bentuk yang berbeda dari GRANT yang sama kami gunakan untuk memberikan hak istimewa kepada pengguna dan peran. Namun, formulir baru ini menambahkan peran ke pengguna, memungkinkan akun pengguna mengakses semua hak istimewa yang diberikan pada peran tersebut.

Sintaks dasarnya terlihat seperti ini:

GRANT '<role>'@'<host>' TO '<user>'@'<host>';

Misalnya, jika 'reports'@'localhost' pengguna harus dapat membaca data dari appdb database untuk menghasilkan laporan, kita dapat menambahkan readapp peran ke akun pengguna, memberinya hak pilih:

GRANT 'readapp' TO 'reports'@'localhost';

Demikian pula, untuk memberikan 'appuser'@'localhost' kemampuan untuk mengelola data dalam database yang sama, kita dapat menjadikan pengguna tersebut sebagai anggota writeapp peran:

GRANT 'writeapp' TO 'appuser'@'localhost';

'appuser'@'localhost' akun sekarang akan memiliki kemampuan untuk menyisipkan, memperbarui, dan menghapus data dari database. Jika hak istimewa baru ditambahkan ke writeapp peran, 'appuser'@'localhost' akun akan segera mendapatkan hak istimewa tersebut.


Bagaimana cara memberikan peran tertentu secara otomatis kepada setiap pengguna?

Terkadang mungkin ada peran yang Anda inginkan agar dapat diakses oleh setiap pengguna di sistem Anda. Anda dapat menentukan peran mana yang diberikan setiap akun secara otomatis dengan menyetel mandatory_roles variabel.

Untuk mengubah mandatory_roles variabel, pengguna Anda harus memiliki ROLE_ADMIN dan SYSTEM_VARIABLES_ADMIN hak istimewa. Anda dapat mengatur peran yang ingin Anda berikan kepada setiap pengguna dengan mengetik:

SET PERSIST mandatory_roles = '`<role_1>`@`<host>`, `<role_2>`@`<host>`, `<role_3>`@`<host>`';

Di sini, kami memberi setiap pengguna pada sistem tiga peran secara otomatis. Saat mengatur variabel sistem, nilai mandatory_roles harus berupa string, jadi kami merangkum seluruh daftar peran dalam tanda kutip tunggal dan menggunakan tanda kutip balik untuk mengutip masing-masing komponen peran.

Anda tidak dapat menambahkan peran ke mandatory_roles daftar yang memiliki SYSTEM_USER hak istimewa. Ini adalah tindakan keamanan untuk memastikan bahwa tidak semua sesi di sistem adalah sesi sistem secara otomatis.




Bagaimana Anda menggunakan hak istimewa dari peran?

Setelah Anda memberikan keanggotaan akun pengguna ke peran, bagaimana Anda menggunakannya? Untuk mengakses hak istimewa yang diberikan ke akun oleh peran, itu harus diaktifkan.


Melihat peran aktif saat ini

Sebelum mengaktifkan peran baru, Anda dapat memeriksa peran mana yang saat ini aktif untuk sesi pengguna Anda.

Untuk melihat peran aktif sesi Anda, ketik:

SELECT CURRENT_ROLE()

Output akan menampilkan nol atau lebih peran yang aktif di sesi Anda saat ini. Hak istimewa yang terkait dengan peran tersebut akan menambah tindakan yang diizinkan untuk Anda lakukan.



Cara mengaktifkan peran untuk sesi

Untuk mengubah peran mana yang aktif selama sesi Anda, gunakan SET ROLE memerintah. Anda dapat menggunakan perintah ini dalam beberapa cara berbeda.

Sintaks dasarnya terlihat seperti ini:

SET ROLE '<rolename>'@'<host>';

Ini akan mengaktifkan peran yang dimaksud. Penting untuk dicatat bahwa peran aktif yang sebelumnya tidak disebutkan dalam SET ROLE perintah sekarang akan dinonaktifkan.

Untuk mengaktifkan lebih dari satu peran sekaligus, pisahkan setiap peran dengan koma:

SET ROLE '<role_1>'@'<host>', '<role_2>'@'<host>', '<role_3>'@'<host>';

Untuk mengaktifkan semua peran yang telah diberikan ke akun Anda, Anda dapat menentukan ALL alih-alih peran tertentu:

SET ROLE ALL;

Anda juga dapat memberi tahu MySQL untuk mengaktifkan semua peran Anda dengan pengecualian khusus dengan menggunakan ALL EXCEPT :

SET ROLL ALL EXCEPT '<role_1>'@'<host>';

Opsi lainnya adalah menonaktifkan semua peran di akun Anda dengan menentukan NONE :

SET ROLE NONE

Ini akan menonaktifkan semua peran pengguna Anda untuk sesi tersebut, memberi Anda hanya hak istimewa yang diberikan secara khusus ke akun pengguna Anda.

Untuk kembali ke daftar default peran yang ditentukan untuk akun Anda, gunakan DEFAULT kata kunci:

SET ROLE DEFAULT


Cara menentukan peran default untuk akun pengguna

Peran yang diaktifkan secara otomatis saat Anda masuk sebagai pengguna dan peran yang diaktifkan kembali saat Anda menggunakan SET ROLE DEFAULT dapat dikonfigurasi.

Untuk menentukan peran yang akan diaktifkan secara default, gunakan SET DEFAULT ROLE perintah yang mirip dengan cara Anda menggunakan SET ROLE perintah:

SET DEFAULT ROLE '<role_1>'@'<host>';

Ini akan mengatur peran default yang akan diaktifkan untuk akun Anda sendiri saat login atau saat menggunakan SET ROLE DEFAULT .

Jika pengguna Anda memiliki CREATE USER hak istimewa, Anda dapat mengatur peran default untuk akun lain:

SET DEFAULT ROLE ALL TO '<user>'@'<host>';

Di sini, kami menetapkan bahwa '<user>'@'<host>' akun harus secara otomatis mengaktifkan semua perannya setelah otentikasi.

Sintaks ini juga dapat digunakan untuk menentukan peran default untuk lebih dari satu akun dengan memisahkan setiap pengguna dengan koma:

SET DEFAULT ROLE ALL TO '<user_1>'@'<host>', '<user_2>'@'<host>';


Mengaktifkan semua peran untuk semua pengguna secara default

Jika Anda ingin setiap akun di server MySQL Anda mengaktifkan semua perannya secara default, Anda dapat mengubah pengaturan sistem untuk melakukannya.

Saat activate_all_roles_on_login variabel disetel ke true, MySQL akan secara otomatis mengaktifkan semua peran yang terkait dengan akun saat masuk. Ini menggantikan pengaturan yang ditentukan oleh SET DEFAULT ROLE .

Untuk mengaktifkan fitur ini, Anda harus memiliki SYSTEM_VARIABLES_ADMIN dan ROLE_ADMIN hak istimewa. Aktifkan fitur dengan mengetik:

SET PERSIST activate_all_roles_on_login = ON;

Ini akan menyebabkan akun pengguna secara otomatis mengaktifkan semua peran saat login. Namun, SET ROLE DEFAULT akan tetap mengizinkan Anda untuk mengaktifkan hanya peran default yang terkait dengan akun.




Tampilkan hak istimewa yang ada yang diperoleh dari peran

Untuk memahami hak istimewa apa yang tersedia di akun Anda, Anda dapat menggunakan SHOW GRANTS perintah.

Untuk memeriksa hibah yang diaktifkan untuk pengguna, ketik:

SHOW GRANTS FOR '<user>'@'<host>';

Outputnya akan menunjukkan kepada Anda semua hak istimewa yang secara langsung ditetapkan ke akun pengguna serta semua peran yang menjadi anggota pengguna.

Setelah mempelajari peran apa yang menjadi anggota akun, Anda dapat memeriksa hak istimewa apa yang diberikan peran tersebut kepada pengguna dengan mengetik:

SHOW GRANTS FOR '<user>'@'<host>' USING '<role>'@'<host>';

Misalnya, untuk memeriksa hak istimewa 'reports'@'localhost' pengguna, termasuk yang diberikan oleh keanggotaannya di readapp peran, Anda dapat menggunakan:

SHOW GRANTS FOR 'reports'@'localhost' USING 'readapp';

Ini akan menunjukkan kepada Anda semua hak istimewa yang secara eksplisit diberikan ke 'reports'@'localhost' akun pengguna serta yang ditambahkan oleh readapp peran.



Mencabut peran dari pengguna

Jadi apa yang terjadi ketika Anda ingin menghapus peran dari pengguna? Mirip dengan cara GRANT perintah dapat menambahkan hak istimewa baru ke pengguna atau peran atau menambahkan peran ke pengguna, REVOKE perintah dapat menghapus hak istimewa dari pengguna atau peran dan juga dapat menghapus keanggotaan peran dari pengguna.

Sintaks dasar yang digunakan untuk menghapus peran dari akun pengguna terlihat seperti ini:

REVOKE '<role>' FROM '<user>'@'<host>';

Setelah menjalankan pernyataan seperti ini, pengguna tidak akan lagi memiliki akses ke hak istimewa yang diberikan melalui peran.

Sebagai contoh, kita dapat mencabut writeapp peran dari 'appuser'@'localhost' akun pengguna dengan mengetik:

REVOKE 'writeapp' FROM 'appuser'@'localhost';

Namun, jika pengguna telah diberikan hak istimewa melalui cara lain (baik diberikan secara langsung atau diberikan melalui keanggotaan dengan peran yang berbeda) mereka akan tetap memiliki akses hak istimewa tersebut. Jadi jika 'appuser'@'localhost' pengguna juga merupakan anggota readapp peran yang kami berikan sebelumnya, mereka masih memiliki SELECT hak istimewa pada appdb basis data.



Kesimpulan

Menggunakan peran untuk mendistribusikan hak istimewa dalam database MySQL Anda dapat membantu menyederhanakan manajemen overhead dan kompleksitas sistem kontrol akses Anda. Jauh lebih mudah untuk memastikan bahwa pengguna dengan tanggung jawab yang sama memiliki hak istimewa yang sama menggunakan peran daripada memberikan banyak hak istimewa yang berbeda secara langsung.

Demikian pula, peran memungkinkan Anda untuk secara eksplisit tentang maksud di balik pemberian hak istimewa Anda. Daripada memberikan sejumlah besar hak istimewa ke akun tanpa komentar apa pun, nama peran yang dipilih dengan cermat dapat membantu membedakan antara berbagai alasan akses. Dengan meluangkan waktu untuk membuat dan mengatur peran sebelumnya, kemampuan Anda untuk mengelola akses pengguna ke berbagai bagian data Anda akan lebih mudah dalam jangka panjang.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Fungsi LTRIM() Bekerja di MySQL

  2. MySQL mengonversi string tanggal ke cap waktu Unix

  3. Pilih baris terakhir di MySQL

  4. Bagaimana saya bisa menyimpan dan mengambil gambar dari database MySQL menggunakan PHP?

  5. Bagaimana saya bisa memeriksa jenis mesin MySQL untuk tabel tertentu?