SQLログイン認証の際にログを出力する方法
これはInterSystems FAQ サイトの記事です。
以下のようにユーザ名、パスワードを引数に持ち、認証が成功した場合はユーザ名、失敗したときは""(NULL)を返すルーチン(SecTest^SecTest)を作成し、標準の認証システムを書き換えることができます。
SecTest(user,pass)
// user1のパスワードがuser1の場合、認証OKのログを作成
if user="user1",pass="user1" {
set ^sqllog($i(^sqllog))="認証OK;"_$horolog_";"_user
quit user
}
// 認証できなかった場合、認証NGのログを作成
set ^sqllog($i(^sqllog))="認証NG;"_$horolog_";"_user
quit ""
// user1のパスワードがuser1の場合、認証OKのログを作成
if user="user1",pass="user1" {
set ^sqllog($i(^sqllog))="認証OK;"_$horolog_";"_user
quit user
}
// 認証できなかった場合、認証NGのログを作成
set ^sqllog($i(^sqllog))="認証NG;"_$horolog_";"_user
quit ""
このルーチンを$SYSTEM.SQL.SetSQLLoginOverride()関数を使用して置き換えます。
do $SYSTEM.SQL.SetSQLLoginOverride("SecTest^SecTest")
ただし標準の認証ができなくなりますので、パスワードを別に保管、参照する仕組みを記述する必要があります。