2017-07-28 16 views
5

私は古典的なASPとMySQLを使用しています(PHPを使って質問のポイントを変更することはありません)。mysqlの変数を一度しか設定しない

私は私のホームページ上で変数を設定する必要があります。

SET block_encryption_mode = 'aes-256-cbc' 

他のユーザーがサーバーを使用していると、デフォルトblock_encryption_modeを使用することができますように私は、グローバル変数として設定することはできません。

私は各Webページの最初にASP/PHPを使用してステートメントを使用することができますが、それはあまりにも多くのリソースを使用するように思えます。すべてのユーザーはすべてのページでSETステートメントを実行します...

ASPのようなonstartイベントのように、各セッションの開始時に変数を設定したり、他のSQL文を実行する方法はありますか?または、私が持っているすべてのページで各ユーザーのクエリを実行せずに目標を達成できますか?

答えて

2

すべてのページでSETをマイクロ秒単位で実行すると安全です。文字通り、すでに開かれている接続には、SETというオーバーヘッドはありません。

この設定をグローバルに適用できない限り、私は気にしません。データベース接続ハンドルを取得した直後にblock_encryption_modecollationtimezoneと一緒に)を設定するだけです。

+1

をしかし、この文字列もこのセットが存在することにしたくない他のウェブサイトから、すべてのクライアント上で実行される... – Jerry2

+0

私はblock_encryption_modeがセッション変数であることを知っているので、SETを使うことは他のクライアントに影響を与えるべきではありません。また、自分のセッションよりもさらに価値を設定するためには、管理者権限が必要と思われます。 –

3

init_connect変数を使用できます。

接続するクライアントごとにサーバーによって実行される文字列。文字列は、セミコロン文字で区切られた1つ以上のSQL文で構成されます。

また、このようなコードを持つユーザーを区別することができます限り

IF (CURRENT_USER() = '[email protected]') THEN 
    SET SESSION block_encryption_mode = 'aes-256-cbc'; 
END IF;