sql >> Databáze >  >> RDS >> MariaDB

Správa uživatelů databáze:Správa rolí pro MariaDB

Je to vždy bolest hlavy... musíte přidat novou uživatelskou roli nebo změnit některá oprávnění a musíte jí přiřadit jedno... od... jednoho. Jedná se o běžnou povinnost, zejména ve velkých organizacích nebo ve společnosti, kde máte složitou strukturu oprávnění, nebo i když musíte spravovat vysoký počet uživatelů databáze.

Řekněme například, že potřebujete přidat oprávnění UPDATE ke konkrétní databázi pro celý tým QA, pokud je tým pětičlenný, není problém, ale pokud je jim 50... nebo 100... přitvrdit. Samozřejmě pro to můžete vždy napsat skript, ale tímto způsobem existuje vždy riziko.

V tomto blogu uvidíme, jak můžeme vyřešit tento problém se správou uživatelů databáze pomocí rolí a konkrétních tipů, jak je používat s MariaDB.

Co je to role?

V databázovém světě je role skupina oprávnění, která mohou být přiřazena jednomu nebo více uživatelům a uživateli může být přiřazena jedna nebo více rolí. Pro srovnání, je to jako skupina na OS Linux.

Pokud vidíme předchozí příklad o oprávnění UPDATE v týmu QA, pokud máme vytvořenou roli QA a všichni členové QA mají tuto roli přiřazenou, nezáleží na počtu členů, stačí změnit oprávnění na této roli QA a bude šířena pro všechny uživatele QA.

Role na MariaDB

Chcete-li spravovat role na MariaDB, musíte vytvořit roli pomocí příkazu CREATE ROLE, přiřadit oprávnění k této roli pomocí příkazu GRANT a poté přidělit oprávnění uživateli, aby mohl tuto roli používat. Můžete také nastavit výchozí roli, takže ji uživatel převezme při připojování.

Jako uživatel databáze musíte nastavit roli při přístupu k databázi (pokud neexistuje výchozí role) a v případě potřeby ji můžete změnit pomocí příkazu SET ROLE.

Ze strany aplikace byste měli být schopni nastavit roli (nebo použít výchozí) před dotazem, aby to fungovalo, takže ve starých aplikacích může být implementace složitá.

Podívejme se na některé specifikace rolí na MariaDB.

  • Pro aktuálního uživatele může být aktivní pouze jedna role ve stejnou dobu.
  • Od MariaDB 10.1 máme výchozí roli. Tato role je automaticky povolena, když se uživatel připojí.
  • Role jsou uloženy v paměti.

Jak zkontrolovat role

Na MariaDB existuje několik způsobů, jak to zkontrolovat:

  • ZOBRAZIT GRANTY [ PRO (uživatele | role) ]:Seznam grantů pro aktuálního uživatele nebo pro konkrétního uživatele.
    MariaDB [testing]> SHOW GRANTS for [email protected]'%';
    +----------------------------------------------------------------------------------------------------------+
    | Grants for [email protected]%                                                                                   |
    +----------------------------------------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'testuser'@'%' IDENTIFIED BY PASSWORD '*FAAFFE644E901CFAFAEC7562415E5FAEC243B8B2' |
    +----------------------------------------------------------------------------------------------------------+
    1 row in set (0.000 sec)
  • VYBERTE uživatele FROM mysql.user WHERE is_role='Y':Seznam rolí vytvořených v databázi.
    MariaDB [testing]> SELECT user FROM mysql.user WHERE is_role='Y';
    +--------+
    | user   |
    +--------+
    | qateam |
    +--------+
    1 row in set (0.000 sec)
  • SELECT * FROM information_schema.applicable_roles:Jde o seznam dostupných rolí pro aktuálního uživatele.
    MariaDB [testing]> SELECT * FROM information_schema.applicable_roles;
    +-------------+-----------+--------------+------------+
    | GRANTEE     | ROLE_NAME | IS_GRANTABLE | IS_DEFAULT |
    +-------------+-----------+--------------+------------+
    | [email protected]%  | qateam    | NO           | NO         |
    +-------------+-----------+--------------+------------+
    1 row in set (0.000 sec)
  • SELECT * FROM information_schema.enabled_roles:Seznam aktuálních aktivních rolí.
    MariaDB [testing]> SELECT * FROM information_schema.enabled_roles;
    +-----------+
    | ROLE_NAME |
    +-----------+
    | qateam    |
    +-----------+
    1 row in set (0.000 sec)
  • SELECT * FROM mysql.roles_mapping:Seznam vztahů mezi rolemi a uživatelskými granty.
    MariaDB [testing]> SELECT * FROM mysql.roles_mapping;
    +-----------+-----------+--------+--------------+
    | Host      | User      | Role   | Admin_option |
    +-----------+-----------+--------+--------------+
    | localhost | root      | qateam | Y            |
    | %         | testuser  | qateam | N            |
    +-----------+-----------+--------+--------------+
    2 rows in set (0.000 sec)

