Průvodce správou uživatelů MariaDB: Jak vytvářet uživatele, udělovat oprávnění a opravovat běžné chyby

目次

Introduction

1.1 Chcete se naučit, jak vytvářet uživatele v MariaDB?

Už jste někdy chtěli vytvořit nového uživatele v MariaDB a nastavit mu odpovídající oprávnění?
Například jste mohli narazit na následující situace:

  • Spustili jste CREATE USER, ale nemůžete se přihlásit
  • Udělili jste oprávnění pomocí GRANT, ale nebyla aplikována
  • Nejste si jisti, jak nastavit správná oprávnění v produkčním prostředí
  • Chcete bezpečně odstranit nepotřebné uživatele

Pokud čelíte těmto problémům, tento článek vám pomůže plně pochopit celý proces od vytváření uživatelů po správu oprávnění a mazání uživatelů v MariaDB.

1.2 Co se v tomto článku naučíte

Tento článek poskytuje podrobný výklad následujících aspektů správy uživatelů v MariaDB:

  • Jak vytvářet a mazat uživatele v MariaDB
  • Jak udělovat a spravovat oprávnění (nejlepší postupy pro správné nastavení práv)
  • Běžné chyby a jak je řešit
  • Nejlepší provozní postupy pro vývojová i produkční prostředí

Všechny témata jsou vysvětleny s příklady SQL vhodnými pro začátečníky, takže se můžete učit a zároveň cvičit.

1.3 Cílová skupina

Tento článek je určen pro:

  • Začátečníky: Lidi, kteří se poprvé učí správu uživatelů v MariaDB
  • Inženýry: Lidi, kteří chtějí nastavit správná oprávnění ve vývojových prostředích
  • Správce databází: Lidi, kteří usilují o zvýšení bezpečnosti v produkčních prostředích

I když jste v MariaDB nováčci, tento průvodce poskytuje praktické informace, které můžete sebejistě použít v reálných operacích.

Creating Users in MariaDB

2.1 Základní příkaz pro vytvoření uživatele

V MariaDB vytvoříte nového uživatele pomocí příkazu CREATE USER.
Uživatelské jméno a heslo můžete zadat následující syntaxí:

CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';

Například pro vytvoření uživatele yamada na localhost s heslem password123:

CREATE USER 'yamada'@'localhost' IDENTIFIED BY 'password123';

Po provedení tohoto příkazu bude uživatel yamada vytvořen a bude se moci přihlásit pouze z localhostu (přihlášení povoleno jen na samotném serveru).

2.2 Příklady vytvoření uživatelů podle použití

Při vytváření uživatelů v MariaDB můžete pomocí pole hostname určit, odkud jsou povoleny připojení.
Je důležité nastavení přizpůsobit vašemu konkrétnímu scénáři.

CaseCommand ExampleDescription
Local Environment (Development)CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'password';User dedicated to development environment
Allow Remote ConnectionsCREATE USER 'remote_user'@'%' IDENTIFIED BY 'password';Allow connections from any host (security caution required)
Allow Connection from Specific IPCREATE USER 'admin'@'192.168.1.100' IDENTIFIED BY 'password';Restrict access to a specific IP address only
Allow Connection from Specific SubnetCREATE USER 'network_user'@'192.168.1.%' IDENTIFIED BY 'password';Allow only machines with IP addresses in the 192.168.1.x range

Použití '%' umožňuje připojení ze všech hostitelů, ale
to představuje značné bezpečnostní riziko a nedoporučuje se v produkčním prostředí.
V produkci je nejlepší specifikovat IP adresy nebo nastavit přístup přes VPN.

2.3 Důležité poznámky při vytváření uživatelů

Existuje několik důležitých úvah, které je třeba při vytváření uživatelů mít na paměti.

(1) Kontrola existujících uživatelů

Před vytvořením uživatele je nutné ověřit, že stejný uživatel již neexistuje.
Seznam aktuálně registrovaných uživatelů získáte následujícím příkazem:

SELECT user, host FROM mysql.user;

Příklad výstupu:

+---------+-----------+
| user    | host      |
+---------+-----------+
| root    | localhost |
| yamada  | localhost |
+---------+-----------+

Pokud už existuje uživatel se stejným username@hostname, provedení CREATE USER způsobí chybu.

(2) Co dělat, pokud uživatel již existuje

