Udělování oprávnění na úrovni tabulky
Uživatele s oprávněními na úrovni tabulky v MySQL můžete vytvořit následujícím způsobem:
-
Připojte se k MySQL jako uživatel pomocí Create_user_priv a Grant_priv. Spuštěním následujícího dotazu zjistíte, kteří uživatelé mají tato oprávnění. Váš uživatel již bude potřebovat oprávnění SELECT na MySQL.user ke spuštění dotazu.
SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';
-
Spuštěním následujícího dotazu vygenerujte příkazy GRANT pro uživatele s omezeným přístupem. Nahraďte „mydatabase“, „myuser“ a „myhost“ konkrétními informacemi pro vaši databázi.
Upozorňujeme, že uvozovky kolem myuser a mypassword jsou dvě jednoduché uvozovky, nikoli dvojité. Znaky kolem myhost a TABLE_NAME jsou zpětné značky (klávesa se nachází pod klávesou Escape na vaší klávesnici).
SELECT CONCAT('GRANT SELECT, SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'mydatabase';
Pokud byste například chtěli připojit uživatele „chartio_read_only“ k databázi „Reports“ pomocí klienta chartio_connect, spustili byste následující:
SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Reports';
Pokud byste chtěli připojit uživatele „chartio_direct_connect“ k vaší databázi „Analytics“ pomocí přímého připojení ze serverů společnosti Chartio, spustili byste následující:
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';
-
Výsledek dotazu by měl být podobný následujícímu:
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`;
-
Vyberte příkazy pouze pro tabulky, kterým chcete udělit přístup, a spusťte tyto dotazy. Pokud bychom například chtěli udělit přístup pouze k tabulce Uživatelé a návštěvníci, spustili bychom:
GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
-
Dejte uživateli bezpečné heslo.
SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
nebo
SET PASSWORD FOR 'chartio_direct_connect'@`52.6.1.1` = PASSWORD('top$secret');
Nyní můžete s tímto uživatelem bezpečně přistupovat ke své databázi a být si jisti, že má oprávnění pouze k určeným tabulkám.
Udělování oprávnění na úrovni sloupců
Postup udělování oprávnění na úrovni sloupců pro konkrétní tabulku je velmi podobný udělování oprávnění na úrovni tabulky.
-
Vygenerujte příkazy GRANT pro oprávnění na úrovni sloupců pomocí následujícího dotazu:
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';
Pokud byste například chtěli pomocí klienta chartio_connect připojit uživatele „chartio_read_only“ ke konkrétním sloupcům v tabulce „Users“ v databázi „Reports“, spustili byste následující:
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';
-
Výsledkem dotazu by mělo být něco podobného následujícímu:
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`;
-
Vyberte pouze příkazy pro sloupce, kterým chcete udělit přístup, a spusťte tyto dotazy. Pokud bychom například chtěli udělit přístup pouze ke sloupcům ‚User_ID‘ a ‚Company‘, spustili bychom:
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`;
-
Dejte uživateli bezpečné heslo.
SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
Další informace naleznete v dokumentaci MySQL.