9

短いバージョン:特定のユーザーがアクセスできるMySQLデータベースのいくつかのテーブルのどれをリストするSQLプロシージャを作成するにはどうすればよいですか?

長いバージョン

会社のいくつかの支店のデータを含むデータベースにアクセスするマルチユーザーアプリを作成しています。データベースには、すべてのユーザーがアクセスできる多数のルックアップテーブルと、許可されたユーザーのみがアクセスできる各ブランチのテーブルがあります。私の戦略は次のとおりです。

  • ユーザーがSELECT特権を持っている関連テーブルのリストを返すストアドプロシージャを記述します。
  • アプリから、プロシージャを呼び出します。返されるテーブルが1つしかない場合はそれを使用します。それ以外の場合は、ユーザーがアクセスするブランチを選択できるようにします(マネージャーなど)。

このようなストアドプロシージャの書き方がわかりません。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_PRIVILEGESは、データベース内のテーブルを確認しinformation_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 に答える