0

“显示数据库”显示您(登录用户)具有某些权限的所有数据库。

有没有办法显示用户“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 中不必有任何可用的信息(关于现有数据库),尤其是在数据库为空的情况下。

4

3 回答 3

2

经过大量搜索和阅读后,我发现没有一种很好且干净的方法可以为其他用户找到“显示数据库”。

我通过执行以下操作更改了我的数据库设计: - 每个数据库名称都以 $username_ 开头 - $username 不能包含下划线“_”

我有一个用户没有任何授权,除了“SHOW DATABASES”,我发现用户的数据库使用 WHERE LIKE 和 SHOW DATABASES 命令:

SHOW DATABASES WHERE `Database` LIKE ?

和 ?替换为:

'$username\_%'
于 2012-08-16T09:15:40.000 回答
1

您可以获得从“information_schema”查询表 USER_PRIVILEGES 的给定用户的权限。

例如,要测试名为“root”的用户的“CREATE”权限,您可以查询:

SELECT * FROM information_schema.USER_PRIVILEGES WHERE GRANTE LIKE "'root'%" AND PRIVILEGE_TYPE="CREATE";

于 2012-08-14T12:14:55.740 回答
0
Select Host, Db, User from mysql.db;

这将向您显示您的主机、数据库名称和相应的用户

于 2013-11-22T11:32:15.613 回答