Mysql
 sql >> база данни >  >> RDS >> Mysql

Предоставяне на MySQL разрешения за таблица и колона

Предоставяне на разрешения на ниво таблица

Можете да създадете потребител с разрешения на ниво таблица в MySQL, като изпълните следното:

  1. Свържете се с MySQL като потребител с Create_user_priv и Grant_priv. Определете кои потребители имат тези привилегии, като изпълните следната заявка. Вашият потребител вече ще се нуждае от привилегията SELECT на MySQL.user, за да изпълни заявката.

    SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';
    
  2. Изпълнете следната заявка, за да генерирате изразите GRANT за вашия ограничен потребител. Заменете „mydatabase“, „myuser“ и „myhost“ с конкретна информация за вашата база данни.

    Обърнете внимание, че кавичките около myuser и mypassword са две единични кавички, а не двойни. Знаците около myhost и ,TABLE_NAME са обратни (клавишът се намира под клавиша за излизане на клавиатурата ви).

    SELECT CONCAT('GRANT SELECT, SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'mydatabase';
    

    Например, ако искате да свържете потребителя „chartio_read_only“ към вашата база данни „Reports“ с помощта на клиента chartio_connect, ще изпълните следното:

    SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'Reports';
    

    Ако искате да свържете потребителя ‘chartio_direct_connect’ към вашата база данни ‘Analytics’ чрез директна връзка от сървърите на Chartio, трябва да изпълните следното:

    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. Заявката трябва да се получи подобно на следното:

    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. Изберете изразите само за таблиците, до които искате да предоставите достъп, и изпълнете тези заявки. Например, ако искаме да предоставим достъп само до таблицата Users and Visitors, ще изпълним:

    GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
    
  5. Дайте на потребителя сигурна парола.

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

    или

    SET PASSWORD FOR 'chartio_direct_connect'@`52.6.1.1` = PASSWORD('top$secret');
    

Сега можете безопасно да получите достъп до вашата база данни с този потребител и да сте сигурни, че има разрешения само за посочените таблици.

Предоставяне на разрешения на ниво колона

Процедурата за предоставяне на разрешения на ниво колона на конкретна таблица е много подобна на предоставянето на разрешения на ниво таблица.

  1. Генерирайте изразите GRANT за разрешения на ниво колона, като използвате следната заявка:

    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';
    

    Например, ако искате да свържете потребителя „chartio_read_only“ към конкретни колони в таблицата „Потребители“ на базата данни „Отчети“ с помощта на клиента chartio_connect, трябва да изпълните следното:

    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. Заявката трябва да доведе до нещо подобно на следното:

    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. Изберете само изразите за колоните, до които искате да предоставите достъп, и изпълнете тези заявки. Например, ако искаме да предоставим достъп само до колоните „User_ID“ и „Company“, ще изпълним:

    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. Дайте на потребителя сигурна парола.

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

За повече информация вижте документацията на MySQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирате MySQL 8.0 на CentOS 8 / RHEL 8

  2. mySQL конвертира varchar към дата

  3. Преобразуване на времевата марка към дата в MySQL заявка

  4. Код за грешка в MySQL:1175 по време на АКТУАЛИЗИРАНЕ в MySQL Workbench

  5. Как да наблюдавате своя ProxySQL с Prometheus и ClusterControl