2011-02-17 88 views
3

简短版本:如何编写SQL过程以列出特定用户有权访问的MySQL数据库中的哪几个表?用户在MySQL中具有SELECT权限的表的列表

加长版

我正在写访问与数据的数据库为一家公司的几个分支多用户应用程序。数据库有许多查询表,任何用户都可以访问,并且每个分支机构只有授权用户可以访问的表。我的策略是:

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

我无法弄清楚如何编写这样的存储过程。 SHOW GRANTS FOR CURRENT_USER是一个明显的可能性,但分析是这样的:

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

在SQL弄清楚表是什么,似乎方式太乱了。从拥有权限的实际表中执行SELECT也似乎有问题,因为我必须复制MySQL的逻辑以合并来自各种表(用户,db,主机等)的权限。

任何智慧?

回答

3

我从来没有授予MySQL用户每个表的权限,但要做到这一点,您需要检查information_schema数据库中的TABLE_PRIVILEGES表。

这应该指向正确的方向。

+0

谢谢,杰西,这是非常有帮助的。 – 2011-02-18 00:42:01