データ最小化とは、必要な分だけ集めること
データ最小化とは、目的に必要な個人データだけを集めて持つことです。持っていないデータは、漏れることも、悪用されることもありません。
会員登録の画面に、使わない項目が10個ある。そんな表は珍しくありません。この回では、列を減らす考え方とやり方を学びます。
このレッスンのゴール
メモ
目的に必要な列だけを選び、列を減らしたビューを作れる。
重要な言葉
| ことば | いみ |
|---|---|
| 目的 | そのデータを使う理由 |
| データ最小化 | 目的に要る分だけ集めて持つこと |
| ビュー | 保存しておいた SELECT。表のように読める |
| 権限 | 誰が何を読めるかの許可 |
| 同意 | 本人が使い道を知ったうえで認めること |
学生が入力するセルは、このプレビューでは空白です。
先に目的を決め、そこから列を選ぶ
列を選ぶ順番は決まっています。まず目的を1つ決めます。次に、その目的に本当に要る列を選びます。
「あれば便利」は、理由になりません。便利だからと集めた列は、使われないまま、漏れる危険だけを増やします。
下の表で、目的ごとに要る列と要らない列を見比べましょう。
例: 目的で要る列は変わる
| 目的 | 要る列 | 要らない列 |
|---|---|---|
| イベントの案内メール | メールアドレス、関心分野 | 電話番号、生年月日、住所 |
| 本の郵送 | 氏名、住所 | 生年月日、関心分野 |
| 年齢制限のある貸出 | 20歳以上かどうか | 生年月日そのもの |
学生が入力するセルは、このプレビューでは空白です。
ビューは、列を減らした窓になる
元の表には、いろいろな列が残ることがあります。でも、メールを送る人に、住所や生年月日まで見せる必要はありません。
ビューは、保存しておいた SELECT です。列を絞ったビューを作れば、使う人はその列だけを読みます。
次の Run で、ショップの顧客から、3列だけのビューを自分のデータベースに作ります。
証明書を受け入れる設定
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnfここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
クライアント用の短い名前
alias db='mariadb -h db -u student -pstudent -t -e'ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
自分のデータベースを作る
db "CREATE DATABASE IF NOT EXISTS student_privacy"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
3列だけのビューを作る
db "CREATE OR REPLACE VIEW student_privacy.mailing AS SELECT id, first_name, city FROM shop.customers"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ビューから3行を読む
db "SELECT * FROM student_privacy.mailing ORDER BY id LIMIT 3"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ビューの列を調べる
db "DESCRIBE student_privacy.mailing"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある間違い
注意
念のため、全部の列を集めておくほうが安全だと思いがちです。持つデータが多いほど、漏れたときの被害も大きくなります。要るかどうか分からない列は、要る理由が言えるまで集めません。
試す: ビューを読む
-- ビューは、普通の表のように読めます。
SELECT * FROM newsletter ORDER BY id;
-- 推理が好きな人だけに絞る WHERE を足してみましょう。
試す: 必要な列だけ選ぶ
-- 同じ目的を、元の表から必要な列だけで書きます。
SELECT id, email, genre FROM members
WHERE genre = '推理'
ORDER BY id;
-- genre の代わりに full_name を足すと、見える情報はどう変わりますか。
見せる相手にも、最小化を使う
列を減らすのは、集めるときだけではありません。見せるときにも使います。
広報の人にはメール用のビューだけ、配送の人には宛名用のビューだけを読む権限を渡します。SQL では GRANT SELECT ON ビュー TO ユーザー と書きます。
こうすれば、誰かのパスワードが漏れても、見えるのはその人のビューの列だけです。