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

Menggunakan Peran Baru di MySQL 8

Pada artikel ini, kita akan berbicara tentang fitur baru dalam sistem hak istimewa terkait MySQL 8, yaitu Roles. Jadi, mari kita bicara tentang peran, artikel ini sepenuhnya dikhususkan untuk peran.

Pengguna lain mungkin memiliki hak yang kompleks, contoh umum untuk ini adalah pengguna yang digunakan untuk melaporkan, pengguna ini tidak perlu menulis data apa pun, tetapi ada juga kemungkinan tidak perlu membaca semua data. Sangat mungkin bahwa ini hanya dapat digunakan untuk beberapa tabel atau kolom tertentu, atau hanya dapat memiliki akses yang dipilih ke sekumpulan tampilan yang juga akan menjadi tampilan tertentu.

Hak istimewa ini dapat bertambah dengan cepat dan berakhir dalam definisi pengguna yang sangat panjang, kami tidak akan menggunakan definisi, dan lebih banyak hibah memberi ruang untuk lebih banyak kesalahan. Di MySQL 8 set hak istimewa ini dapat didefinisikan sebagai Peran dan Peran dapat diberikan kepada pengguna alih-alih hak istimewa MySQL dasar. Peran adalah kumpulan hak istimewa yang kami berikan kepada pengguna.

Sama seperti pengguna baru yang dibuat dengan perintah buat pengguna yang kami gunakan untuk membuat peran seperti yang disebutkan di bawah ini;

CREATE ROLE 'reportrole';

Anda dapat membuat beberapa peran seperti kueri di bawah ini sekaligus.

CREATE ROLE 'app_ro', 'app_w', 'app_dev';

Peran baru yang dibuat dengan perintah buat peran tidak akan memiliki hak istimewa yang terkait dengannya, izin dapat diberikan ke peran ini karena peran tersebut adalah pengguna biasa.

Dalam contoh di bawah ini, kami memberikan hak istimewa pilih pada semua tabel di database PERUSAHAAN untuk peran peran laporan yang kami buat di atas.

GRANT SELECT ON company.* to repotrole;

Tanda bintang (*) mewakili semua tabel di dalam database perusahaan.

Peran dapat diberikan kepada pengguna MySQL, pada contoh di bawah ini, kami membuat 'perusahaan_ro' di pengguna localhost.

CREATE USER IF NOT EXISTS 'company_ro'@'localhost' IDENTIFIED WITH mysql_native_password BY 'company_pass' WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;

Ingat bahwa pengguna bukan hanya nama pengguna melainkan penggunanya di host di MySQL dan kemudian peran repotrole dapat diberikan kepadanya dengan memberikan repotrole kepada pengguna seperti yang ditunjukkan di bawah ini.

GRANT 'repotrole' to 'company_ro'@'localhost';

Fungsi peran MySQL saat ini membantu menentukan peran apa yang dimiliki pengguna saat ini.

mysql> select current_role();
+----------------+
| current_role() |
+----------------+
| NONE           |
+----------------+

Keistimewaan peran menumpuk yang berarti bahwa pengguna akan memiliki hak istimewa yang dijelaskan oleh Union dari hak istimewa dasar dan perannya. Sangat penting bahwa jika pengguna diberikan peran itu tidak diaktifkan secara default. kita akan melihat yang terakhir ini di akhir bagian ini.

Mendefinisikan Peran Wajib

Peran wajib adalah peran yang akan dikaitkan oleh semua pengguna secara default dikendalikan oleh variabel wajib.

SET PERSIST mandatory_roles =‘role1,role2′;

mysql> SET PERSIST mandatory_roles='dbt3_read23';

Peran wajib, seperti peran yang diberikan secara eksplisit, tidak berlaku sampai diaktifkan, Anda akan melihat cara mengaktifkan peran terakhir di postingan ini.

Peran Latihan

Mari kita lakukan ini secara praktis, kita membuat peran dan menetapkannya ke beberapa pengguna, kita akan menambahkan hak istimewa pada semua tabel di database perusahaan dan kita akan menambahkan hak pilih lainnya pada tabel sys seperti yang ditunjukkan di bawah ini.

mysql> create role 'repotrole';

Jadi berikan hak istimewa kepada pengguna pelapor.

mysql> grant select on company.* to 'repotrole';

mysql> grant select on sys.version to 'repotrole';

Mari kita buat ke user, user1 di localhost dan user2 di localhost dengan password yang berbeda

mysql> create user 'user1'@'localhost' identified by 'foo';

mysql> create user 'user2'@'localhost' identified by 'bar';

mysql> grant 'repotrole' to 'user1'@'localhost';

mysql> grant 'repotrole' to 'user2'@'localhost';

Mereka dibuat, tetapkan peran repotrole kepada mereka, lalu periksa dengan show grants jika mereka memiliki peran repotrole.

mysql> show grants for 'user1'@'localhost';
+----------------------------------------------+
| Grants for [email protected]                   |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `user1`@`localhost`    |
| GRANT `repotrole`@`%` TO `user1`@`localhost` |
+----------------------------------------------+

mysql> show grants for 'user2'@'localhost';
+----------------------------------------------+
| Grants for [email protected]                   |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `user2`@`localhost`    |
| GRANT `repotrole`@`%` TO `user2`@`localhost` |
+----------------------------------------------+

Mereka melakukannya alih-alih harus menguraikan kedua hak istimewa untuk kedua pengguna, kami baru saja membuat peran repotrole dan peran itu menambahkan kedua hak istimewa untuk kedua pengguna baru yang kami buat.