V MariaDB nemůžete přepsat existujícího uživatele jeho opětovným vytvořením.
Pokud stejný uživatel již existuje, použijte jeden z následujících přístupů:

  • Změňte heslo existujícího uživatele
    ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';
    
  • Odstraňte nepotřebného uživatele a vytvořte nového
    DROP USER 'yamada'@'localhost';
    CREATE USER 'yamada'@'localhost' IDENTIFIED BY 'password123';
    

Managing Privileges in MariaDB

3.1 Grant Privileges

Basic Syntax

V MariaDB můžete udělit oprávnění uživateli pomocí příkazu GRANT.

GRANT privilege ON database_name.table_name TO 'username'@'hostname';

Například pro udělení všech oprávnění na test_db uživateli yamada:

GRANT ALL PRIVILEGES ON test_db.* TO 'yamada'@'localhost';

Význam tohoto příkazu:

  • ALL PRIVILEGES : Uděluje všechna oprávnění
  • test_db.* : Platí pro všechny tabulky v databázi test_db
  • 'yamada'@'localhost' : Platí pro uživatele yamada přihlašujícího se z localhost

3.2 Běžně používaná oprávnění

V MariaDB můžete udělit oprávnění, jako následující:

PrivilegeDescription
ALL PRIVILEGESGrant all privileges
SELECTRead data
INSERTInsert data
UPDATEUpdate data
DELETEDelete data
CREATECreate new tables or databases
DROPDrop databases or tables
GRANT OPTIONGrant privileges to other users
ALTERModify table structure
EXECUTEExecute stored procedures or functions
RELOADReload server settings

Pokud chcete povolit pouze specifické operace, doporučuje se udělit oprávnění individuálně spíše než udělit všechno.

3.3 Nastavení oprávnění podle použití

Je důležité přiřadit správná oprávnění pro každou situaci.

SituationRecommended PrivilegesCommand Example
WordPress OperatorSELECT, INSERT, UPDATE, DELETEGRANT SELECT, INSERT, UPDATE, DELETE ON wp_db.* TO 'wp_user'@'localhost';
Developer (Development Environment)ALL PRIVILEGESGRANT ALL PRIVILEGES ON dev_db.* TO 'dev_user'@'%';
Read-Only UserSELECT onlyGRANT SELECT ON analytics_db.* TO 'readonly'@'localhost';
Database Administrator (Production Environment)ALL PRIVILEGES (restricted)GRANT ALL PRIVILEGES ON production_db.* TO 'admin'@'localhost';

V produkčních prostředích se vyhněte udělování ALL PRIVILEGES příliš snadno.

3.4 Kontrola udělených oprávnění

Pro kontrolu udělených oprávnění použijte příkaz SHOW GRANTS.

SHOW GRANTS FOR 'username'@'hostname';

Například pro kontrolu oprávnění pro uživatele yamada:

SHOW GRANTS FOR 'yamada'@'localhost';

Příklad výstupu:

+-----------------------------------------------------------------------------------+
| Grants for yamada@localhost                                                       |
+-----------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON test_db.* TO 'yamada'@'localhost'                |
+-----------------------------------------------------------------------------------+

Toto ukazuje oprávnění aktuálně udělená uživateli.

3.5 Odvolání oprávnění (Odstranění oprávnění)

Pro odvolání specifických oprávnění od uživatele použijte příkaz REVOKE.

Základní syntaxe

REVOKE privilege ON database_name.table_name FROM 'username'@'hostname';

Například pro odvolání oprávnění UPDATE od uživatele yamada:

REVOKE UPDATE ON test_db.* FROM 'yamada'@'localhost';

Odvolání všech oprávnění

REVOKE ALL PRIVILEGES ON *.* FROM 'yamada'@'localhost';

3.6 Co dělat, když změny oprávnění nezačnou platit

V MariaDB se změny oprávnění nemusí aplikovat okamžitě. Pokud se to stane, spusťte následující příkaz:

FLUSH PRIVILEGES;

Spuštění tohoto příkazu vynutí MariaDB k načtení tabulek oprávnění, takže vaše změny začnou platit okamžitě.

Mazání uživatelů v MariaDB

4.1 Smazání uživatele

Pro smazání uživatele MariaDB použijte příkaz DROP USER.

Základní syntaxe

DROP USER 'username'@'hostname';

Například pro smazání uživatele yamada z localhost:

DROP USER 'yamada'@'localhost';

Po provedení tohoto příkazu bude uživatel yamada úplně odstraněn z systému MariaDB.

4.2 Co zkontrolovat před smazáním uživatele

Před smazáním uživatele byste měli provést některé důležité kontroly.
Buďte opatrní, abyste omylem nesmazali nezbytné uživatele.

