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

Používání rolí Nové v MySQL 8

V tomto článku budeme hovořit o nové funkci v systému oprávnění souvisejícím s MySQL 8, což jsou role. Pojďme se tedy bavit o rolích, tento článek je zcela věnován rolím.

Ostatní uživatelé mohou mít složitá oprávnění, běžným příkladem je uživatel, který se používá k hlášení, tento uživatel nemusí zapisovat žádná data, ale existuje také možnost, že nebude muset číst všechna data. Je velmi pravděpodobné, že jej lze použít pouze pro několik konkrétních tabulek nebo sloupců, nebo může mít vybraný přístup pouze k sadě pohledů, které budou také konkrétní.

Tato oprávnění se mohou rychle sčítat a skončit ve velmi dlouhých uživatelských definicích, nebudeme používat definici a další udělení vytváří prostor pro další chyby. V MySQL 8 lze tyto sady oprávnění definovat jako Role a Role mohou být udělovány uživatelům namísto základních oprávnění MySQL. Role jsou souborem oprávnění, která udělujeme uživatelům.

Stejně jako nový uživatel vytvořený pomocí příkazu create user používáme k vytvoření role, jak je uvedeno níže;

VYTVOŘIT ROLE 'reportrole';

Můžete vytvořit více rolí stejně jako níže uvedený dotaz najednou.

CREATE ROLE 'app_ro', 'app_w', 'app_dev';

Nová role vytvořená pomocí příkazu create role nebude mít přiřazena žádná oprávnění, této roli lze udělit oprávnění, jako by to byl normální uživatel.

V níže uvedeném příkladu udělujeme výběrové oprávnění pro všechny tabulky v databázi SPOLEČNOSTI roli reportrole, kterou jsme vytvořili výše.

GRANT SELECT ON company.* to repotrole;

Hvězdička (*) představuje všechny tabulky v databázi společnosti.

Role mohou být přiděleny uživatelům MySQL, v příkladu níže vytváříme ‘company_ro’ u uživatele localhost.

VYTVOŘTE UŽIVATELE, POKUD NEEXISTUJE 'company_ro'@'localhost' IDENTIFIKOVANÉHO S heslem mysql_native_password BY 'company_pass' S MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;

Pamatujte, že uživatel není jen uživatelské jméno, ale spíše jeho uživatel na hostiteli v MySQL a poté mu může být přidělena role repotrole s přidělením repotole uživateli, jak je ukázáno níže.

GRANT 'repotole' to 'company_ro'@'localhost';

Funkce aktuální role MySQL pomáhá určit, jakou roli má aktuální uživatel.

mysql> select current_role();+----------------+| aktuální_role() |+----------------+| ŽÁDNÉ           |+----------------+

Oprávnění role se hromadí, což znamená, že uživatelé budou mít oprávnění popsaná Unionem, která zahrnují základní oprávnění a jejich role. Je velmi důležité, že pokud je uživateli přidělena role, není ve výchozím nastavení aktivována. to uvidíme na konci této části.

Definování povinných rolí

Povinné role jsou role, které budou přidruženy všemi uživateli, ve výchozím nastavení je řízena povinná proměnná.

SET PERSIST required_roles ='role1,role2′;

mysql> SET PERSIST required_roles=’dbt3_read23’;

Povinné role, stejně jako výslovně udělené role, se projeví až po aktivaci. V tomto příspěvku uvidíte, jak aktivovat druhou roli.

Procvičování rolí

Udělejme to prakticky, vytvoříme roli a přidělíme ji více uživatelům, přidáme oprávnění ke všem tabulkám v databázi společnosti a přidáme další výběrová oprávnění na tabulku sys, jak je uvedeno níže.

mysql> vytvořit roli 'repotole';

Udělte tedy oprávnění uživateli s hlášením.

mysql> udělit výběr na společnost.* na 'repotole';mysql> udělit výběr na sys.version na 'repotole';