Jak spravovat role na MariaDB

Podívejme se na příklad, jak to spravovat na MariaDB. V tomto případě použijeme verzi MariaDB 10.3 běžící na CentOS 7.

Nejprve vytvořte nového uživatele databáze:

MariaDB [testing]> CREATE USER [email protected]'%' IDENTIFIED BY 'PASSWORD';

Pokud zkontrolujeme granty pro tohoto nového uživatele, uvidíme něco takového:

MariaDB [testing]> SHOW GRANTS for [email protected]'%';
+----------------------------------------------------------------------------------------------------------+
| Grants for [email protected]%                                                                                   |
+----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'testuser'@'%' IDENTIFIED BY PASSWORD '*FAAFFE644E901CFAFAEC7562415E5FAEC243B8B2' |
+----------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)

Nyní se zkusme přihlásit s tímto uživatelem a připojit se k testovací databázi:

$ mysql -utestuser -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 54
Server version: 10.3.16-MariaDB-log MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> use testing
ERROR 1044 (42000): Access denied for user 'testuser'@'%' to database 'testing'

Jak jsme viděli, s tímto uživatelem se nemůžeme připojit k testovací databázi, takže nyní vytvoříme roli „qateam“ s oprávněními a tuto roli přiřadíme tomuto novému uživateli.

MariaDB [testing]> CREATE ROLE qateam;
Query OK, 0 rows affected (0.001 sec)
MariaDB [testing]> GRANT SELECT,INSERT,UPDATE,DELETE ON testing.* TO qateam;
Query OK, 0 rows affected (0.000 sec)

Pokud se pokusíme použít tuto roli bez GRANT, zobrazí se následující chyba:

MariaDB [(none)]> SET ROLE qateam;
ERROR 1959 (OP000): Invalid role specification `qateam`

Nyní tedy spustíme GRANT, aby jej uživatel mohl používat:

MariaDB [(none)]> GRANT qateam TO [email protected]'%';
Query OK, 0 rows affected (0.000 sec)

Nastavte roli na aktuálního uživatele:

MariaDB [(none)]> SET ROLE qateam;
Query OK, 0 rows affected (0.000 sec)

A zkuste se dostat do databáze:

MariaDB [(none)]> use testing;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [testing]>

Můžeme zkontrolovat granty pro aktuálního uživatele:

MariaDB [(none)]> SHOW GRANTS for [email protected]'%';
+----------------------------------------------------------------------------------------------------------+
| Grants for [email protected]%                                                                                   |
+----------------------------------------------------------------------------------------------------------+
| GRANT qateam TO 'testuser'@'%'                                                                          |
| GRANT USAGE ON *.* TO 'testuser'@'%' IDENTIFIED BY PASSWORD '*FAAFFE644E901CFAFAEC7562415E5FAEC243B8B2' |
+----------------------------------------------------------------------------------------------------------+
2 rows in set (0.000 sec)

A současná role:

MariaDB [testing]> SELECT CURRENT_ROLE;
+--------------+
| CURRENT_ROLE |
+--------------+
| qateam       |
+--------------+
1 row in set (0.000 sec)

Zde můžeme vidět udělení pro roli qateam, a to je vše, nemáme oprávnění přidělené přímo uživateli, máme oprávnění pro roli a uživatel si je odtamtud přebírá.

Závěr

Správa rolí nám může usnadnit život ve velkých společnostech nebo databázích s vysokým počtem uživatelů, kteří k nim přistupují. Chceme-li ji používat z naší aplikace, musíme vzít v úvahu, že ji musí umět spravovat i aplikace.


  1. Získejte velikost všech databází v PostgreSQL (psql)

  2. Přečtěte si, jak zálohovat databázi MySQL

  3. VLDB ve věku 20 let:Budete potřebovat větší…

  4. Když je to naléhavé