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

無料レッスン

データ最小化の考え方

このレッスンのあとで: 目的に必要な列だけを選び、列を減らしたビューを作れる。

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

データ最小化とは、必要な分だけ集めること

データ最小化とは、目的に必要な個人データだけを集めて持つことです。持っていないデータは、漏れることも、悪用されることもありません。

会員登録の画面に、使わない項目が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"

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

よくある間違い

注意

念のため、全部の列を集めておくほうが安全だと思いがちです。持つデータが多いほど、漏れたときの被害も大きくなります。要るかどうか分からない列は、要る理由が言えるまで集めません。

試す: ビューを読む

コード: sql
-- ビューは、普通の表のように読めます。
SELECT * FROM newsletter ORDER BY id;
-- 推理が好きな人だけに絞る WHERE を足してみましょう。

試す: 必要な列だけ選ぶ

コード: sql
-- 同じ目的を、元の表から必要な列だけで書きます。
SELECT id, email, genre FROM members
WHERE genre = '推理'
ORDER BY id;
-- genre の代わりに full_name を足すと、見える情報はどう変わりますか。

見せる相手にも、最小化を使う

列を減らすのは、集めるときだけではありません。見せるときにも使います。

広報の人にはメール用のビューだけ、配送の人には宛名用のビューだけを読む権限を渡します。SQL では GRANT SELECT ON ビュー TO ユーザー と書きます。

こうすれば、誰かのパスワードが漏れても、見えるのはその人のビューの列だけです。

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

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