sql >> Databáze >  >> RDS >> Mysql

Udělte oprávnění pro tabulky a sloupce MySQL

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:

  1. 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';
    
  2. 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';
    
  3. 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`;
    
  4. 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`;
    
  5. 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.

  1. 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';
    
  2. 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`;
    
  3. 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`;
    
  4. Dejte uživateli bezpečné heslo.

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

Další informace naleznete v dokumentaci MySQL.


  1. SQL INSERT bez určení sloupců. Co se stalo?

  2. 3 způsoby, jak převést desítkové na šestnáctkové v SQL Server (T-SQL)

  3. SQLite Self-Join

  4. Jak make_timestamptz() funguje v PostgreSQL