Pojďme vytvořit uživatelům, user1 na localhost a user2 na localhost s různými hesly

mysql> vytvořit uživatele 'user1'@'localhost' identifikovaného pomocí 'foo';mysql> vytvořit uživatele 'user2'@'localhost' identifikovaného pomocí 'bar';mysql> udělit 'repotole' uživateli 'user1'@'localhost ';mysql> udělit 'repotole' uživateli 'user2'@'localhost';

Jsou vytvořeni, přiřadí jim roli repotrole a poté pomocí show grantů ověří, zda mají roli repotrole.

mysql> zobrazit granty pro 'user1'@'localhost';+--------------------------------- -------------+| Granty pro [email protected]                    |+------------------------------------------ -----+| GRANT POUŽITÍ NA *.* TO `user1`@`localhost`    || GRANT `repotole`@`%` TO `user1`@`localhost` |+--------------------------------- --------------+mysql> zobrazit granty pro 'user2'@'localhost';+--------------------- -------------------------+| Granty pro [email protected]                    |+------------------------------------------ -----+| GRANT POUŽITÍ NA *.* TOMU `user2`@`localhost`    || GRANT `repotole`@`%` TO `user2`@`localhost` |+--------------------------------- --------------+

Dělají tak místo toho, aby museli vysvětlovat obě oprávnění pro oba uživatele, kterým jsme právě vytvořili roli repotrole a tato role přidala obě oprávnění oběma novým uživatelům, které jsme vytvořili.

Zkontrolujte také uživatele pomocí pt-show-grants.

Uživatel1

[[email protected] ~]# pt-show-grants | ND grep user1-- Granty pro 'dbt3_user1'@'%'CREATE USER, POKUD NEEXISTUJE 'dbt3_user1'@'%';ALTER USER 'dbt3_user1'@'%' IDENTIFIKOVANÝ S 'mysql_native_password' 'mysql_native_password' JAKO '*2EQUBBEED901010165554C2924ONE970101 ODEMKNUTÍ ÚČTU HISTORIE HESLA VÝCHOZÍ INTERVAL OPĚTOVNÉHO POUŽITÍ HESLA VÝCHOZÍ HESLO VYŽADUJE SOUČASNÉ VÝCHOZÍ; UDĚLEJTE POUŽÍVÁNÍ NA *.* TO `dbt3_user1`@`%`;GRANT `dbt3_reader`@`%` TO `dbt3_user1-`@`%`user1;-`@`%`user1 'User1'@'localhost'create Uživatel Pokud neexistuje' User1 '@' localhost '; alter user' user1 '@' localhost 'identifikované s' mysql_native_password 'jako'*f3a2a51a9b0f2be2468926b4132313728c250dbf 'Vyžaduje se hesla Passwords Onlocka VÝCHOZÍ HESLO OPĚTOVNÉHO POUŽITÍ VYŽADUJE SOUČASNÉ VÝCHOZÍ; UDĚLEJTE POUŽITÍ NA *.* TO `user1`@`localhost`;GRANT `repotole`@`%` TO `user1`@`localhost`;

Uživatel2

[[email protected] ~]# pt-show-grants | R grep user2-- Granty pro 'dbt3_user2'@'%'CREATE USER, POKUD NEEXISTUJE 'dbt3_user2'@'%';ALTER USER 'dbt3_user2'@'%' IDENTIFIKOVANÝ S 'mysql_native_password' JAKO '*C329read_password' JAKO '*C329297Edb0`0651C0849347DF016 @`%` NEVYŽADOVAT ŽÁDNÉ VYPRŠENÍ HESLA VÝCHOZÍ ÚČET ODEMKNUTÍ HISTORIE HESLA VÝCHOZÍ INTERVAL OPĚTOVNÉHO POUŽITÍ HESLA VÝCHOZÍ HESLO VYŽADOVAT SOUČASNÉ VÝCHOZÍ; UDĚLIT POUŽÍVÁNÍ NA *.* NA `dbt3_user2`@`%`;-- Granty pro 'CTEUSER2'@lohost Uživatel Pokud neexistuje 'User2'@'localhost'; alter uživatele 'user2'@'localhost' identifikované pomocí 'mysql_native_password' jako '*E8D46CE25265E545D225A8A6F1Baf642FEBEE5CB' Vyžadovat žádné heslo výchozí výchozí výchozí heslo; GRANT POUŽITÍ NA *.* TO `user2`@`localhost`;GRANT `repotole`@`%` TO `user2`@`localhost`;

