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

Sco*_*ter 7 mysql database-permissions

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

更长的版本:

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

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

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

GRANT SELECT ON Company.BranchABC TO 'auser'@'%clientdomain.com'
Run Code Online (Sandbox Code Playgroud)

在SQL弄清楚表是什么,似乎这样太乱了.SELECT从拥有权限的实际表中执行a 操作似乎也有问题,因为我必须复制MySQL的逻辑以组合来自各种表(用户,数据库,主机等)的权限.

任何智慧的话?

Moh*_*asi 6

您可以查看用户对哪些表具有哪些权限:

show grants for 'user'@'host';
Run Code Online (Sandbox Code Playgroud)

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

show grants for 'user'@'10.25.%.%';
Run Code Online (Sandbox Code Playgroud)


Jes*_*nch 5

我以前从未向 MySQL 用户授予过每个表的权限,但要做到这一点,您需要检查数据库TABLE_PRIVILEGES中的表information_schema

这应该为您指明正确的方向。