短いバージョン:特定のユーザーがアクセスできるMySQLデータベースのいくつかのテーブルのどれをリストするSQLプロシージャを作成するにはどうすればよいですか?
長いバージョン:
会社のいくつかの支店のデータを含むデータベースにアクセスするマルチユーザーアプリを作成しています。データベースには、すべてのユーザーがアクセスできる多数のルックアップテーブルと、許可されたユーザーのみがアクセスできる各ブランチのテーブルがあります。私の戦略は次のとおりです。
- ユーザーがSELECT特権を持っている関連テーブルのリストを返すストアドプロシージャを記述します。
- アプリから、プロシージャを呼び出します。返されるテーブルが1つしかない場合はそれを使用します。それ以外の場合は、ユーザーがアクセスするブランチを選択できるようにします(マネージャーなど)。
このようなストアドプロシージャの書き方がわかりません。SHOW GRANTS FOR CURRENT_USER明らかな可能性ですが、次のような構文解析を行います。
GRANT SELECT ON Company.BranchABC TO 'auser'@'%clientdomain.com'
SQLでテーブルが何であるかを理解するのは、あまりにも厄介なようです。さまざまSELECTなテーブル(ユーザー、データベース、ホストなど)からのアクセス許可を組み合わせるために、MySQLのロジックを複製する必要があるため、アクセス許可を保持する実際のテーブルから実行することも問題があるようです。
知恵の言葉はありますか?