Skip to main content

 

OutSystems 11オンラインヘルプ

 

OutSystems

ライフサイクル管理とデータ保護

この記事では、OutSystemsシステムのアプリケーションがどのような個人データを収集し、どこに保管するかについて説明し、その個人データを難読化または削除する方法の例をいくつか取り上げます。

個人データには、私生活や仕事、一般生活関連など、直接または間接的に個人を特定できる情報がすべて含まれています。氏名、写真、メールアドレス、住所、ユーザー名、コンピュータのIPアドレスなどがあります。

Service CenterとLifeTime

ITユーザー管理

Service CenterとLifeTimeはどちらもOutSystemsの管理コンソールで、ITユーザーの管理を行います。 LifeTimeが使用できない場合は、Service CenterがITユーザーの作成と管理を行います。LifeTimeが使用できる場合は、LifeTimeでこの管理を行います(Service Centerはバックグラウンドで使用)。

ITユーザーを管理するため、Service CenterとLifeTimeは、Userシステムエンティティ(物理テーブル名: ossys_User)にユーザーごとに以下の情報を保存しています。

  • 氏名(Joel Grantなど)
  • ユーザー名(Firwassなど)
  • モバイル端末(Service Centerのみ。414-382-6132など)
  • メール(JoelGrant@rhyta.comなど

総当たり攻撃からの保護

Service CenterとLifeTimeには、ユーザーパスワードの体系的な推測を試みる総当たり攻撃から保護するシステムが用意されています。

このシステムでは、ユーザーレベルの攻撃とIPレベルの攻撃といった2段階攻撃に対する保護を提供しています(詳細については、こちらをご覧ください)。保護が機能するためには、ユーザーの個人データをいくつか保存する必要があります。LoginAttemptシステムエンティティには、以下の個人情報が保存されています(物理テーブル名: OSSYS_LOGIN_ATTEMPT)。

  • ユーザー名(Firwassなど)
  • IPアドレス(69.89.31.226など)

LifeTimeの監査イベント

LifeTimeには、ITユーザーがインフラで実行したオペレーションをすべてログに記録するシステムがあります。これらのログは、[Applications]画面、[Deployment Plans]画面、[Users]画面、[Teams]画面、[Roles]画面で実行されたオペレーションに関連するものです。

これらのログには、ユーザーの氏名とユーザー名、クライアントのIPなどの個人情報も含まれる場合があります。 個人情報は、MessageアトリビュートおよびClientIPアトリビュートのAuditEventエンティティ[OSLTM_AUDITEVENT]に保存されます。

LifeTime Analytics

LifeTime Analyticsを使用すると、アプリケーションに関するパフォーマンスレポートを自動的に構成できます。このレポートは、登録されたユーザーまたは個別のメールに送信できます。

この連絡先リストは、LifeTimeAnalyticsモジュールのPerformanceReportConfigurationエンティティのプラットフォームデータベースに保存されます(物理テーブル名: OSLTM_REPORTCONF)。

メール

OutSystemsには、Webアプリケーションからメールを送信する機能があります。この仕組みで必要とされるメタデータには、ユーザーに関連する個人情報が含まれる場合があります。 ユーザーデータはメールを送信するために必要です(メールアドレス)。さらに、メールの内容自体に含まれる場合もあります。

このようなデータは、すべてシステムエンティティに含まれます(Sent_Email(物理テーブル名: OSSYS_EMAIL)およびEmail_Content(物理テーブル名: OSSYS_EMAIL_CONTENT))。

ログ

Service Centerでは、ユーザーのログインをGeneralログに記録します。ログの形式は、以下のとおりです。

Login (user: '<ユーザー名>').

この情報は、すべてのGeneralログテーブル(oslog_General_0oslog_General_1oslog_General_2、 …)に含まれている場合があります。

ユーザー

Usersは、エンドユーザーを管理するために使用されるデフォルトのアプリケーションです。このアプリケーションでは、「Service CenterとLifeTime」セクションに記載されているユーザーに関連する情報と同じ情報を使用します。具体的には以下の情報です。

  • 氏名(Joel Grantなど)
  • ユーザー名(Firwassなど)
  • モバイル端末(414-382-6132など)
  • メール(JoelGrant@rhyta.comなど

これらの情報が保存されているエンティティは、Service CenterとLifeTimeで使用されているエンティティと同じ(Userシステムエンティティ)ですが、使用するテナント識別子は異なります。

また、Usersでは、前述した総当たり攻撃に対する保護システムを使用しています。そのため、このシステムには以下の個人ユーザー情報が保存されています。

  • ユーザー名(Firwassなど)
  • IPアドレス(69.89.31.226など)

Usersでは、別のエンティティ、つまりUsersモジュールのLoginAttemptエンティティ(物理テーブル名: OSUSR_<PREFIX>_LOGINATTEMPT)を使用します。

注記: Usersをコピーして、新しいユーザープロバイダを作成した場合、同じメカニズムがご利用のユーザープロバイダに適用できます。

App Feedback

App Feedbackは、モバイルアプリケーションやWebアプリケーションを使用しているときの書面や口頭でのフィードバックを共有できるようにすることで、ユーザーのフィードバックを収集するシステムアプリケーションです。 また、フィードバックを送信すると、その瞬間にユーザーの画面に表示されている内容のスクリーンショットがツールによって取得されます。 そのため、アプリケーションのタイプによっては機密情報が取得される可能性があります。

たとえば、ユーザーがディレクトリタイプのアプリケーションを使用しているときに、連絡先リスト画面のフィードバックを送信する場合、その瞬間に一覧表示されたすべての連絡先が、スクリーンショットまたはHTMLコードとしてツールによって収集されます。 その結果、一部の個人情報がApp Feedbackデータベースに保存されることがあります。 このデータは、ECT_Providerモジュールの以下のエントリの以下のアトリビュートに保存されている可能性があります。

  • Feedbackエンティティ
    • originalHTML(Webアプリケーションで使用) - 画面のHTML。
  • WebpageContentエンティティ
    • Content(Webアプリケーションで使用) - ユーザーがフィードバックを送信したときにHTMLで参照されているすべてのリソース
  • FeedbackScreenshotエンティティ
    • ImageBinary(モバイルアプリケーションで使用) - フィードバックを送信したときのユーザーの画面のスクリーンショット。
  • FeedbackSoundMessageエンティティ
    • SoundBinary(モバイルアプリケーションで使用) - フィードバックを送信したときに録音された音。

ユーザーのフィードバック自体に加えて、できるだけ多くのコンテキストを提供するため、一部の詳細なメタデータも保存されます。以下はその情報の一部です。

  • ユーザーの氏名
  • ユーザーのユーザー名
  • ユーザーのメール
  • 使用しているブラウザ
  • 使用しているデバイス(モバイルアプリの場合)
  • 使用しているOS

個人データの難読化/削除の例

本番環境以外では、収集した個人データ(エンドユーザーの名前など)が不適切なため、マスキングや削除が必要なケースがあります。たとえば、トラブルシューティングのために実際の本番データベースのクローンを使用したい場合や、新機能のテストを実行するために本番前環境で実際の本番データを使用したい場合があります。

こうした状況において、OutSystemsシステムのアプリケーションが収集した個人データを置換したり、削除したりする方法の例を以下に示します。

ユーザー

以下のSQLスニペットを使用して、UserエンティティのNameUsernameEmailMobilePhoneの番号をマスキングします。

UPDATE ossys_User
SET
    NAME =  CONCAT('User_', ID),
    USERNAME = CONCAT('User_', ID),
    EMAIL = CONCAT('user_', ID, '@email.com'),
    MobilePhone = ''
WHERE
    USERNAME <> 'admin';

注記: adminは内部プラットフォームユーザーであるため更新できません。admin以外の場合は、プラットフォームによって新しいユーザーが作成されます。

このSQLスニペットは、本番環境で使用しないでください。エンドユーザーのユーザー名とメールがすべて変更され、エンドユーザーがログインするには何らかのサポートが必要になります。

システムへのログイン試行

以下のSQLスニペットを使用して、LoginAttemptシステムエンティティからログイン試行のログをすべて削除します。

DELETE FROM OSSYS_LOGIN_ATTEMPT;

このSQLスニペットは、本番環境で使用しないでください。 ログイン試行のログを削除することで、個人データは消去されますが、それと同時に以前は総当たり攻撃を保護するシステムによってブロックされていたユーザー/IPのブロックがすべて解除されます。

ユーザーのログイン試行

以下のSQLスニペットを使用して、UsersモジュールのLoginAttemptエンティティの物理テーブル名を検索します。

SELECT PHYSICAL_TABLE_NAME
FROM ossys_Entity
WHERE
    NAME = 'LoginAttempt'
    AND
    ESPACE_ID = (SELECT ID FROM ossys_Espace WHERE NAME = 'Users')

次に、以下のSQLスニペットで物理テーブル名を使用して、ユーザーのログイン試行のログをすべて削除します。

delete from <検索されたPHYSICAL_TABLE_NAME>;

ここで、<検索されたPHYSICAL_TABLE_NAME>は上記の手順で検索したUsersモジュールのLoginAttemptエンティティの物理テーブル名です。

このSQLスニペットは、本番環境で使用しないでください。 ログイン試行のログを削除することで、個人データは消去されますが、それと同時に以前は総当たり攻撃を保護するシステムによってブロックされていたユーザー/IPのブロックがすべて解除されます。

メール

以下のSQLスニペットを使用して、送信済みメールおよび未送信メールの情報や内容をすべて削除します。

DELETE FROM OSSYS_EMAIL;
DELETE FROM OSSYS_EMAIL_CONTENT;

ログ

以下のSQLスニペットを使用して、すべてのService CenterのGeneralログのテーブルからログイン試行に関するログエントリをすべて削除します。

DELETE FROM oslog_General_0
WHERE Message LIKE 'Login (%';
DELETE FROM oslog_General_1
WHERE Message LIKE 'Login (%';
DELETE FROM oslog_General_2
WHERE Message LIKE 'Login (%';
DELETE FROM oslog_General_3
WHERE Message LIKE 'Login (%';
DELETE FROM oslog_General_4
WHERE Message LIKE 'Login (%';
DELETE FROM oslog_General_5
WHERE Message LIKE 'Login (%';
DELETE FROM oslog_General_6
WHERE Message LIKE 'Login (%';
DELETE FROM oslog_General_7
WHERE Message LIKE 'Login (%';
DELETE FROM oslog_General_8
WHERE Message LIKE 'Login (%';
DELETE FROM oslog_General_9
WHERE Message LIKE 'Login (%';

App Feedback

以下のSQLスニペットを使用して、個人情報を含んでいる可能性のあるECT_ProviderモジュールのApp Feedbackエンティティごとの物理テーブル名を検索します。

SELECT PHYSICAL_TABLE_NAME
FROM ossys_Entity
WHERE
    ESPACE_ID = (SELECT ID FROM ossys_Espace WHERE NAME = 'ECT_Provider')
    AND
    NAME IN ('Feedback', 'WebpageContent')

次に、以下のSQLスニペットで各物理テーブル名を使用して、各物理テーブルのデータをすべて削除します。

DELETE FROM <検索された各PHYSICAL_TABLE_NAME>;

ここで、<検索された各PHYSICAL_TABLE_NAME>は、上記の手順で検索したECT_Providerモジュールの各エンティティの物理テーブル名です。

注記: WebpageContentエンティティの内容は、外部キーの参照制約により最後に削除する必要があります。

  • Was this article helpful?