(1) Kontrola, zda cílový uživatel existuje

V MariaDB se pokus o smazání neexistujícího uživatele způsobí chybu.
Spusťte následující příkaz pro potvrzení, že cílový uživatel existuje:

SELECT user, host FROM mysql.user;

Příklad výstupu:

+---------+-----------+
| user    | host      |
+---------+-----------+
| root    | localhost |
| yamada  | localhost |
| admin   | 192.168.1.100 |
+---------+-----------+

Pokud se v tomto seznamu objeví uživatel yamada, uživatel může být smazán.

(2) Kontrola, zda je uživatel aktuálně připojen

V MariaDB, pokud uživatel, kterého mažete, má aktuálně aktivní relaci,
smazání nemusí začít platit okamžitě pro tuto relaci.
Zkontrolujte, zda je uživatel aktivní pomocí následujícího příkazu:

SELECT user, host FROM information_schema.processlist;

Příklad výstupu:

+---------+-----------+
| user    | host      |
+---------+-----------+
| yamada  | localhost |
| root    | localhost |
+---------+-----------+

V tomto příkladu je uživatel yamada aktuálně aktivní, takže byste měli ukončit relaci před smazáním.

(3) Vynucené ukončení relace

Můžete vynutit ukončení specifické relace pomocí příkazu KILL.

  1. Nejprve zkontrolujte ID procesu (sloupec ID):
    SELECT id, user, host FROM information_schema.processlist;
    

Příklad výstupu:

+----+---------+-----------+
| id | user    | host      |
+----+---------+-----------+
| 10 | yamada  | localhost |
| 11 | root    | localhost |
+----+---------+-----------+
  1. Pokud má yamada ID procesu 10, ukončete ho pomocí:
    KILL 10;
    

4.3 Vyčištění po smazání

Po smazání uživatele mohou v databázi zůstat reziduální informace o oprávněních.
V takových případech spusťte FLUSH PRIVILEGES k osvěžení tabulek oprávnění.

FLUSH PRIVILEGES;

Spustěním tohoto příkazu zajistíte, že informace smazaného uživatele jsou plně odstraněny z databázového systému.

4.4 Důležité poznámky při mazání uživatelů

Při mazání uživatelů si pamatujte následující body:

  1. Smazaní uživatelé nelze obnovit
  • Jakmile spustíte DROP USER, smazaný uživatel nelze obnovit.
  • Pokud byl smazán omylem, musíte uživatele znovu vytvořit pomocí CREATE USER.
  1. Oprávnění mohou vyžadovat převod
  • Pokud byl smazaný uživatel zodpovědný za kritické databázové operace, musíte předem převést potřebná oprávnění na jiného vhodného uživatele.
  1. Buďte opatrní v produkčních prostředích
  • V produkčních prostředích může náhlé smazání způsobit výpadek systému nebo chyby.
  • Silně se doporučuje předem analyzovat dopad a vytvořit zálohu.

Běžné chyby a řešení (FAQ)

Při správě uživatelů v MariaDB můžete narazit na různé chyby.
Tato sekce vysvětluje nejběžnější chyby, jejich příčiny a jak je řešit.

5.1 FAQ pro začátečníky

Otázka 1: Jaký je rozdíl mezi správou uživatelů v MariaDB a MySQL?

MariaDB a MySQL obecně používají stejnou syntaxi, ale existují některé rozdíly ve funkcích.

Comparison ItemMySQLMariaDB
CREATE USERSupportedSupported
SHOW GRANTS FORSupportedSupported
DROP USERSupportedSupported
CREATE ROLEMySQL 8.0 and laterMariaDB 10.0 and later

MariaDB podporuje CREATE ROLE, což umožňuje správu uživatelů na základě rolí.

Otázka 2: Jaký je rozdíl mezi localhost a %?

V správě uživatelů MariaDB je specifikace hostname klíčová.

  • localhost : Umožňuje připojení pouze z lokálního stroje
  • % : Umožňuje připojení z jakéhokoli hostitele (bezpečnostní riziko)
  • 192.168.1.100 : Umožňuje připojení pouze z specifické IP adresy
  • 192.168.1.% : Umožňuje připojení pouze z specifické podsítě (192.168.1.*)

5.2 Řešení problémů

Otázka 3: Jak opravit „ERROR 1396 (HY000): Operation CREATE USER failed“

Příčina: Specifikovaný uživatel již existuje, takže nového uživatele nelze vytvořit.

