6 返信 最新の回答 日時: Oct 8, 2009 5:07 PM ユーザー:fortune_1

    いろんなログをとりたい

    fortune_1

      タイトル

      いろんなログをとりたい

      フォーラムに投稿

      いつもお世話になってます。

       

      さて、 セキュリティ向上のため、現在データベースファイルを開発中ですが

      データを修正(または登録)した際、ログを残せないのか?と色々やってますが、なかなかうまくいかず質問させていただきました。

       

       

      履歴として残せれば一番いいんですが、その機能はなさそうですので

      とりあえず最終のログができれば、、、

       

      環境 

      FileMaker 10:Mac OS X10.4〜10.5

      FileMaker 9 serverにて共有中 

       

      ログを残したい情報 

      修正日:こちらはオプションの入力値の自由化で実現できました

      ユーザー名:こちらは、アカウント名、ユーザー名(パソコンの名前?)はできましたが、外部サーバーのユーザー名ができないか?と苦戦中です。

            (FMアカウントだと、ファイルひとつひとつに登録&削除しなければならないので、作業が大変だと思って、、、)

      システムIPアドレス:どのPCからか?というログをとりたいのですが、登録した時はできましたが、修正した時ができません。

                 オプションにて入力値の自由化の欄で、計算値:Get(システムIPアドレス)

                「フィールドに既存の値が存在する場合は置き換えない」 のチェックをはずしてもデータが反映されません。そのような使い方ではないのでしょうか、、?

       

      以上、素人的な考えで申し訳ありませんが、何かヒントはありませんでしょうか?よろしくお願いします。

        • 1. Re: いろんなログをとりたい
          usuitax
            

          >オプションにて入力値の自由化の欄

          このオプションはレコードを新規作成した時のみ反映されるオプションなので、

          修正時には機能しません。

           

          レコードが修正された場合はスクリプトトリガの「OnRecordcommit」を使ってログをとるのがよいと思います。

          例えば、ログ用にテーブルと繰り返しフィールドを作っておけば履歴をとるのも可能です。

           

          ユーザー名は環境設定から個別に設定できるので、改めて名前を付ければどのPCからのアクセスされたか把握するのに便利かと思います。

           

          • 2. Re: いろんなログをとりたい
            fortune_1
              

            返信ありがとうございます。

             

            >レコードが修正された場合はスクリプトトリガの「OnRecordcommit」を使ってログをとるのがよいと思います。

            >例えば、ログ用にテーブルと繰り返しフィールドを作っておけば履歴をとるのも可能です。

            スクリプトトリガの機能がありましたね!まだ10にして間もないもので、存在を忘れてました。

            さっそくためした所、無事自分が思っていたような動きで動作を確認しました。ありがとうございました。

             

             

             >ユーザー名は環境設定から個別に設定できるので、改めて名前を付ければどのPCからのアクセスされたか把握するのに便利かと思います。 

            ユーザー名はファイルメーカーの名前だったんですね。

            こちらは、1台のPCに対して複数の人が使用するので、正確なログにはなりませんね〜。

            やっぱりファイルひとつひとつにアカウントを作成しないと無理なんでしょうか、、

             

            今回のシステムは下記のような環境にて使用してます。

            部署ごとに1〜3台のPC、部署人数は2〜3人の所もあれば10〜20人の所もある。

            それぞれクライアントPCからFMサーバーで共有しているサーバー内のファイル(100くらいのファイルを共有)へ接続。

            しかし最近、ファイルデータの間違った修正などが相次いだため、誰が?いつ?操作したのか、を明らかにするためログをとる作業にとりかかる。

             

            という状態です。こういう情報は最初に書いとくべきですよね、すいません。 

            時間とユーザー名(IPアドレス)である程度は絞れますが、20人の部署では誰が?という部分が弱いので一人ひとりのアカウントを使用し、それをログとして残したいのです。

            幸い、Mac OS X Serverにてファイル共有を行っており、そちらで職員全員にユーザー名とパスワードを与えてますので、それを使えれば、、、と思い外部サーバー認証をやってみました。

            が、ログインはできましたが、外部サーバー認証のアカウント名はグループ名に統一されており、これでは誰が誰やらわからない、という状況でした。 

            • 3. Re: いろんなログをとりたい
              Hiro
                

              スクリプトトリガによる解法は、全てのトリガ対象レイアウトオブジェクトに設定しなければならず、また当然その操作スクリプトも組まなければならないので、この事案についてはかなり面倒かと思います。

               

              代わって、従来の「フィールド設定の計算値入力自動化オプション」を使う、とてもシンプルな方法の提案です。

               

              先ず、レコード編集をトリガーする為の修正タイムスタンプ(自動入力)フィールドを作ります。

              つぎに、目的の「ログ 」フィールドの設定で、計算値入力自動化(既存値書換)オプション指定し、その式に、

                Evaluate("List(記録式;Selfログフィールド)";修正タイムスタンプフィールド)

              と定義して完成です。 最新ログが古い履歴ログの上に自動的に積み上がって行きます。

              なお、 記録式は、取りたい記録の内容値を得る計算式で、例えば、

                \"最新修正:\" & Get(タイムスタンプ) &

                \"、修正者:\" & Get(アカウント名) &

                \"、IPアドレス:\" & Get(システムIPアドレス)

              とかです。

              • 4. Re: いろんなログをとりたい
                fortune_1
                  

                Hiroさん、ありがとうございます。

                 

                ファイルメーカーも関数を使い出すと奥が深いですね!

                 

                >Evaluate("List(記録式;Selfログフィールド)";修正タイムスタンプフィールド) 

                こちらのSelf関数が入るのはなんででしょう?

                修正タイムスタンプフィールドが変更されるたび(レイアウト修正するたび)、ログフィールドに計算式の値がはいっていく、という事は確認できましたが。 

                すいません、あまりself関数になじみがないもので(関数自体が、ですが)。 

                • 5. Re: いろんなログをとりたい
                  Hiro
                    

                  > Evaluate("List(記録式;Selfログフィールド)";修正タイムスタンプフィールド) 

                  > こちらのSelf関数が入るのはなんででしょう?

                   

                  すみません、表現が解り難かったですね。

                   

                  自分自身のフィールドを表すのに「Self」関数が使えれば Self を、使えなければ

                  従来通り自己フィールド名「ログフィールド」をお使いください。

                   

                  Evaluate("List(記録式;Self)";修正タイムスタンプフィールド) 

                  または、

                  Evaluate("List(記録式;ログフィールド)";修正タイムスタンプフィールド) 

                  • 6. Re: いろんなログをとりたい
                    fortune_1
                      

                    >自分自身のフィールドを表すのに「Self」関数が使えれば Self を、使えなければ

                    >従来通り自己フィールド名「ログフィールド」をお使いください。 

                     

                    なるほど。そういう意味でしたか。

                     

                    どうもありがとうございます!

                    よいデータベースができそうです。