9

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

更长的版本

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

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

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

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

在 SQL 中找出表是什么似乎太混乱了从持有权限的实际表中做一个SELECT似乎也有问题,因为我必须复制 MySQL 的逻辑来组合来自各种表(用户、数据库、主机等)的权限

有什么智慧之言吗?

4

3 回答 3

6

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

show grants for 'user'@'host';

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

show grants for 'user'@'10.25.%.%';
于 2018-05-29T11:08:45.647 回答
4

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

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

于 2011-02-17T03:12:21.220 回答
1

MySQL用户列表及其权限可以通过查询查询。

select * from mysql.user\G;

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

于 2012-05-17T05:28:31.170 回答