如何知道所有可以访问数据库的用户(MySQL)?


Answers:


14

以管理员用户(通常以root用户身份)连接到mysql实例,并给出以下命令...

select user from mysql.db where db='DB_NAME';

我只是针对一个实时的MariaDB(MySQL fork)运行了它,它返回了2个空白行。
克里斯S

1
您的数据库名称是什么?您需要用数据库名称替换“ DB_NAME”。
user79644 2011年

select user from mysql.db无条件运行也会返回2个空白行。
克里斯S

不确定MariaDB和MySQL之间的区别是什么,但是该查询在标准MySQL 5安装上是否按预期运行。
rvf

这只是对OP的答案的一部分。mysql.user.db字段可以包含与多个数据库匹配的通配符。使用建议的查询会错过它们。dev.mysql.com/doc/refman/5.0/en/grant.html
user4514

10

user79644的答案使用户具有数据库级特权,但是会错过仅具有表级,列级或过程级特权的用户。若要查找所有这些,请使用以下语句:

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

至少在MySQL 5.5中,似乎具有列级特权意味着您具有表级特权。拥有表级特权并不意味着您具有数据库级特权。不确定过程级特权。


1
这只是答案的一部分。mysql.user.db字段可以包含与多个数据库匹配的通配符。使用建议的查询会错过它们。dev.mysql.com/doc/refman/5.0/en/grant.html
user4514

哪个数据库?我得到了ERROR 1046 (3D000): No database selected
user124384 '18

@ user124384答案中没有说的是您应该使用mysql数据库。那是MySQL使用的所有数据存储的地方。给出USE mysql;将数据库名称添加到表名称的命令,例如FROM mysql.dbFROM 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
show grants仅显示当前(已登录)用户的授权
nl-x

作为根,您也可以为
罗恩·霍金斯

2

您必须记住,用于数据库的MySQLGRANT可以包含通配符。这必须通过LIKE在查询中使用来解决:

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';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.