Takže pt-show-grants ukazují roli repotrole pro oba uživatele.

Pokud se chcete naučit, jak používat pt-show-grants, použijte odkaz níže

Nainstalujte a používejte Percona Toolkit na Centos 7

Spusťte znovu klienta MySQL a tentokrát udělte roli repotole uživateli comp1.

mysql> udělte 'repotole' pro 'comp1'@'localhost';

Opusťte klienta MySQL a uživatele Logan comp1, stačí zadat uživatelské jméno a heslo na příkazovém řádku.

Zadání hesla na příkazovém řádku na produkčních systémech není dobrý nápad, protože se zaznamená do historie. Podívejme se na oprávnění pomocí grantů na show.

mysql> zobrazit granty;+----------------------------------------- ------------------------+| Granty pro [email protected]                                      |+------------------------------------------ ------------------------+| GRANT POUŽITÍ NA *.* TO `comp1`@`localhost`                      ||| GRANT `dbt3_read23`@`%`,`repotole`@`%` TO `comp1`@`localhost` |

Uživatel má tedy roli repotrol, ale jeho oprávnění ještě nejsou aktivována. Můžete vidět, že role „dbt3_read23“ již existuje, protože tato role byla nastavena jako PERSIST Povinné_role , když vytvoříte nového uživatele, tato role bude přiřazena automaticky.

Aktivace rolí

K aktivaci role můžeme použít set role repotole a poté zkontrolujeme udělení show.

mysql> nastavit roli 'repotole';Dotaz v pořádku, 0 ovlivněných řádků (0,00 s)mysql> zobrazit granty;+------------------------ ------------------------------------------+| Granty pro [email protected]                                      |+------------------------------------------ ------------------------+| GRANT POUŽITÍ NA *.* TO `comp1`@`localhost`                      || GRANT SELECT ON `company`.* TO `comp1`@`localhost`             || GRANT SELECT ON `sys`.`version` TO `comp1`@`localhost`         || GRANT `dbt3_read23`@`%`,`repotole`@`%` TO `comp1`@`localhost` |+------------------------ ----------------------------------------+

Můžete vidět, že uživatel comp1 již měl oprávnění ke všem tabulkám společnosti, proto jsme pro toto cvičení udělili roli tomuto uživateli, ale role repotole přidá nové oprávnění do tabulky verzí systému.

Můžeme se vrátit na výchozí roli a znovu zkontrolovat oprávnění.

mysql> nastavit roli žádná;Dotaz je v pořádku, 0 ovlivněných řádků (0,00 s)mysql> zobrazit granty;+-------------------------- ---------------------------------------+| Granty pro [email protected]                                      |+------------------------------------------ ------------------------+| GRANT POUŽITÍ NA *.* TO `comp1`@`localhost`                      || GRANT `dbt3_read23`@`%`,`repotole`@`%` TO `comp1`@`localhost` |+------------------------ ----------------------------------------+Tentokrát si uživatel ponechal  dbt3_read23 role, protože to měla jako základní oprávnění, ale už nebude mít oprávnění k tabulce sys.version této verze, protože to pochází z role.

  1. Zpráva o připravenosti na online opravy R12.2

  2. Seznam všech dočasných tabulek v SQLite

  3. Vrácená hodnota z příkazu SQL Server Insert pomocí c#

  4. Jak získat velikost databáze mysql?