MySQL SHOW GRANTS
pokazuje uprawnienia bieżącego użytkownika.
Czy istnieje sposób na zalogowanie się jako root i pokazanie uprawnień wszystkich użytkowników?
mysql
permissions
Adam Matan
źródło
źródło
ERROR 1146 (42S02): Table 'common_schema.sql_show_grants' doesn't exist
information_schema.user_privileges
?EDYTOWAĆ:
Jak wspomniała Shlomi Noach:
źródło
information_schema.user_privileges
tylko wymienia przywileje na poziomie użytkownika, takie jakSUPER
,RELOAD
itd. Zawiera też wszechstronną dotacje DML podobaSELECT
. Robi nie listy, table-sepcific, kolumn specyficzne rutynowe specyficzne przywileje specyficzne dla bazy danych. Dlatego grantyGRANT SELECT ON mydb.* TO myuser@localhost
nie są wyświetlaneinformation_schema.user_privileges
.common_schema
Rozwiązanie przedstawione powyżej dane kruszyw zuser_privileges
i innych tabel w celu uzyskania pełnego obrazu.Ten fragment powłoki Linuksa zapętla się nad wszystkimi użytkownikami MySQL i wykonuje POKAŻ GRANTY dla każdego:
Działa najlepiej, jeśli możesz połączyć się z MySQL bez hasła.
Dane wyjściowe są sformatowane, aby można je było uruchomić w powłoce MySQL. Uwaga: Dane wyjściowe zawierają również uprawnienia użytkownika root MySQL i hasło! Usuń te linie, jeśli nie chcesz, aby użytkownik root MySQL został zmieniony.
źródło
mysql --defaults-file=/auth/root-mysql.cnf --batch --skip-column-names --execute "SELECT User, Host from mysql.user" | while read user host; do echo "SHOW GRANTS FOR '${user}'@'${host}';"; done | mysql --defaults-file=/auth/root-mysql.cnf --batch | sed 's/^Grants for/-- Grants for/'
select * from mysql.user;
Może dać Ci listę użytkowników i uprawnienia przypisane do każdego z nich, wymaga jednak dostępu do
mysql.user
tabeli iroot
użytkownik ją ma.źródło
mysql.db
. Uprawnienia do określonych tabel sąmysql.tables_priv
włączone i tak dalej. To nie jest takie proste.select * from mysql.user
do crackstation.net i zobacz niezakończone dane wyjściowe.Jedna linijka (zmiana
-uroot
na-u$USER_NAME
do użytku z innym użytkownikiem) w uniksowym bashu (z powodu backticks):lub bez znaków wstecznych iz wbudowanym hasłem (spacja przed poleceniem wyklucza go z historii Bash w Ubuntu):
W systemie Windows:
źródło
Jeśli możesz uruchomić następujące instrukcje SELECT bez błędu:
wtedy możesz użyć następującego kodu (poniżej), napisanego w składni .sql.
Zaprojektowałem to zapytanie, próbując odbudować instrukcje GRANT dla wszystkich istniejących uprawnień (do częstej konserwacji podczas migracji bazy danych). Należy poradzić sobie z kilkoma problemami, takimi jak łączenie hasła użytkownika, ale ponieważ często aktualizujemy hasła, nie było to przedmiotem tego projektu.
Z przyjemnością odpowiem / zweryfikuję wszelkie pytania lub wątpliwości
źródło
To da ci lepszy widok ...
źródło
Polecenie
SHOW GRANTS [FOR user]
może pokazywać dowolnego użytkownika. Zobacz tutaj po więcej szczegółów.źródło
Jak wspomniano w tej odpowiedzi , można uruchomić następujący zestaw poleceń, aby wyświetlić uprawnienia wszystkich użytkowników dotyczące bazy danych, tabeli, kolumny i procedury. Pamiętaj, że musisz uruchomić to z powłoki, a nie z wiersza poleceń MySQL.
Zaletą tego podejścia jest to, że nie trzeba instalować dodatkowego oprogramowania.
źródło
Jeśli często administrujesz bazami danych, prawdopodobnie będziesz chciał zachować wąskie uprawnienia. Możesz użyć procedury składowanej, aby szybko uruchomić sprawdzanie. Ten przykład działa w mariadbie. Może być konieczne dostosowanie do pracy ze standardową wersją mysql.
Korzystając z odpowiedzi Mansur Ali, z drobnymi poprawkami zmieniającymi kolejność kolumn i dodając kolejność, aby lepiej uporządkować dane wyjściowe.
Korzystanie z logowania roota:
Zamiast tego możesz zmienić procedurę sprawdzania tabeli mysql.user.
Użycie przy użyciu loginu root:
Użyłem mysql workbench na Ubuntu, aby uruchomić procedurę tworzenia części tej odpowiedzi.
Na marginesie i trochę poza tym tematem, ale możesz również mieć procedurę pokazującą nieznanych hostów lub użytkowników. Przykład dla nieznanych hostów:
Uwaga dotycząca użycia: Podaj ciąg hostów oddzielonych przecinkami, aby użyć tylko jednego zestawu „”:
Można również zmienić kolumnę, włączając inny parametr do procedury i wywołując ją za pomocą ShowUnknownHosts (użytkownik, „użytkownik1, użytkownik2”); na przykład.
źródło