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


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';

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.


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;

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';
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.