Mysql
 sql >> Database >  >> RDS >> Mysql

Concedi le autorizzazioni per tabelle e colonne MySQL

Concessione delle autorizzazioni a livello di tabella

Puoi creare un utente con autorizzazioni a livello di tabella in MySQL eseguendo quanto segue:

  1. Connettiti a MySQL come utente con Create_user_priv e Grant_priv. Determina quali utenti dispongono di questi privilegi eseguendo la query seguente. Il tuo utente avrà già bisogno del privilegio SELECT su MySQL.user per eseguire la query.

    SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';
    
  2. Eseguire la query seguente per generare le istruzioni GRANT per l'utente con restrizioni. Sostituisci "mydatabase", "myuser" e "myhost" con informazioni specifiche per il tuo database.

    Nota che le virgolette che circondano myuser e mypassword sono due virgolette singole, non doppie. I caratteri che circondano myhost e ,TABLE_NAME, sono backtick (il tasto si trova sotto il tasto Esc sulla tastiera).

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

    Ad esempio, se desideri connettere l'utente 'chartio_read_only' al tuo database 'Reports' utilizzando il client chartio_connect dovresti eseguire quanto segue:

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

    Se desideri connettere l'utente 'chartio_direct_connect' al tuo database 'Analytics' utilizzando una connessione diretta dai server di Chartio, dovresti eseguire quanto segue:

    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. La query dovrebbe risultare simile alla seguente:

    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. Seleziona le istruzioni solo per le tabelle a cui desideri concedere l'accesso ed esegui tali query. Ad esempio, se volessimo concedere l'accesso solo alla tabella Utenti e Visitatori, eseguiremmo:

    GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
    
  5. Fornisci all'utente una password sicura.

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

    o

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

Ora puoi accedere in sicurezza al tuo database con questo utente e avere la certezza che ha solo i permessi per le tabelle specificate.

Concessione di autorizzazioni a livello di colonna

La procedura per concedere autorizzazioni a livello di colonna su una tabella specifica è molto simile alla concessione di autorizzazioni a livello di tabella.

  1. Genera le istruzioni GRANT per le autorizzazioni a livello di colonna utilizzando la query seguente:

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

    Ad esempio, se desideri connettere l'utente "chartio_read_only" a colonne specifiche nella tabella "Utenti" del database "Report" utilizzando il client chartio_connect, eseguire quanto segue:

    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. La query dovrebbe risultare in qualcosa di simile al seguente:

    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. Seleziona solo le istruzioni per le colonne a cui desideri concedere l'accesso ed esegui tali query. Ad esempio, se volessimo concedere l'accesso solo alle colonne "ID_utente" e "Azienda", eseguiremmo:

    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. Fornisci all'utente una password sicura.

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

Per maggiori informazioni consulta la documentazione di MySQL.