Czy to normalny zestaw uprawnień MySQL?

9

Używając phpmyadmin do konfiguracji lokalnego testowego wampa, a także prawie w tytule, 3 użytkowników jest oznaczonych jako użytkownik = DOWOLNY, hasło = NIE, na przykład:

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

Żaden z 3 użytkowników nie ma żadnych specjalnych uprawnień do żadnych tabel, więc wygląda na to, że niewiele mogą zrobić. Czy jest to rodzaj ogólnego środka bezpieczeństwa, który wyraźnie stwierdza, że ​​„Każdy” użytkownik, który nie należy do żadnej innej grupy użytkowników, nie ma żadnych uprawnień?

Chris
źródło
To jest naprawdę bardzo dobre pytanie, ponieważ mysql ma domyślne uprawnienia, które nie są publikowane. +1 !!!
RolandoMySQLDBA

Odpowiedzi:

6

W rzeczywistości te trzy konta użytkowników są w rzeczywistości dość niebezpieczne. Stanowią bardzo duże zagrożenie dla testowania baz danych.

Niestety mysql ma pełny dostęp do testowych baz danych. Jak je znaleźć?

Uruchom to zapytanie:

 SELECT user,host,db from mysql.db;

Po instalacji mysql zobaczysz dwa wiersze, które dają pełny dostęp do dowolnej bazy danych o nazwie „test” lub której pierwszych 5 znaków to „test_”.

Dlaczego to jest problem?

Spróbuj uruchomić to polecenie:

$ mysql -u'' -Dtest

Połączysz testową bazę danych bez hasła.

Teraz utwórz tabelę i załaduj ją wierszem:

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

OK, wielka sprawa. Czy mógłbyś podwoić ten stół 30 razy ???

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

Co dostajesz ?? Tabela z 1 073,741,824 wierszami. Z łatwością 4 GB +.

Wyobraź sobie tworzenie dowolnej tabeli o dowolnym rozmiarze. Co powiesz na utworzenie kilku tabel w testowej bazie danych i swobodny dostęp do nich do woli?

Najlepszą rzeczą, jaką możesz zrobić w tych okolicznościach, jest uruchomienie tego zapytania:

DELETE FROM mysql.db;

i zrestartuj mysql. Następnie te trzy konta zostaną prawidłowo wyłączone.

Spróbuj !!!

AKTUALIZACJA 2011-09-12 10:00 EDT

To usunięcie:

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

jest właśnie tym, czego potrzebujesz do pierwszej instalacji. Jeśli jednak masz już użytkowników, możesz uruchomić to:

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

Spowoduje to usunięcie określonych dwóch uprawnień DB.

Jak wspomniałem w mojej odpowiedzi, trzy uprawnienia są bardzo niebezpieczne dla testowych baz danych. Uruchomienie tego polecenia DELETE zneutralizuje te konta, aby mieć pełne prawa do testowania baz danych.

RolandoMySQLDBA
źródło
Dziękuję za wyjaśnienie, ale czy USUŃ Z mysql.db usunie coś jeszcze z tych 3 użytkowników? Nie chcę usuwać żadnych danych / uprawnień oprócz tych 3
Chris
@Chris - zaktualizowałem swoją odpowiedź 3 godziny temu, aby odpowiedzieć na Twój komentarz.
RolandoMySQLDBA
-1

Niebezpieczeństwo związane z prowadzeniem tych anonimowych kont zostało już bardzo dobrze wyjaśnione.

Podręcznik zawiera obszerną listę czynności do wykonania w celu „ Zabezpieczenia początkowych kont MySQL ”.

W szczególności sekcja „Przypisywanie anonimowych haseł do kont” zaleca usunięcie tych kont.

Ponadto rozdział „Zabezpieczanie testowych baz danych” zaleca:

Domyślnie mysql.dbtabela zawiera wiersze, które umożliwiają dostęp dowolnego użytkownika do testbazy danych i innych baz danych o nazwach rozpoczynających się od test_. (...) Oznacza to, że z takich baz danych mogą korzystać nawet konta, które w przeciwnym razie nie miałyby żadnych uprawnień. Jeśli chcesz usunąć dostęp dowolnego użytkownika do testowych baz danych, wykonaj następujące czynności:

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(...) Przy poprzedniej zmianie tylko użytkownicy, którzy mają uprawnienia do globalnej bazy danych lub uprawnienia przyznane jawnie dla testowej bazy danych, mogą z niej korzystać.

W szczególności w systemach innych niż Windows zaleca się uruchomienie mysql_secure_installationskryptu. Wierzę, że instalator Windows oferuje kilka profili instalacyjnych. Niektóre z nich automatycznie wyłączą niepewne ustawienia. Jeśli nie, lista kontrolna będzie musiała zostać uruchomiona ręcznie.

Należy zachować ostrożność w przypadku instalatorów zewnętrznych, takich jak WAMP. Domyślne uprawnienia wskazane w oficjalnym podręczniku MySQL mogą nie zawsze mieć zastosowanie do tych niestandardowych (jak w „poza zakresem instrukcji) instalacji. Oczywiście, dla serwera produkcyjnego, instalacji WAMP i podobnych należy unikać za wszelką cenę .

RandomSeed
źródło
dlaczego głos głosowania na tę odpowiedź?
user12345