2016-12-01 13 views
-1

私はMySQL接続(私の場合はPDOですが、それは問題ではありません)をREST APIに設定しています。MySQL接続でカスタム変数を渡す

REST APIは内部認証(ユーザー名/パスワード)を使用します。 REST APIにアクセスする複数のユーザーグループがあります。顧客、IT、バックエンド、カスタマーサービスほとんどの場合、同じエンドポイントを使用するため、すべて同じMySQL接続を使用します。

MySQLデータベースでは、データセットの変更を担当するユーザーを保存したいと思います。

私はこれをトリガによってMySQL層に実装したいと思います。したがって、REST APIからのユーザー情報をこのトリガーに何らかの形で渡す必要があります。メタ情報の問い合わせを可能にするCURRENT_USER()またはstatusのようないくつかのMySQLコールがあります。私の考えは、接続文字列の追加情報を何らかの方法でMySQLに渡すことで、別のデータベースユーザーを使用する必要はありませんが、引き続きトリガー内からこの情報を取得できます。

私はいくつかの研究を行いましたが、それは可能ではないと思っていますが、それで私の仕事が楽になるので、誰かが自分の問題の解決策を知っていたかどうか尋ねたいと思っていました。

+1

ウェイ推測を行う以外の用途であること – RiggsFolly

+2

両方の概念が同じ名前(「ユーザ」)を共有していても、アプリケーションユーザは決してMySQLユーザに関係しません。それらは完全に独立した存在であり、共通点はありません。 MySQLはあなたのユーザについて何も知らない。 PHPを使用している場合は、 'PDO :: MYSQL_ATTR_INIT_COMMAND'接続オプションを使用して、connectコマンドでカスタムコマンドを起動することができます。 'insert into connection_log ...'クエリを実行してください(パフォーマンスには注意してください)。 –

+0

@RiggsFollyなぜそれが広すぎると思うか分かりません。それは非常に具体的な質問です。私はMySQLのトリガーでそのユーザー名を読み取るために、MySQL接続に追加情報(APIのユーザー名)を渡したいと思います。 – Horen

答えて

1

私は接続時にセッション変数を設定します。

@ÁlvaroGonzálezからPDO initに関するコマンドの実行について思い出させるコメントをありがとうございます。

一時表にデータを追加することはお勧めできません。いくつかのスカラが必要であると仮定して、1つ以上のセッション変数を設定するのと同じくらい良いことです。

$pdo = new PDO($dsn, $user, $password, [ 
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET @myvar = 'myvalue', @myothervar = 'othervalue'" 
]); 

それは$pdo->exec()を呼び出して、接続した後、任意の時点でセッション変数を設定することも可能です。

$pdo->exec("SET @thirdvar = 1234"); 

あなたのSQLクエリでセッション変数を読むことができます:

$stmt = $pdo->query("SELECT @myvar, @myothervar"); 
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) { 
    print_r($row); 
} 

ます。また、トリガーでセッション変数読むことができます:使用のための広範な質問と十分でない情報へ

CREATE TRIGGER mytrig BEFORE INSERT ON mytable 
FOR EACH ROW 
    SET NEW.somecolumn = @myvar; 
+0

これはとても良い考えです。私は明日これを実装しようとします:) – Horen

関連する問題