Tildeling af tilladelser på tabelniveau
Du kan oprette en bruger med tilladelser på tabelniveau i MySQL ved at udføre følgende:
-
Opret forbindelse til MySQL som bruger med Create_user_priv og Grant_priv. Bestem, hvilke brugere der har disse rettigheder ved at køre følgende forespørgsel. Din bruger har allerede brug for SELECT-privilegiet på MySQL.user for at køre forespørgslen.
SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';
-
Kør følgende forespørgsel for at generere GRANT-sætningerne for din begrænsede bruger. Erstat 'mydatabase', 'myuser' og 'myhost' med specifikke oplysninger for din database.
Bemærk, at citaterne omkring myuser og mypassword er to enkelte anførselstegn, ikke dobbelte. Karaktererne omkring myhost og ,TABLE_NAME er backticks (tasten er placeret under escape-tasten på dit tastatur).
SELECT CONCAT('GRANT SELECT, SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'mydatabase';
Hvis du f.eks. ønskede at forbinde brugeren 'chartio_read_only' til din 'Reports'-database ved hjælp af chartio_connect-klienten, ville du køre følgende:
SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Reports';
Hvis du ville forbinde brugeren 'chartio_direct_connect' til din 'Analytics'-database ved hjælp af en direkte forbindelse fra Chartios servere, ville du køre følgende:
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';
-
Forespørgslen skal resultere svarende til følgende:
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`;
-
Vælg kun udsagn for de tabeller, du gerne vil give adgang til, og kør disse forespørgsler. For eksempel, hvis vi kun ville give adgang til tabellen Brugere og besøgende, ville vi køre:
GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
-
Giv brugeren en sikker adgangskode.
SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
eller
SET PASSWORD FOR 'chartio_direct_connect'@`52.6.1.1` = PASSWORD('top$secret');
Nu kan du sikkert få adgang til din database med denne bruger og være sikker på, at den kun har tilladelser til de angivne tabeller.
Tildeling af tilladelser på kolonneniveau
Proceduren for tildeling af tilladelser på kolonneniveau på en specifik tabel ligner meget tildeling af tilladelser på tabelniveau.
-
Generer GRANT-sætningerne for tilladelser på kolonneniveau ved hjælp af følgende forespørgsel:
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';
Hvis du f.eks. ønskede at forbinde brugeren 'chartio_read_only' til specifikke kolonner i tabellen 'Brugere' i 'Rapporter'-databasen ved hjælp af chartio_connect-klienten, ville du køre følgende:
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';
-
Forespørgslen skulle resultere i noget, der ligner følgende:
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`;
-
Vælg kun udsagn for de kolonner, du gerne vil give adgang til, og kør disse forespørgsler. Hvis vi f.eks. kun ønskede at give adgang til kolonnerne 'User_ID' og 'Company', ville vi køre:
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`;
-
Giv brugeren en sikker adgangskode.
SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
Se MySQL-dokumentationen for mere information.