Řešení: Zkontrolujte, zda uživatel existuje, a pokud je to nutné, smažte ho nebo upravte.

  1. Zkontrolujte existující uživatele
    SELECT user, host FROM mysql.user WHERE user='yamada';
    
  1. Smažte, pokud není nutný
    DROP USER 'yamada'@'localhost';
    
  1. Místo toho změňte heslo
    ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';
    

Otázka 4: Oprávnění udělená pomocí GRANT nejsou aplikována

Příčina: Cache oprávnění MariaDB nebyl osvěžen.

Řešení: Spusťte FLUSH PRIVILEGES k načtení oprávnění.

FLUSH PRIVILEGES;

Otázka 5: Nelze se připojit na dálku, i když používáte %

Příčina: Vzdálená připojení mohou být omezena v konfiguračním souboru MariaDB.

Řešení:

  1. Upravte konfigurační soubor /etc/mysql/my.cnf (nebo /etc/mysql/mariadb.conf.d/50-server.cnf) a změňte hodnotu bind-address na 0.0.0.0.
    bind-address = 0.0.0.0
    
  1. Restartujte MariaDB
    sudo systemctl restart mariadb
    
  1. Použijte % v příkazu GRANT k povolení připojení
    GRANT ALL PRIVILEGES ON test_db.* TO 'remote_user'@'%' IDENTIFIED BY 'password';
    

Q6: Získání chyby „Access denied for user ‚user’@’host’“

Příčina: Uživatel nemá odpovídající oprávnění, nebo je heslo nesprávné.

Řešení:

  1. Zkontrolujte aktuální oprávnění
    SHOW GRANTS FOR 'user'@'host';
    
  1. Udělejte vhodná oprávnění
    GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'host';
    
  1. Ověřte, že se přihlašujete se správným heslem
    mysql -u user -p
    

Závěr

Správa uživatelů MariaDB je nezbytná pro zlepšení bezpečnosti databáze a provozní efektivity.
V tomto článku jsme podrobně pokryli vytváření uživatelů, správu oprávnění, mazání uživatelů a běžné chyby s jejich řešeními.

6.1 Shrnutí

① Vytváření uživatelů v MariaDB

  • Vytvářejte nové uživatele pomocí příkazu CREATE USER
  • Omezujte přístup pomocí @'hostname'
  • Vždy zkontrolujte existující uživatele před vytvořením nových

② Správa oprávnění v MariaDB

  • Používejte GRANT k přiřazení minimálních potřebných oprávnění
  • Používejte SHOW GRANTS k ověření aktuálních oprávnění
  • Používejte REVOKE k odebrání zbytečných oprávnění
  • Aplikujte změny pomocí FLUSH PRIVILEGES

③ Mazání uživatelů v MariaDB

  • Mazat uživatele pomocí příkazu DROP USER
  • Zkontrolujte aktivní relace před smazáním
  • Vyčistěte mezipaměť oprávnění pomocí FLUSH PRIVILEGES

④ Běžné chyby a řešení

  • ERROR 1396 (HY000)Zkontrolujte existující uživatele a případně je odstraňte
  • Změny oprávnění nebyly aplikovány → Spusťte FLUSH PRIVILEGES
  • Access denied for userOvěřte oprávnění a heslo
  • Nelze se připojit vzdáleně pomocí %Upravte konfiguraci bind-address

6.2 Nejlepší postupy pro správu uživatelů MariaDB

  • Udělujte pouze minimální potřebná oprávnění
  • Vyhněte se neuváženému udělování ALL PRIVILEGES
  • Omezujte produkční uživatele na SELECT, INSERT, UPDATE, DELETE, kde je to možné
  • Vždy ověřujte změny oprávnění
  • Používejte SHOW GRANTS k potvrzení správnosti konfigurace
  • Analyzujte dopad před smazáním uživatelů
  • Buďte opatrní v produkci a vytvářejte zálohy
  • Uplatňujte silné bezpečnostní postupy
  • Aplikujte IP omezení pro vzdálená připojení
  • Nastavte silné heslo pro uživatele root
  • Pravidelně odstraňujte zbytečné uživatele a oprávnění

6.3 Závěrečné myšlenky

V tomto průvodci jste se naučili vše od základů po pokročilé techniky správy uživatelů MariaDB.
Využijte tyto znalosti k dosažení bezpečné a efektivní správy databáze.

Budeme i nadále sdílet užitečné informace o MariaDB, takže zůstaňte naladěni! 🚀