Ge tabellnivåbehörigheter
Du kan skapa en användare med tabellnivåbehörigheter i MySQL genom att utföra följande:
-
Anslut till MySQL som användare med Create_user_priv och Grant_priv. Bestäm vilka användare som har dessa privilegier genom att köra följande fråga. Din användare kommer redan att behöva SELECT-privilegiet på MySQL.user för att köra frågan.
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öljande fråga för att generera GRANT-satserna för din begränsade användare. Byt ut "min databas", "minanvändare" och "min värd" med specifik information för din databas.
Observera att citattecken kring myuser och mypassword är två enkla citattecken, inte dubbla. Karaktärerna som omger myhost och ,TABLE_NAME, är backticks (tangenten finns under escape-tangenten på ditt tangentbord).
SELECT CONCAT('GRANT SELECT, SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'mydatabase';
Om du till exempel vill ansluta användaren 'chartio_read_only' till din 'Reports'-databas med hjälp av chartio_connect-klienten skulle du köra följande:
SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Reports';
Om du ville ansluta användaren 'chartio_direct_connect' till din 'Analytics'-databas med en direktanslutning från Chartios servrar, skulle du köra följande:
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';
-
Frågan bör resultera i liknande följande:
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älj satserna för endast de tabeller du vill ge åtkomst till och kör dessa frågor. Om vi till exempel bara ville ge åtkomst till tabellen Användare och besökare skulle vi köra:
GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
-
Ge användaren ett säkert lösenord.
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 säkert komma åt din databas med den här användaren och vara säker på att den bara har behörighet till de angivna tabellerna.
Bevilja behörigheter på kolumnnivå
Proceduren för att bevilja behörigheter på kolumnnivå för en specifik tabell är mycket lik att bevilja tabellnivåbehörigheter.
-
Generera GRANT-satserna för behörigheter på kolumnnivå med hjälp av följande fråga:
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';
Om du till exempel vill ansluta användaren 'chartio_read_only' till specifika kolumner i tabellen 'Användare' i databasen 'Rapporter' med hjälp av chartio_connect-klienten, skulle du köra följande:
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';
-
Frågan bör resultera i något som liknar följande:
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älj bara satserna för de kolumner du vill ge åtkomst till och kör dessa frågor. Om vi till exempel bara ville ge åtkomst till kolumnerna "User_ID" och "Company" skulle vi köra:
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`;
-
Ge användaren ett säkert lösenord.
SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
För mer information se MySQL-dokumentationen.