2011-12-09 9 views
1

例: 非スーパーユーザーは、テーブル "a"に挿入するプロシージャに対して実行を許可されています。そのユーザーには、テーブル "a"が "データベースを表示"しているデータベースが表示されますが、 "テーブルを表示"するテーブル "a"は表示されません。しかし、同じユーザーは、「プロシージャーを表示する」という基本的なプロシージャー情報を見ることができます。mysqlユーザーはストアドプロシージャを見ることができますか?

これは監査のためのものであり、可能な限り監査プロセスを不明瞭にしたいと考えています。ユーザーがプロシージャで実行を許可されている場合、そのユーザーはそのプロシージャを表示する必要がありますか?そして、プロシージャが触れるデータベースを見ることができなければなりませんか?

答えて

3

プロシージャの所有者である場合、またはmysql.procテーブルにアクセスできる場合は、hereというプロシージャの定義を参照できます。

スーパーとしてプロシージャを作成し、DEFINER CURRENT_USERを設定します(プロシージャはスーパーとして実行されます)。次に、スーパーがテーブルにアクセスできるようにしますが、他の誰もアクセスしないようにしてください。それはテーブルとソースの両方を保護するはずですが、プロシージャを呼び出すことは可能です。

これはスーパーである必要はありません。テーブルにアクセスできるユーザーであれば誰でもかまいません。

+0

右。したがって、非スーパーユーザーは、(プロジェクト所有者でない場合)ショー作成プロシージャでもプロシージャが何をするかを見ることができません。しかし、彼らは手順が存在することを知ることができます。私は、プロシージャが存在することを知る能力を持っていないユーザがプロシージャに対して実行を許可できるとは思わない。 –

+0

私は彼らがそれを知る方法を見ていない、実際に知っていないプロシージャを知る唯一の方法は、mysql.procを読むことであり、そうではありません。もちろん、データベースに対するAPIであることを教えてくれるので、それぞれのprocとそのパラメータと結果セットの説明を渡します。 –

+0

または実際には、おそらく 'SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES'を実行できます。私はそのテーブルに何の制限も見ません。 –

関連する問題