「レコードをコピー」を防ぐ

使ってます?「レコードをコピー」機能

そもそも知ってました?「レコードをコピー」機能。もちろん Claris FileMaker の機能です。

レイアウト上でどこにもフィールドをアクティブにしていない状態で、
何もオブジェクトがないところを右クリックし、
メニューの一番上にでる機能です。
同様に機能するスクリプトステップ「レコード/検索条件コピー」や「全レコード/検索条件コピー」なんてものもあります。

調べられる範囲で古いバージョンを確認しましたが、
私が持っている一番古いバージョン6(拡張子は fp5)でもありました。
かなり昔からある機能なんですね。

使っていなくてもこの強力な機能を知っておくべき

この機能はレイアウト上にあるフィールドのレコードの内容を、
タブ区切りのCSVのような形式でクリップボードにコピーします。
レイアウト上にあるフィールドやマージフィールドの値がクリップボードに入ります。

そしてこの「レイアウト上にある」というのが超強力。
フィールドのデータを見せたくないときに次のような機能をよく使うと思います。

  • マスク付き編集ボックス
  • 次の場合にオブジェクトを隠すが真である
  • レイアウトの表示領域外の右側エリアにある

これら見えていないフィールドデータであっても、
あとで紹介する対策をしていない場合は、
人間の目には見えなくなってもクリップボードにコピーできてしまいます!
データの内容を見せていないつもりでも、ユーザーはデータを「レコードをコピー」して取り出すことができるんです。

対策パターンその1「アクセス権セットをフィールドレベルで設定」

まずは王道の、セキュリティー設定を細かく設定することです。
アクセス権セットを作成し、テーブル、レコード、フィールド単位で、
見せる見せないや、計算式を設定して特定条件で見せる見せないを制御できます。

アクセス権セットで見せない条件に合致したフィールドデータは、
<アクセス権がありません>
という表示になり、毛嫌いされる方も多いです。

アクセス権セットをフィールドレベルで設定はとても細かく設定でき、
「このレイアウトでは見せる/見せない」など高度な設定が可能ですが、
その後のカスタマイズも難易度が上がってしまうのが難点です。

対策パターンその2「対象から外れるオブジェクトに変更する」

対策パターンその2は次の Tips を使い、
レコードをコピーの対象先から外すことができます。

  • アクティブにならないタブパネル内に配置したフィールドやマージフィールド
  • ポップオーバー内に配置したフィールドやマージフィールド
  • ボタンのラベルとしてマージフィールド
  • ボタンバーの計算結果

レイアウトの表示領域外の右側エリアにあるフィールドなんかは、
見せるつもりはないフィールドでしょうから、
アクティブにならないタブの中に入れておくのが良いのかもしれません。

対策パターンその3「コピー機能を全体で無効化する」

対策パターンその2は隠したいデータを一つ一つ丁寧に配置し直していくことですが、
そんなことより「この機能を一発で無効化する」という方法です。

コピーなんだから、カスタムメニューを作成してコピーメニューを取り除く、
もしくはアクセス権セットで「利用できるメニューコマンド: 最小」に設定することで、
レコードをコピーもできなくすることができます。
それでも普通にカーソルが入るフィールドの値をコピーする機能もできなくなるので、
利用者の利便性を大きく下げてしまいます。

対策パターンその4「エクスポートを許可: オフ で無効化する」

対策パターンその3の改善版で、こちらも「この機能を一発で無効化する」という方法です。
アクセス権セットで「エクスポートを許可」のチェックボックスを外します。
これによりカーソルが入るフィールドのコピー機能は有効なまま「レコードのコピー」を防ぐことができます。

ただしやっぱりこちらも弊害はあります。
次の機能も一緒にできなくなりますのですぐ気軽にというわけにはいきません。

  • レコードのエクスポート
  • レコードを Excel として保存
  • インポートソース(元)が FileMaker のテーブル のレコードのインポート
  • Apple events からのデータ取得

Claris FileMaker Pro 19 ヘルプ 

上記のようなエクスポートができないと言っても、
それらを含むスクリプトを作成し、
「完全アクセス権を付与」すれば、
この制限を受けずにスクリプトを実行できます。

さいごに

私ならどうするか、
今のところは 対策パターンその4 が楽だなと思っています。
「エクスポートを許可」のチェックを外しても、
印刷や PDF 出力、フィールド内容のエクスポートには無関係なので。

また、こんな機能正直いらないと私は思ったので、
アイデアとして Claris Community に投稿しました。
https://community.claris.com/ja/s/idea/0873w000001DaGaAAK/detail
良いアイデアだと思った方は いいね お願いします。

レイアウトの機能で見せていないと思っていたデータが取得可能とはいえ、
そもそも FileMaker ファイルへログイン成功していなければ、当たり前ですがデータは見られません。
なので情報漏えいというほどでもないですが、
顔の見えない多く人や離れた場所から接続されるようなカスタムAppの場合は、
開発者として注意しておきたいですね。