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

Berikan izin tabel dan kolom MySQL

Memberikan izin tingkat tabel

Anda dapat membuat pengguna dengan izin tingkat tabel di MySQL dengan melakukan hal berikut:

  1. Hubungkan ke MySQL sebagai pengguna dengan Create_user_priv dan Grant_priv. Tentukan pengguna mana yang memiliki hak istimewa ini dengan menjalankan kueri berikut. Pengguna Anda sudah memerlukan hak istimewa SELECT di MySQL.user untuk menjalankan kueri.

    SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';
    
  2. Jalankan kueri berikut untuk menghasilkan pernyataan GRANT untuk pengguna terbatas Anda. Ganti 'mydatabase', 'myuser', dan 'myhost' dengan informasi spesifik untuk database Anda.

    Perhatikan bahwa kutipan di sekitar myuser dan mypassword adalah dua tanda kutip tunggal, bukan ganda. Karakter di sekitar myhost dan ,TABLE_NAME, adalah backtick (tombolnya terletak di bawah tombol escape pada keyboard Anda).

    SELECT CONCAT('GRANT SELECT, SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'mydatabase';
    

    Misalnya, jika Anda ingin menghubungkan pengguna 'chartio_read_only' ke database 'Laporan' menggunakan klien chartio_connect, Anda akan menjalankan yang berikut:

    SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'Reports';
    

    Jika Anda ingin menghubungkan pengguna 'chartio_direct_connect' ke database 'Analytics' menggunakan koneksi langsung dari server Chartio, Anda akan menjalankan yang berikut:

    SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Analytics.`', TABLE_NAME, '` to ''chartio_direct_connect''@`52.6.1.1`;')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'Analytics';
    
  3. Kueri akan menghasilkan seperti berikut:

    GRANT SELECT, SHOW VIEW ON mydatabase.`Activity` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Marketing` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Operations` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Payments` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Plans` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Services` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Subscriptions` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
    
  4. Pilih pernyataan hanya untuk tabel yang ingin Anda beri akses dan jalankan kueri tersebut. Misalnya, jika kami hanya ingin memberikan akses ke tabel Pengguna dan Pengunjung, kami akan menjalankan:

    GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
    
  5. Berikan kata sandi yang aman kepada pengguna.

    SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
    

    atau

    SET PASSWORD FOR 'chartio_direct_connect'@`52.6.1.1` = PASSWORD('top$secret');
    

Sekarang Anda dapat mengakses database Anda dengan aman dengan pengguna ini dan yakinlah bahwa itu hanya memiliki izin ke tabel yang ditentukan.

Memberikan izin tingkat kolom

Prosedur untuk memberikan izin tingkat kolom pada tabel tertentu sangat mirip dengan memberikan izin tingkat tabel.

  1. Buat pernyataan GRANT untuk izin tingkat kolom menggunakan kueri berikut:

    SELECTCONCAT('GRANT SELECT (`', COLUMN_NAME, '`), SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;')
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'mydatabase' AND TABLE_NAME = 'mytable';
    

    Misalnya, jika Anda ingin menghubungkan pengguna 'chartio_read_only' ke kolom tertentu di tabel 'Pengguna' dari database 'Laporan' menggunakan klien chartio_connect, Anda akan menjalankan yang berikut:

    SELECTCONCAT('GRANT SELECT (`', COLUMN_NAME, '`), SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;')
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'Reports' AND TABLE_NAME = 'Users';
    
  2. Kueri akan menghasilkan sesuatu yang mirip dengan berikut ini:

    GRANT SELECT (`User_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
    GRANT SELECT (`Campaign_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
    GRANT SELECT (`Created_Date`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
    GRANT SELECT (`Company`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
    GRANT SELECT (`City`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
    GRANT SELECT (`State`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
    GRANT SELECT (`Zip`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
    GRANT SELECT (`Phone_Number`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
    GRANT SELECT (`Credit_Card`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
    
  3. Pilih hanya pernyataan untuk kolom yang ingin Anda beri akses dan jalankan kueri tersebut. Misalnya, jika kami hanya ingin memberikan akses ke kolom 'User_ID' dan 'Perusahaan', kami akan menjalankan:

    GRANT SELECT (`User_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
    GRANT SELECT (`Company`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
    
  4. Berikan kata sandi yang aman kepada pengguna.

    SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
    

Untuk informasi lebih lanjut, lihat dokumentasi MySQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sisipkan MySQL ke dalam 2 tabel

  2. Fungsi MySQL COT() – Mengembalikan Kotangen Angka di MySQL

  3. SQL:Temukan rekor maksimum per grup

  4. Bagaimana menghubungkan database MySQL jarak jauh di PHP

  5. Bagaimana Fungsi LOWER() Bekerja di MySQL