В тази статия ще говорим за новата функция в системата за привилегии, свързана с MySQL 8, която е Roles. И така, нека поговорим за ролите, тази статия е изцяло посветена на ролите.
Други потребители може да имат сложни привилегии, често срещан пример за това е потребител, използван за отчитане, този потребител не трябва да пише никакви данни, но има и възможността да не се налага да чете всички данни. Много е вероятно той да може да се използва само за няколко конкретни таблици или колони или може да има избран достъп само до набор от изгледи, които също ще бъдат специфични.
Тези привилегии могат да се събират бързо и да се окажат в много дълги потребителски дефиниции, ние няма да използваме дефиниция, а повече грантове освобождават място за повече грешки. В MySQL 8 тези набори от привилегии могат да бъдат дефинирани като роли и роли могат да бъдат предоставени на потребители вместо основни привилегии на MySQL. Ролите са колекция от привилегии, които предоставяме на потребителите.
Точно като нов потребител, създаден с командата create user, ние използваме за създаване на роля, както е споменато по-долу;
CREATE ROLE 'reportrole';
Можете да създадете няколко роли, както е заявката по-долу наведнъж.
СЪЗДАВАНЕ НА РОЛЯ 'app_ro', 'app_w', 'app_dev';
Нова роля, създадена с командата create role, няма да има свързани с нея привилегии, на тази роля могат да бъдат предоставени разрешения, тъй като тя е била обикновен потребител.
В примера по-долу предоставяме привилегия за избор на всички таблици в базата данни COMPANY на ролята на отчетна роля, която създадохме по-горе.
ПРЕДОСТАВЯ ИЗБОР НА компания.* за репотролиране;
Звездичката (*) представлява всички таблици във фирмената база данни.
Роли могат да се предоставят на потребители на MySQL, в примера по-долу създаваме „company_ro“ на потребител на localhost.
СЪЗДАДЕТЕ ПОТРЕБИТЕЛ, АКО НЕ СЪЩЕСТВУВА 'company_ro'@'localhost' ИДЕНТИФИЦИРАН С mysql_native_password ОТ 'company_pass' С MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR> 100;Не забравяйте, че потребителят не е просто потребителско име, а по-скоро негов потребител в хоста в MySQL и след това ролята на repotrole може да му бъде предоставена с предоставяне на repotrole на потребителя, както е показано по-долу.
ПРЕДОСТАВЯТЕ 'repotrole' на 'company_ro'@'localhost';Функцията за текуща роля на MySQL помага да се определи каква роля има текущият потребител.
mysql> изберете current_role();+----------------+| текуща_роля() |+----------------+| НЯМА |+----------------+Привилегиите на ролята се подреждат, което означава, че потребителите ще имат описаните от Съюза привилегии на основните привилегии и ролите му. Много е важно, че ако на потребителя е предоставена ролята, тя не е активирана по подразбиране. ще видим това последно в края на този раздел.
Дефиниране на задължителни роли
Задължителните роли са роли, които ще бъдат асоциирани от всички потребители по подразбиране се контролират от задължителната променлива.
ЗАДЪРЖИ ПОСТОЯНИ mandatory_roles =‘роля1,роля2′;
mysql> ЗАДЪРЖИ ПОСТОЯНИ mandatory_roles=’dbt3_read23’;
Задължителните роли, като изрично предоставени роли, не влизат в сила, докато не бъдат активирани, ще видите как да активирате роля по-късно в тази публикация.
Практически роли
Нека направим това практически, създаваме роля и я присвояваме на множество потребители, ще добавим привилегии към всички таблици в базата данни на компанията и ще добавим още едно право за избор в таблицата sys, както е показано по-долу.
mysql> създаде роля 'repotrole';Така че дайте привилегиите на потребителя, който отчита.
mysql> разреши избор на компания.* на 'repotrole';mysql> разреши избор на sys.version на 'repotrole';Нека създадем за потребители, user1 на localhost и user2 на localhost с различни пароли
mysql> създаване на потребител 'user1'@'localhost' идентифициран с 'foo';mysql> създаване на потребител 'user2'@'localhost' идентифициран с 'bar';mysql> предоставяне на 'repotrole' на 'user1'@'localhost ';mysql> дайте 'repotrole' на 'user2'@'localhost';Те са създадени, присвоете им ролята на repotrole и след това проверете с show grants дали имат ролята repotrole.
mysql> показва разрешения за 'user1'@'localhost';+-------------------------------- ------------+| Грантове за [email protected] |+----------------------------------------- -----+| ПРЕДОСТАВЯТЕ ИЗПОЛЗВАНЕ НА *.* НА `user1`@`localhost` || ПРЕДОСТАВЯ `repotrole`@`%` НА `user1`@`localhost` |+-------------------------------- --------------+mysql> показване на разрешения за 'user2'@'localhost';+--------------------- -------------------------+| Грантове за [email protected] |+----------------------------------------- -----+| ПРЕДОСТАВЯТЕ ИЗПОЛЗВАНЕ НА *.* НА `user2`@`localhost` || ПРЕДОСТАВЯ `repotrole`@`%` НА `user2`@`localhost` |+-------------------------------- --------------+Те правят това, вместо да се налага да посочват и двете привилегии и за двата потребителя, които току-що създадохме ролята на repotrole и тази роля добави и двете привилегии и на двамата нови потребители, които създадохме.
Проверете и потребителите с pt-show-grants.
Потребител1
[[email protected] ~]# pt-show-grants | grep user1-- безвъзмездни средства за 'dbt3_user1'@'%' Създаване на потребител, ако не съществува 'dbt3_user1'@'%'; alter user 'dbt3_user1'@'%', идентифициран с 'mysql_native_password' as '*2470c0c06dee42fd1618bb99005adca2ec9d1e19' не се излага на парола по подразбиране ЗА ОТКЛЮЧВАНЕ НА ПАРОЛА ИСТОРИЯ ПО ПОДРАЗБИРАНЕ ПОВТОРНА ИЗПОЛЗВАНЕ НА ПАРОЛА ИНТЕРВАЛ ПО ПОДРАЗБИРАНЕ ПАРОЛА ПО ПОДРАЗБИРАНЕ ИЗИСКВА ТЕКУЩА ПОДРАЗБИРАНЕ; ПРЕДОСТАВЯ ИЗПОЛЗВАНЕ НА *.* НА `dbt3_user1`@`%`; ПРЕДОСТАВЯ `dbt3_reader`@`%` КЪМ `dbt3_user1`@`%`; 'user1'@'localhost'create user, ако не съществува' user1 '@' localhost '; alter user' user1 '@' localhost ', идентифициран с' mysql_native_password 'като'*f3a2a51a9b0f2be2468926b4132313728c250dbf ПОВТОРНО ИЗПОЛЗВАНЕ НА ИНТЕРВАЛ ПАРОЛА ПО ПОДРАЗБИРАНЕ ИЗИСКВА ТЕКУЩА ПОДРАЗБИРАНЕ; ПРЕДОСТАВЯ ИЗПОЛЗВАНЕ НА *.* НА `user1`@`localhost`;ПРЕДОСТАВЯ `repotrole`@`%` НА `user1`@`localhost`;Потребител 2
[[email protected] ~]# pt-show-grants | GREP user2-- безвъзмездни средства за 'dbt3_user2'@'%' Създаване на потребител, ако не съществува 'dbt3_user2'@'%'; Alter User 'DBT3_USER2'@'%', идентифициран с 'mysql_native_password' AS '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' DEAFT @`%` ИЗИСКВА НИЩО ПАРОЛА ИЗТИЧА ПРОФИЛ ПО ПОДРАЗБИРАНЕ ОТКЛЮЧВА ИСТОРИЯ НА ПАРОЛА ПО ПОВТОРНО ИЗПОЛЗВАНЕ ПАРОЛА ПОВТОРНА ИЗПОЛЗВАНЕ ИНТЕРВАЛ ПАРОЛА ПО ПОДРАЗБИРАНЕ ИЗИСКВА ТЕКУЩА ПОДРАЗБИРАНЕ; ПРЕДОСТАВЯ ИЗПОЛЗВАНЕ НА *.* НА `dbt3_user2`@`%`;-'CREH Grants' Потребител, ако не съществува 'user2'@'localhost'; alter user 'user2'@'localhost', идентифициран с 'mysql_native_password' като '*e8d46ce25265e545d225a8a6f1baf642febee5cb' не изисква парола expire по подразбиране отключване на парола история по подразбиране парола за повторна употреба на парола по подразбиране. ПРЕДОСТАВЯТЕ ИЗПОЛЗВАНЕ НА *.* НА `user2`@`localhost`; ПРЕДОСТАВЯТЕ `repotrole`@`%` НА `user2`@`localhost`;Така че pt-show-grants показват ролята на repotrole и за двамата потребители.
Ако искате да научите как да използвате pt-show-grants, използвайте връзката по-долу
Инсталирайте и използвайте Percona Toolkit на Centos 7
Нека стартираме MySQL клиента отново и този път да предоставим ролята на repotrole на потребител на comp1.
mysql> дайте 'repotrole' на 'comp1'@'localhost';Нека излезем от клиента MySQL и потребителя Logan comp1, просто посочете потребителското име и паролата в командния ред.
Посочването на паролата в командния ред на производствените системи не е добра идея, защото ще бъде записана в историята. Нека проверим за разрешения с разрешения за показване.
mysql> покажи грантове;+------------------------------------------------------- -----------------------+| Грантове за [email protected] |+---------------------------------------- -----------------------+| ПРЕДОСТАВЯТЕ ИЗПОЛЗВАНЕ НА *.* НА `comp1`@`localhost` || GRANT `dbt3_read23`@`%`,`repotrole`@`%` НА `comp1`@`localhost` |Така че потребителят има ролята на repotrole, но неговите привилегии все още не са активирани. Можете да видите ролята „dbt3_read23“ вече е там, защото тази роля е зададена като PERSIST mandatory_roles , когато създадете нов потребител, тази роля ще бъде присвоена автоматично.
Активиране на роли
Можем да използваме set role repotrole, за да активираме ролята и след това проверяваме разрешенията за показване.
mysql> задайте роля 'repotrole';Заявката ОК, 0 засегнати реда (0,00 сек)mysql> показване на разрешения;+----------------------- -----------------------------------------+| Грантове за [email protected] |+---------------------------------------- -----------------------+| ПРЕДОСТАВЯТЕ ИЗПОЛЗВАНЕ НА *.* НА `comp1`@`localhost` || ПРЕДОСТАВЯТЕ ИЗБОР НА `company`.* ДО `comp1`@`localhost` || ПРЕДОСТАВЯТЕ ИЗБОР НА `sys`.`version` КЪМ `comp1`@`localhost` || ПРЕДОСТАВЯТЕ `dbt3_read23`@`%`,`repotrole`@`%` НА `comp1`@`localhost` |+------------------------ ----------------------------------------+Можете да видите, че потребителят comp1 вече е имал привилегии за всички фирмени таблици, ето защо ние предоставихме ролята на този потребител за това упражнение, но ролята на repotrole ще добави новото привилегия към таблицата с версиите на системата.
Можем да се върнем към ролята по подразбиране и да проверим отново привилегиите.
mysql> задайте роля без;Заявката ОК, 0 засегнати реда (0,00 сек)mysql> показване на разрешения;+------------------------- ----------------------------------------+| Грантове за [email protected] |+---------------------------------------- -----------------------+| ПРЕДОСТАВЯТЕ ИЗПОЛЗВАНЕ НА *.* НА `comp1`@`localhost` || ПРЕДОСТАВЯТЕ `dbt3_read23`@`%`,`repotrole`@`%` НА `comp1`@`localhost` |+------------------------ ----------------------------------------+Този път потребителят запази dbt3_read23 роля, защото я имаше като основни привилегии, но вече няма да има привилегията да таблица с sys.version тази версия, защото това идва от ролята.