用户在MySQL中具有SELECT权限的表的列表

时间:2011-02-17 03:07:04

标签: mysql database-permissions

短版:如何编写SQL过程以列出特定用户可访问的MySQL数据库中的几个表中的哪一个?

更长的版本

我正在编写一个多用户应用程序,该应用程序使用公司的多个分支机构的数据访问数据库。数据库具有许多任何用户都可以访问的查找表,以及只有授权用户才能访问的每个分支的表。我的策略是:

  • 编写一个存储过程,返回用户具有SELECT权限的相关表的列表。
  • 从应用程序中调用该过程。如果只返回一个表,请使用它,否则让用户选择他们想要访问的分支(例如,对于经理)。

我无法弄清楚如何编写这样的存储过程。 SHOW GRANTS FOR CURRENT_USER显然是可能的,但解析如下:

GRANT SELECT ON Company.BranchABC TO 'auser'@'%clientdomain.com'

在SQL中找出表格似乎方式太乱了。从拥有权限的实际表中执行SELECT似乎也有问题,因为我必须复制MySQL的逻辑来组合各种表(用户,数据库,主机等)的权限。

任何智慧的话语?

3 个答案:

答案 0 :(得分:3)

我之前从未向MySQL用户授予每个表权限,但要执行此操作,您将检查TABLE_PRIVILEGES数据库中的information_schema表。

这应该指向正确的方向。

答案 1 :(得分:1)

可以使用查询来检查MySQL用户列表及其权限。

select * from mysql.user\G;

http://www.thedevheaven.com/2012/04/retrieve-mysql-users-list-and-its.html

答案 2 :(得分:1)

您可以查看用户拥有哪些表的权限:

show grants for 'user'@'host';

例如,要查看user1(网络10.25中的所有计算机)的权限,请运行:

show grants for 'user'@'10.25.%.%';