“显示数据库”显示您(登录用户)具有某些权限的所有数据库。
有没有办法显示用户“xxx”具有某些特权的所有数据库?
编辑:我有一个用户“mickey”:
mysql> show grants for mickey;
+-------------------------------------------------------------------------------------------------------+
| Grants for mickey@% |
+-------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'mickey'@'%' IDENTIFIED BY PASSWORD '*B9E506CBC9D7D8352A3C02DBC94677A5DEF491B8' |
| GRANT ALL PRIVILEGES ON `mickey\_%`.* TO 'mickey'@'%' |
+-------------------------------------------------------------------------------------------------------+
用户 mickey 可以创建/删除名为“mickey_%”的数据库和表。过滤掉这些数据库很容易,但这只是因为他的数据库有前缀“mickey_”。
有一个名为“mickey_example2”的数据库,其中 mickey 拥有所有权限。我无法在 information_schema 或 mysql db 中找到此数据库。
这是 information_schema.USER_PRIVILEGES 中关于 'mickey' 的唯一信息:
mysql> SELECT * FROM information_schema.USER_PRIVILEGES WHERE GRANTEE LIKE '%mickey%';
+--------------+---------------+----------------+--------------+
| GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE |
+--------------+---------------+----------------+--------------+
| 'mickey'@'%' | def | USAGE | NO |
+--------------+---------------+----------------+--------------+
MySql 手册说:
MySQL 将数据库实现为数据目录中的目录,因此该语句仅列出该位置中的目录。但是,输出可能包含与实际数据库不对应的目录名称。
这对我来说意味着在 information_schema 中不必有任何可用的信息(关于现有数据库),尤其是在数据库为空的情况下。