Concessione delle autorizzazioni a livello di tabella
Puoi creare un utente con autorizzazioni a livello di tabella in MySQL eseguendo quanto segue:
-
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';
-
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';
-
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`;
-
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`;
-
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.
-
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';
-
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`;
-
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`;
-
Fornisci all'utente una password sicura.
SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
Per maggiori informazioni consulta la documentazione di MySQL.