Generator uprawnień MySQL
CREATE USER i minimalny GRANT dla jednej bazy danych
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Wynik zawiera placeholder hasła do lokalnej zamiany. Narzędzie nie przyjmuje prawdziwych sekretów. Host % oznacza każdy adres.
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator GRANT MySQL z zasadą minimalnych uprawnień
Generator przygotowuje polecenia CREATE USER i GRANT dla jednego konta, hosta oraz jednej bazy MySQL. Domyślnie zaznaczone jest wyłącznie SELECT, ponieważ każde dodatkowe prawo powinno wynikać z konkretnej potrzeby aplikacji. Nazwa bazy jest cytowana jako identyfikator, a użytkownik, host i hasło jako literały SQL.
Oddzielne konto aplikacyjne ogranicza skutki wycieku danych dostępowych. Zamiast łączyć usługę jako root, można przyznać jej dostęp tylko do wymaganej bazy i operacji. Konfigurację serwera WWW przygotujesz w generatorze .htaccess, usługi kontenerowe opiszesz w generatorze Docker Compose, a zadania administracyjne zaplanujesz przez generator crontab.
Identyfikatory i literały to różne elementy SQL
Nazwa bazy w klauzuli ON jest identyfikatorem i otrzymuje backticki: `app_db`.*. Nazwa konta MySQL składa się z dwóch literałów: 'app_user'@'localhost'. Generator nie przyjmuje prawdziwego hasła: zawsze emituje stały placeholder cytowany jako literał SQL. Użytkownik, host i baza przechodzą ścisłą walidację przed cytowaniem, a znaki sterujące i fragmenty składni są odrzucane.
CREATE USER 'app_user'@'localhost'
IDENTIFIED BY 'CHANGE_ME_STRONG_PASSWORD';
GRANT SELECT ON `app_db`.* TO 'app_user'@'localhost';
Nazwy użytkownika i bazy mają celowo konserwatywny format: litery ASCII, cyfry i podkreślenia. Ograniczenie zmniejsza ryzyko pomyłek między identyfikatorem a fragmentem zapytania. Nie należy usuwać cytowania tylko dlatego, że aktualna nazwa nie zawiera znaków specjalnych.
Minimalne uprawnienia zamiast ALL PRIVILEGES
SELECT wystarcza procesowi raportowemu i jest bezpiecznym ustawieniem startowym. Aplikacja CRUD może dodatkowo potrzebować INSERT, UPDATE i DELETE. Prawa CREATE, DROP, ALTER oraz INDEX powinny należeć raczej do osobnego konta migracyjnego. REFERENCES dotyczy ograniczeń kluczy obcych, a EXECUTE procedur składowanych. Generator nie oferuje ALL PRIVILEGES, aby wybór był jawny.
| Uprawnienie | Typowy cel | Ryzyko |
|---|---|---|
SELECT | Odczyt danych i raporty | Ujawnienie danych dostępnych w bazie |
INSERT, UPDATE, DELETE | Operacje aplikacji | Zmiana lub usunięcie rekordów |
CREATE, ALTER, INDEX | Migracje schematu | Zmiana struktury i wydajności |
DROP | Usuwanie obiektów | Nieodwracalna utrata tabel |
EXECUTE | Procedury składowane | Działanie zależne od definicji procedury |
Host konta MySQL
W MySQL 'app_user'@'localhost' i 'app_user'@'%' są różnymi kontami. localhost ogranicza połączenia do serwera bazy, konkretny adres IP lub nazwa DNS ogranicza źródło sieciowe, a % dopuszcza każdy host. Generator akceptuje samotny znak % jako świadomą decyzję, lecz odrzuca wzorce mieszane, spacje i fragmenty SQL. W środowisku produkcyjnym wybierz najbardziej precyzyjny host i dodatkowo ogranicz ruch firewallem.
CHANGE_ME_STRONG_PASSWORD, który należy zastąpić lokalnie przed wykonaniem, poza przeglądarką i warstwą Livewire.Dlaczego nie ma WITH GRANT OPTION i FLUSH PRIVILEGES
WITH GRANT OPTION pozwala utworzonemu kontu przekazywać innym użytkownikom własne uprawnienia. Zwykłe konto aplikacji nie powinno mieć takiej możliwości, dlatego generator nigdy nie dopisuje tej klauzuli. Po poleceniach zarządzania kontami i grantami wykonywanych przez serwer MySQL nie jest też potrzebne FLUSH PRIVILEGES; instrukcja byłaby zbędna i może wymagać dodatkowego globalnego prawa administracyjnego.
Generator używa CREATE USER bez IF NOT EXISTS. Jeśli konto już istnieje, serwer zgłosi błąd zamiast sprawiać wrażenie, że podane hasło zostało ustawione. Dla istniejącego użytkownika świadomie użyj odpowiedniego ALTER USER, a aktualne prawa sprawdź przez SHOW GRANTS.
Bezpieczna procedura użycia
- Utwórz osobne konto dla jednej aplikacji lub procesu i wskaż najwęższy możliwy host.
- Wybierz jedną bazę oraz tylko te operacje, które wynikają z rzeczywistych zapytań aplikacji.
- Wygeneruj instrukcje i dopiero w lokalnym, chronionym pliku zamień placeholder na silny sekret.
- Przejrzyj wynik jako administrator, wykonaj go w kontrolowanej sesji i usuń sekret z historii powłoki.
- Potwierdź wynik przez
SHOW GRANTS FOR 'user'@'host'oraz test połączenia kontem aplikacji.
Najczęstsze pytania
Czy host % jest bezpieczny?
Oznacza każdy adres źródłowy, więc zwykle jest zbyt szeroki. Używaj go tylko świadomie, z ograniczeniami sieciowymi i silnym uwierzytelnianiem.
Dlaczego domyślnie zaznaczony jest tylko SELECT?
To najwęższy użyteczny wariant dla odczytu. Uprawnienia modyfikujące dane lub schemat trzeba dodać dopiero po potwierdzeniu wymagań aplikacji.
Czy generator może zmienić hasło istniejącego konta?
Nie. CREATE USER celowo zgłosi konflikt. Do kontrolowanej zmiany istniejącego konta użyj ALTER USER bezpośrednio w bezpiecznej sesji administracyjnej.
Po co cytować prostą nazwę app_db?
Cytowanie jednoznacznie oznacza identyfikator i zapobiega kolizjom ze słowami kluczowymi. Walidacja oraz quoting pełnią różne, uzupełniające się role.
Jak później odebrać uprawnienie?
Użyj REVOKE dla dokładnego konta i zakresu, a następnie sprawdź rezultat przez SHOW GRANTS. Nie trzeba wykonywać FLUSH PRIVILEGES.