Jak poznać wszystkich użytkowników, którzy mogą uzyskać dostęp do bazy danych (MySQL)?

19

Jak poznać wszystkich użytkowników, którzy mogą uzyskać dostęp do bazy danych?

użytkownik79483
źródło

Odpowiedzi:

14

Połącz się z instancją mysql jako użytkownik admin (ogólnie jako root) i wydaj następujące polecenie ...

select user from mysql.db where db='DB_NAME';
użytkownik79644
źródło
Właśnie uruchomiłem to przeciwko live MariaDB (widelec MySQL) i zwróciło 2 puste wiersze.
Chris S
1
Jaka jest nazwa twojej bazy danych? musisz zastąpić „DB_NAME” nazwą swojej bazy danych.
user79644 27.04.11
Bieg select user from mysql.dbbez kwalifikacji zwraca również 2 puste wiersze.
Chris S
Nie jestem pewien, jakie są różnice między MariaDB a MySQL, ale to zapytanie działa zgodnie z oczekiwaniami w standardowej instalacji MySQL 5.
rvf
To tylko część odpowiedzi na PO. Pole mysql.user.db może zawierać znaki wieloznaczne pasujące do kilku baz danych. używając proponowanego zapytania, pomija je. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514
10

Odpowiedź użytkownika 79644 zapewnia użytkownikom z uprawnieniami na poziomie bazy danych, ale będzie brakować użytkownikom z uprawnieniami tylko na poziomie tabeli, kolumny lub procedury. Aby znaleźć je wszystkie, użyj następujących instrukcji:

SELECT user,host FROM db WHERE db='name';
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';

Przynajmniej w MySQL 5.5 wydaje się, że posiadanie uprawnień na poziomie kolumny oznacza, że ​​masz uprawnienia na poziomie tabeli. Posiadanie uprawnień na poziomie tabeli nie oznacza, że ​​masz uprawnienia na poziomie bazy danych. Nie jestem pewien co do uprawnień na poziomie procedury.

Scott Duckworth
źródło
1
To tylko część odpowiedzi. Pole mysql.user.db może zawierać znaki wieloznaczne pasujące do kilku baz danych. za pomocą proponowanego zapytania brakuje ich. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514
Która baza danych DostajęERROR 1046 (3D000): No database selected
użytkownik124384,
@ user124384 W odpowiedzi nie powiedziano, że powinieneś korzystać z mysqlbazy danych. Tam przechowywane są wszystkie dane używane przez MySQL. Albo wydaj polecenie USE mysql;dodania nazwy bazy danych do nazw tabel, takich jak FROM mysql.dblubFROM mysql.tables_priv
Gypsy Spellweaver
8
# current users that access the db
mysql> show processlist;
+-----+------+-----------+------+---------+------+-------+------------------+
| Id  | User | Host      | db   | Command | Time | State | Info             |
+-----+------+-----------+------+---------+------+-------+------------------+
| 214 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+-----+------+-----------+------+---------+------+-------+------------------+

# who can access what at anytime and his privilege level
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

# what privileges are available
mysql> show privileges;
silviud
źródło
2
pokaż granty pokazuje tylko granty bieżącego (zalogowanego) użytkownika
nl-x
jako root możesz także zrobić granty wystawowe dla
Rowan Hawkins
2

Należy pamiętać, że MySQLGRANT dla baz danych może zawierać znaki wieloznaczne . Należy to uwzględnić przy użyciu LIKEw zapytaniu:

SELECT user,host FROM db WHERE 'name' LIKE db;
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';
użytkownik4514
źródło