Jak poznać wszystkich użytkowników, którzy mogą uzyskać dostęp do bazy danych?
Jak poznać wszystkich użytkowników, którzy mogą uzyskać dostęp do bazy danych?
Odpowiedzi:
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';
select user from mysql.db
bez kwalifikacji zwraca również 2 puste wiersze.
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.
ERROR 1046 (3D000): No database selected
mysql
bazy 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.db
lubFROM mysql.tables_priv
# 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;
Należy pamiętać, że MySQLGRANT
dla baz danych może zawierać znaki wieloznaczne . Należy to uwzględnić przy użyciu LIKE
w 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';