メニューボタン
サポートチーム便り2022.07.27

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 大熊猫橋

あわせて読みたい記事

PAGE TOP