SQLで接続ユーザー名を取得したい
Question
SQLでDBアクセスする際に、declare UpdateUser varchar (22)のように変数を定義し、後ほどその変数に現在の接続(SQLを実行している)ユーザー名を取得し、処理に返そうとしています。
そこで現在のユーザー名といえば、と思いついたのがCurrent_Userです。下記、参考を見て接続ユーザー名を返してくれそうだと思いました。
参考:
https://docs.microsoft.com/ja-jp/sql/t-sql/functions/current-user-transact-sql?view=sql-server-ver15
実際IBM i Access Client Solutions(ACS)の"SQLスクリプトを実行"にて実行した際には、希望したユーザーが取得できていました。
しかし、いざそれを自動的な処理に組み込むためにSQLファンクションの一部に組み込むと、接続ユーザーではなく、ファンクションの作成ユーザーが返されるようなのです。
どうすればSQLファンクションを用いた場合でも、現在接続しているユーザー名を取得できるでしょうか。
Answer
SQLファンクションにてCurrent_User句を用いた場合の挙動は、現在の接続ユーザーを返してくれるわけではないようです。
実際に上記の提示されたMicrosoft社の参考記事を見るといかにも取得できそうですが、一つだけ、「現在のセキュリティコンテキストの値が返される。」との一文が見て取れます。
おそらく、ここが希望した挙動をしない原因なのでしょう。
System_userを用いてみてください。
https://docs.microsoft.com/ja-jp/sql/t-sql/functions/system-user-transact-sql?view=sql-server-ver15
CURRENT_USERでは現在のセキュリティ コンテキストの名前が返されます。
SYSTEM_USER では現在の実行コンテキストの名前が返されます。
これで希望した値を取得できるとは思いますが、感覚的な話でいうとCurrent_Userのほうが希望した値が取れそうな気がしますよね。
by 大熊猫橋