2016-09-01 13 views
0

私は、複雑なMySQLの手順があります。この手順は、テーブル内のデータを使用していくつかのレコードを出力する、基本的に複雑なSELECTクエリです。MySQLはインテリアの変更やスティッキービットをサポートしていますか?

便宜上、手順は最終結果を計算するために一時テーブルに書き込む必要があります。

データベースを読み取るだけのユーザーは、プロシージャが実際にデータベースに書き込む必要がありますが、このプロシージャをコールして出力を得ることができます。本質的にこのプロシージャは書き込むつもりはないので、アンダースコアで始まる名前を持つ特定のテーブルにいくつかのデータをキャッシュするだけで、ディスクのコストを節約するだけでなく、真剣に何かを破棄すべきではありません。

答えて

1

定義済みセキュリティコンテキストで実行されるストアドプログラムまたはビューは、そのDEFINER属性で指定されたアカウントの特権で実行されます。これらの権限は、起動するユーザの権限とはまったく異なる場合があります。限り手順を定義し、ユーザーが必要な権限を持っており、明示的INVOKERコンテキストで実行する手順を強制しない、起動したユーザの権限は何に影響を与えないよう

https://dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html

プロシージャが行うことができます。 ユーザーを定義するアクセス許可は、プロシージャのアクションに適用されます。

呼び出し側のユーザーは、それを実行できるだけで済みます。これはデフォルトの動作であるため、特別な調整は必要ありません。

デフォルトでは、DEFINERは、プロシージャを作成したユーザーです。そのアカウントがSUPER特権を持っている場合、特権が適用される別の定義者アカウントを実際に宣言することができます。

1

通常、MySQLのストアドプロシージャは、プロシージャを実行するユーザではなく、プロシージャの実行権限を必要とするユーザではなく、プロシージャの定義者に関連付けられた権限で動作します。

呼び出し側コンテキストで実行するようにストアドプロシージャを構成し、呼び出し側ユーザーと同じ権限で実行することもできますが、これは一般的ではありません。

プロシージャを定義するときに、定義者が実行中に実行する必要があるすべての処理を行う適切な権限を持っていることを確認してください。

関連する問題