Periksa pengguna dengan pt-show-grant juga.

Pengguna1

[[email protected] ~]# pt-show-grants | grep user1

-- Grants for 'dbt3_user1'@'%'
CREATE USER IF NOT EXISTS 'dbt3_user1'@'%';
ALTER USER 'dbt3_user1'@'%' IDENTIFIED WITH 'mysql_native_password' AS 
'*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' REQUIRE NONE PASSWORD EXPIRE 
DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL 
DEFAULT PASSWORD REQUIRE CURRENT DEFAULT;
GRANT USAGE ON *.* TO `dbt3_user1`@`%`;
GRANT `dbt3_reader`@`%` TO `dbt3_user1`@`%`;
-- Grants for 'user1'@'localhost'
CREATE USER IF NOT EXISTS 'user1'@'localhost';
ALTER USER 'user1'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS 
'*F3A2A51A9B0F2BE2468926B4132313728C250DBF' REQUIRE NONE PASSWORD EXPIRE 
DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT 
PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT;
GRANT USAGE ON *.* TO `user1`@`localhost`;
GRANT `repotrole`@`%` TO `user1`@`localhost`;

Pengguna2

[[email protected] ~]# pt-show-grants | grep user2

-- Grants for 'dbt3_user2'@'%'
CREATE USER IF NOT EXISTS 'dbt3_user2'@'%';
ALTER USER 'dbt3_user2'@'%' IDENTIFIED WITH 'mysql_native_password' AS 
'*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' DEFAULT ROLE `dbt3_read23`@`%` REQUIRE 
NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE 
INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT;
GRANT USAGE ON *.* TO `dbt3_user2`@`%`;
-- Grants for 'user2'@'localhost'
CREATE USER IF NOT EXISTS 'user2'@'localhost';
ALTER USER 'user2'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS 
'*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB' REQUIRE NONE PASSWORD EXPIRE 
DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL 
DEFAULT PASSWORD REQUIRE CURRENT DEFAULT;
GRANT USAGE ON *.* TO `user2`@`localhost`;
GRANT `repotrole`@`%` TO `user2`@`localhost`;

Jadi pt-show-grant menunjukkan peran repotrole untuk kedua pengguna.

Jika Anda ingin mempelajari cara menggunakan pt-show-grant, gunakan tautan di bawah

Instal dan Gunakan Percona Toolkit di Centos 7

Mari kita mulai klien MySQL lagi dan kali ini berikan peran repotrole kepada pengguna comp1.

mysql> grant 'repotrole' to 'comp1'@'localhost';

Mari kita keluar dari klien MySQL dan pengguna Logan comp1, cukup tentukan nama pengguna dan kata sandi pada baris perintah.

Menentukan kata sandi pada baris perintah pada sistem produksi bukanlah ide yang baik karena akan dicatat dalam sejarah. Mari kita periksa izin dengan hibah acara.

mysql> show grants;
+----------------------------------------------------------------+
| Grants for [email protected]                                     |
+----------------------------------------------------------------+
| GRANT USAGE ON *.* TO `comp1`@`localhost`                      |
| GRANT `dbt3_read23`@`%`,`repotrole`@`%` TO `comp1`@`localhost` |

Jadi pengguna memiliki peran repotrole tetapi hak istimewanya belum diaktifkan. Anda dapat melihat peran 'dbt3_read23' sudah ada karena peran ini telah ditetapkan sebagai PERSIST mandat_peran , saat Anda membuat pengguna baru, peran ini akan ditetapkan secara otomatis.

Mengaktifkan Peran

Kita bisa menggunakan set role repotrole untuk mengaktifkan role dan kemudian kita cek show grants.

mysql> set role 'repotrole';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants;
+----------------------------------------------------------------+
| Grants for [email protected]                                     |
+----------------------------------------------------------------+
| GRANT USAGE ON *.* TO `comp1`@`localhost`                      |
| GRANT SELECT ON `company`.* TO `comp1`@`localhost`             |
| GRANT SELECT ON `sys`.`version` TO `comp1`@`localhost`         |
| GRANT `dbt3_read23`@`%`,`repotrole`@`%` TO `comp1`@`localhost` |
+----------------------------------------------------------------+

Anda dapat melihat bahwa pengguna comp1 sudah memiliki hak istimewa untuk semua tabel perusahaan, inilah mengapa kami memberikan peran kepada pengguna ini untuk latihan ini tetapi peran repotrole akan menambahkan hak istimewa baru ke tabel versi sistem.

Kami dapat mengatur kembali ke peran default dan memeriksa hak istimewa lagi.

mysql> set role none;
Query OK, 0 rows affected (0.00 sec)

mysql> show grants;
+----------------------------------------------------------------+
| Grants for [email protected]                                     |
+----------------------------------------------------------------+
| GRANT USAGE ON *.* TO `comp1`@`localhost`                      |
| GRANT `dbt3_read23`@`%`,`repotrole`@`%` TO `comp1`@`localhost` |
+----------------------------------------------------------------+

This time the user kept the dbt3_read23 role because it had it as base privileges but it won't have the privilege to sys.version table that version anymore because that came from the role.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat terhubung ke server MySQL di 'localhost' (10061)

  2. Fungsi MySQL COS() – Mengembalikan Kosinus Angka di MySQL

  3. Haruskah saya menggunakan tipe data datetime atau timestamp di MySQL?

  4. kesalahan pernyataan yang disiapkan mysql:MySQLSyntaxErrorException

  5. Hitung jumlah nilai unik