Dlaczego „PRZYZNANIE UŻYCIA” jest tworzone, gdy po raz pierwszy przyznam uprawnienia użytkownika?

102

Jestem nowy po stronie administratora DBMS i konfigurowałem dziś wieczorem nową bazę danych (używając MySQL), kiedy to zauważyłem. Po przyznaniu użytkownikowi przywileju po raz pierwszy, tworzony jest kolejny grant, który wygląda jak

GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD password

Dokumentacja mówi, że USAGEprzywilej oznacza „brak uprawnień”, więc wnioskuję, że przyznaje pracę hierarchicznie i być może użytkownik musi mieć jakieś przywileje dla wszystkich baz danych, więc służy to jako przechwytywanie wszystkich?

Nie rozumiem też, dlaczego ten wiersz zawiera IDENTIFIED BYklauzulę, skoro utworzona przeze mnie dotacja jej nie zawiera (głównie dlatego, że nie rozumiem, czemu IDENTIFIED BYsłuży klauzula).

Edycja: Przepraszamy, że nie podałem tego pierwotnie, dotacje były

GRANT ALL PRIVILEGES ON database.* TO admin_user
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO user
John M Naglick
źródło
czy możesz nam powiedzieć, jaki grant prowadziłeś
Pentium10,

Odpowiedzi:

145

Jak powiedziałeś, w MySQL USAGEjest synonimem „braku uprawnień”. Z podręcznika MySQL :

Specyfikator uprawnień USAGE oznacza „brak uprawnień”. Jest używany na poziomie globalnym z GRANT do modyfikowania atrybutów konta, takich jak limity zasobów lub cechy SSL bez wpływu na istniejące uprawnienia konta.

USAGEjest sposobem na poinformowanie MySQL, że konto istnieje, bez nadawania mu żadnych prawdziwych uprawnień. Dlatego mają tylko pozwolenie na używanie serwera MySQL USAGE. Odpowiada wierszowi w `mysql`.`user`tabeli bez ustawionych uprawnień.

IDENTIFIED BYKlauzula wskazuje, że ustawione jest hasło dla tego użytkownika. Skąd wiemy, że użytkownik jest tym, za kogo się podaje? oni zidentyfikować się poprzez wysłanie poprawne hasło do swojego konta.

Hasło użytkownika to jeden z atrybutów konta na poziomie globalnym, który nie jest powiązany z określoną bazą danych lub tabelą. Żyje również w `mysql`.`user`stole. Jeśli użytkownik nie ma żadnych innych uprawnień ON *.*, są one nadawane, USAGE ON *.*a ich skrót hasła jest tam wyświetlany. Często jest to efekt uboczny CREATE USERwypowiedzi. Kiedy użytkownik jest tworzony w ten sposób, początkowo nie ma on żadnych uprawnień, więc są jedynie nadawane USAGE.

Espresso_Boy
źródło
10
Myślę, że dzieje się tak, ponieważ mają pozwolenie na uwierzytelnienie. Jeśli spróbujesz użyć niewłaściwego użytkownika i / lub hasła, nie możesz się uwierzytelnić. Użytkownik z uprawnieniem USAGE może uruchamiać określone polecenia SQL, takie jak „wybierz 1 + 1” i „pokaż listę procesów”.
Mircea Vutcovici
11

Próbowałem znaleźć znaczenie GRANT USAGE on *.* TOi znalazłem tutaj. Mogę wyjaśnić, że GRANT USAGE on *.* TO user IDENTIFIED BY PASSWORD passwordzostanie to przyznane podczas tworzenia użytkownika za pomocą następującego polecenia ( CREATE):

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; 

Kiedy przyznajesz uprawnienie w GRANT, nowe uprawnienia zostaną dodane do niego.

5 lat później DBA
źródło
3

Ponadto hasła mysql, gdy nie używają IDENTIFIED BYklauzuli, mogą być wartościami pustymi, jeśli nie są puste, mogą być zaszyfrowane. Ale tak USAGEsłuży do modyfikowania konta poprzez nadanie prostych ograniczeń zasobów, takich jak MAX_QUERIES_PER_HOUR, ponownie można to określić również za pomocą klauzuli WITH, w połączeniu z GRANT USAGE(bez dodanych uprawnień) lub GRANT ALLmożna również określić GRANT USAGEna poziomie globalnym, poziom bazy danych, poziom stołu itp.

s1los
źródło