Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przyznaj MySQL uprawnienia do tabel i kolumn

Przyznawanie uprawnień na poziomie tabeli

Możesz utworzyć użytkownika z uprawnieniami na poziomie tabeli w MySQL, wykonując następujące czynności:

  1. Połącz się z MySQL jako użytkownik za pomocą Create_user_priv i Grant_priv. Określ, którzy użytkownicy mają te uprawnienia, uruchamiając następujące zapytanie. Twój użytkownik będzie już potrzebował uprawnienia SELECT w MySQL.user, aby uruchomić zapytanie.

    SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';
    
  2. Uruchom następujące zapytanie, aby wygenerować instrukcje GRANT dla użytkownika z ograniczeniami. Zastąp „mydatabase”, „myuser” i „myhost” konkretnymi informacjami dotyczącymi Twojej bazy danych.

    Zauważ, że cytaty otaczające myuser i mypassword są dwoma pojedynczymi cudzysłowami, a nie podwójnymi. Znaki otaczające myhost i TABLE_NAME to znaki wsteczne (klawisz znajduje się pod klawiszem Escape na klawiaturze).

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

    Na przykład, jeśli chcesz połączyć użytkownika „chartio_read_only” z bazą danych „Raporty” za pomocą klienta chartio_connect, uruchom następujące polecenie:

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

    Jeśli chcesz połączyć użytkownika „chartio_direct_connect” z bazą danych „Analytics” za pomocą bezpośredniego połączenia z serwerami Chartio, uruchom następujące polecenie:

    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. Zapytanie powinno wyglądać podobnie do następującego:

    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. Wybierz instrukcje tylko dla tabel, do których chcesz przyznać dostęp, i uruchom te zapytania. Na przykład, gdybyśmy chcieli tylko przyznać dostęp do tabeli Użytkownicy i Goście, uruchomilibyśmy:

    GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
    
  5. Daj użytkownikowi bezpieczne hasło.

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

    lub

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

Teraz możesz bezpiecznie uzyskać dostęp do swojej bazy danych za pomocą tego użytkownika i mieć pewność, że ma on uprawnienia tylko do określonych tabel.

Przyznawanie uprawnień na poziomie kolumny

Procedura przyznawania uprawnień na poziomie kolumn do określonej tabeli jest bardzo podobna do nadawania uprawnień na poziomie tabeli.

  1. Wygeneruj instrukcje GRANT dla uprawnień na poziomie kolumny, używając następującego zapytania:

    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';
    

    Na przykład, jeśli chcesz połączyć użytkownika „chartio_read_only” z określonymi kolumnami w tabeli „Użytkownicy” bazy danych „Raporty” za pomocą klienta chartio_connect, uruchom następujące polecenie:

    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. Zapytanie powinno dać wynik podobny do następującego:

    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. Wybierz tylko instrukcje dotyczące kolumn, do których chcesz przyznać dostęp, i uruchom te zapytania. Na przykład, gdybyśmy chcieli tylko przyznać dostęp do kolumn „User_ID” i „Firma”, uruchomilibyśmy:

    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. Daj użytkownikowi bezpieczne hasło.

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

Aby uzyskać więcej informacji, zapoznaj się z dokumentacją 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. Mysql Konwertuj kolumnę na wiersz (tabela przestawna)

  2. Funkcja MySQL DEGREES() — konwersja z radianów na stopnie

  3. Jak utworzyć indeks w części daty pola DATETIME w MySql?

  4. Jak uzyskać listę widoków MySQL?

  5. PDO MySQL:użyć PDO::ATTR_EMULATE_PREPARES czy nie?