クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

個人情報を守る(匿名化)

このレッスンのあとで: 個人情報を守る決まりを使って、データを匿名にすることができる。

45分のレッスンコマンド4件MySQL と phpMyAdmin のラボ:ショップのデータベースで SQL を練習する

名簿を友だちに送ってよいか

文化祭の係が、全員の名前とメールアドレスと電話番号を、表計算にまとめました。「他のクラスにも共有しよう」と誰かが言います。

個人の情報は、一度広がると取り消せません。決まりを知り、必要ならデータを匿名にして使えば、使いながら守れます。

このレッスンのゴール

メモ

個人情報を守る決まりを使って、データを匿名にすることができる。

キーワード

ことばいみれい
個人情報生きている特定の人についての情報メールアドレス
利用目的そのデータを何に使うかの説明
同意本人が、使い方を知って認めること
匿名化誰のデータか分からない形にすること
マスキングデータの一部を、伏せ字などで隠すことta***

学生が入力するセルは、このプレビューでは空白です。

個人情報とは何か

個人情報は、特定の人だと分かる情報です。名前、メールアドレス、電話番号、顔写真が当てはまります。

1つでは分からなくても、組み合わせると特定できることがあります。学校名と学年と誕生日が分かれば、クラスの中の1人に絞れます。

例: 個人情報になるものとならないもの

情報個人情報かわけ
名前なる人を直接指す
メールアドレスなる1人の人に届く
好きな色だけふつうはならない誰か分からない
学校と学年と誕生日組み合わせでなる1人に絞れる

学生が入力するセルは、このプレビューでは空白です。

データベースの中の個人情報を探す

ラボの customers の表には、お店の顧客のデータが入っています。すべて架空の人で、アドレスも実在しません。

最初の1行は準備です。次に、どの列が個人情報にあたるかを、列の一覧から見つけましょう。

ラボの短い名前(準備)

コマンド
alias sql='mariadb -h db -u student -pstudent shop -t -e'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

顧客の表の列を一覧にする

コマンド
sql "SHOW COLUMNS FROM customers"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

元のデータを3行だけ見る

コマンド
sql "SELECT first_name, last_name, email FROM customers ORDER BY id LIMIT 3"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

個人情報を扱う5つの原則

守るための考え方は、どこの国でも似ています。自分たちの言葉で5つにまとめます。

目的を決めて伝える。必要な分だけ集める。安全にしまう。必要がなくなったら消す。本人が見たいと言えば見せ、直したり消したりも頼めるようにする。

例: 文化祭の名簿に当てはめる

原則名簿での例
目的を伝える「当日の連絡のために使います」と書く
必要な分だけ連絡に必要なメールだけ集める
安全にしまうパスワードをかけ、共有する人を絞る
必要なくなったら消す文化祭が終わったら消す
本人の頼みに応える本人が頼めば、見せて消す

学生が入力するセルは、このプレビューでは空白です。

匿名化は、消す、隠す、まるめる

分析には、本当の名前は要らないことが多いです。名前は消し、メールの一部は隠します。

年齢は17歳でなく「10代」のようにまるめます。人がちがう番号に置きかえれば、同じ人の記録だけは追えます。

メールの前半を隠して見る

コマンド
sql "SELECT first_name, CONCAT(LEFT(email, 2), '***') AS masked FROM customers ORDER BY id LIMIT 3"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

試す: 文字を隠す

コード: python
# メールアドレスの前半を隠します。
email = "[email protected]"
parts = email.split("@")
masked = parts[0][:2] + "***@" + parts[1]
print(masked)
# 電話番号は、まん中だけを隠します。
phone = "090-1234-5678"
pieces = phone.split("-")
print(pieces[0] + "-****-" + pieces[2])
# 自分のメールアドレスの形に変えて、試しましょう。

よくある間違い

注意

名前の列さえ消せば、匿名になると考えがちです。残った年齢、学校、地域の組み合わせから、人が分かることがあります。匿名にするときは、名前を消したうえで、年齢などもまるめ、1人に絞れないかを確かめます。

さらに挑戦: 誰かが特定できるか

匿名にしたあとの表を、友だちに見せてみましょう。学年と地域と年代だけで、誰のことか当てられるでしょうか。

当てられるなら、まるめ方が足りません。年代を広げたり、地域を大きな単位にしたりして、もう一度試します。

このラボとソースについて: MySQL と phpMyAdmin のラボ:ショップのデータベースで SQL を練習する

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。