SlideShare a Scribd company logo
1 of 14
リーダブルパスワード
- SQLアンチパターンより抜粋 -
SSS(G) : hiro345
http://www.sssg.org/blogs/hiro345/
自己紹介
昨日の出来事:
Raspberry Pi Zero 600円
 注文できなかった
Javaエンジニア、最近 Raspberry Pi 関係で Python をよく使ってます...
日経Linuxで記事連載中
小山博史
SQLアンチパターン
O'Reilly Japan, Inc.
Bill Karwin 著
和田 卓人、和田 省二 監訳、児島 修 訳
2013年01月 発行
本書はDB設計やSQL記述の際に避けるべき事
柄を1章で1つ、25個紹介する書籍です。
.... http://bit.ly/1RbngWVより
アンチパターンの概要
● 目的:パスワードのリカバリーとリセットを行う
● アンチパターン:パスワードを平文で格納する
 →DB設計における重大なセキュリティ欠陥
– パスワードの格納
– パスワードの認証
– パスワードを電子メールで送信
● アンチパターンの見つけ方:
パスワードのリカバリーを行ってユーザーへ送信
できるアプリケーション
パスワードの格納
CREATE TABLE USER_INFO(
id SERIAL PRIMARY KEY,
email VARCHAR(100) NOT NULL,
password VARCHAR(30) NOT NULL
);
INSERT INTO USER_INFO
(id, email, password)
VALUES
(1, 'user001@example.jp', 'secret');
パスワードの認証
SELECT
CASE WHEN password = 'secret'
THEN 1 ELSE 0 END
AS password_matches
FROM USER_INFO
WHERE id = 1;
SELECT * FROM USER_INFO
WHERE id = 1 AND password = 'secret';
パスワードを電子メールで送信
SELECT id, email, password
FROM USER_INFO
WHERE id = 1;
From: system@example.jp
To: user001@example.jp
Subject: パスワードの件
user001@example.jpさまのid:1の
パスワードは「secret」です。
アンチパターンを用いても良い場合
● アプリケーションが外部のサービスにアクセス
するためにパスワードを扱う場合
● 暗号化は必要
● IdentificationとAuthenticationの区別が必要
– Identification:本人識別、自分が誰であるかを申告
すること
– Authentication:認証、自らが名乗った人物である
ことを証明すること
解決策
● ソルトをつけてパスワードハッシュを格納
● SHA-256などの暗号学的ハッシュ関数
(cryptographic hash function)の利用
● ハッシュは不可逆
● SHA-1やMD5はパスワード保護には力不足
ハッシュを使ったパスワードの格納
SSLサポート有効のMySQLでSHA-256を使う例
CREATE TABLE USER_INFO(
id SERIAL PRIMARY KEY,
email VARCHAR(100) NOT NULL,
password_hash CHAR(64) NOT NULL
);
INSERT INTO USER_INFO
(id, email, password_hash)
VALUES
(1, 'user001@example.jp', SHA2('secret', 256));
ハッシュを使ったパスワードの認証
ユーザー入力に同じハッシュ関数を適用して
結果比較
SELECT
CASE WHEN
password_hash = SHA2('secret', 256)
THEN 1 ELSE 0 END
AS password_matches
FROM USER_INFO
WHERE id = 1;
アカウントロック
● password_hashの文字列にハッシュ関数が返さ
ない文字列を指定すればアカウントロックがで
きる
● 例:noaccess ... 16進数ではない値を含む
辞書攻撃への対策
ソルトを付加する
SHA2(
CONCAT('secret', 'hhp70tR7096qGTA2H1kG'),
256
)
*ソルト「hhp70tR7096qGTA2H1kG」もプログラムで生成するといいでしょう。
 以下はPythonでの生成例。より安全にしたい場合は工夫が必要。
 書籍「体系的に学ぶ安全なWebアプリケーションの作り方」が詳しいようです。
$ python -c '
> import string,random;
> print "".join(
> [random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits)
> for x in range(20)]
> )'
hhp70tR7096qGTA2H1kG
20文字以上を指定
その他の課題
● 詳細は書籍をご覧ください
– SQLからパスワードを隠す
– パスワードをリカバリーするのではなく、リセット
する
● ユーザーごとにソルトを変更する
● ハッシュのストレッチング処理

More Related Content

What's hot

データベース技術の羅針盤
データベース技術の羅針盤データベース技術の羅針盤
データベース技術の羅針盤
Yoshinori Matsunobu
 

What's hot (20)

MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
 
データベース技術の羅針盤
データベース技術の羅針盤データベース技術の羅針盤
データベース技術の羅針盤
 
SQL+NoSQL!? それならMySQL Clusterでしょ。
SQL+NoSQL!? それならMySQL Clusterでしょ。SQL+NoSQL!? それならMySQL Clusterでしょ。
SQL+NoSQL!? それならMySQL Clusterでしょ。
 
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
No sql with mysql cluster (MyNA・JPUG合同DB勉強会)
 
Mysql toranomaki
Mysql toranomakiMysql toranomaki
Mysql toranomaki
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門
 
Devsの常識、DBAは非常識
Devsの常識、DBAは非常識Devsの常識、DBAは非常識
Devsの常識、DBAは非常識
 
MySQL Clusterを運用して10ヶ月間
MySQL Clusterを運用して10ヶ月間MySQL Clusterを運用して10ヶ月間
MySQL Clusterを運用して10ヶ月間
 
MySQLの運用でありがちなこと
MySQLの運用でありがちなことMySQLの運用でありがちなこと
MySQLの運用でありがちなこと
 
My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話
 
WindowsでMySQL入門
WindowsでMySQL入門WindowsでMySQL入門
WindowsでMySQL入門
 
MHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQLMHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQL
 
MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編MySQLやSSDとかの話 前編
MySQLやSSDとかの話 前編
 
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
 
mikasafabric for MySQL
mikasafabric for MySQLmikasafabric for MySQL
mikasafabric for MySQL
 
MySQLチューニング
MySQLチューニングMySQLチューニング
MySQLチューニング
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 Replication
 
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
 
MySQLの冗長化 2013-01-24
MySQLの冗長化 2013-01-24MySQLの冗長化 2013-01-24
MySQLの冗長化 2013-01-24
 
MySQL 冗長化モデル
MySQL 冗長化モデルMySQL 冗長化モデル
MySQL 冗長化モデル
 

Viewers also liked

「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル
Masahiro Tomita
 

Viewers also liked (12)

「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル「理論から学ぶデータベース実践入門」読書会スペシャル
「理論から学ぶデータベース実践入門」読書会スペシャル
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
SQL小ネタ集
SQL小ネタ集SQL小ネタ集
SQL小ネタ集
 
データベース01 - データベースとは
データベース01 - データベースとはデータベース01 - データベースとは
データベース01 - データベースとは
 
データベース入門3
データベース入門3データベース入門3
データベース入門3
 
データベース入門1
データベース入門1データベース入門1
データベース入門1
 
リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方リレーショナルデータベースとの上手な付き合い方
リレーショナルデータベースとの上手な付き合い方
 
データベース入門2
データベース入門2データベース入門2
データベース入門2
 
リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計リレーショナルな正しいデータベース設計
リレーショナルな正しいデータベース設計
 
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか私は如何にして詳解 MySQL 5.7を執筆するに至ったか
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
 
リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version リレーショナルデータベースとの上手な付き合い方 long version
リレーショナルデータベースとの上手な付き合い方 long version
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 

Similar to リーダブルパスワード - SQLアンチパターンより抜粋 -

ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
 
ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012
Tatsuhiko Kubo
 

Similar to リーダブルパスワード - SQLアンチパターンより抜粋 - (20)

Introduction of SQL Anti-pattern at Phpcon Hokkaido
Introduction of SQL Anti-pattern at Phpcon HokkaidoIntroduction of SQL Anti-pattern at Phpcon Hokkaido
Introduction of SQL Anti-pattern at Phpcon Hokkaido
 
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014  「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」Developers Summit 2014  「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
 
デザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリングデザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリング
 
Api gatewayの話
Api gatewayの話Api gatewayの話
Api gatewayの話
 
What is doobie? - database access for scala -
What is doobie? - database access for scala -What is doobie? - database access for scala -
What is doobie? - database access for scala -
 
[dbts-2014-tokyo] 目指せExadata!! Oracle DB高速化を目指した構成
[dbts-2014-tokyo] 目指せExadata!! Oracle DB高速化を目指した構成[dbts-2014-tokyo] 目指せExadata!! Oracle DB高速化を目指した構成
[dbts-2014-tokyo] 目指せExadata!! Oracle DB高速化を目指した構成
 
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTipsAmazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
 
[Sqlap]リーダブルパスワード
[Sqlap]リーダブルパスワード[Sqlap]リーダブルパスワード
[Sqlap]リーダブルパスワード
 
Capistrano紹介 at kawasaki.rb #002 #kwskrb
Capistrano紹介 at kawasaki.rb #002 #kwskrbCapistrano紹介 at kawasaki.rb #002 #kwskrb
Capistrano紹介 at kawasaki.rb #002 #kwskrb
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
ioMemoryとAtomic Writeによるデータベース高速化
ioMemoryとAtomic Writeによるデータベース高速化ioMemoryとAtomic Writeによるデータベース高速化
ioMemoryとAtomic Writeによるデータベース高速化
 
ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012ngx_small_lightで動的サムネイル生成 #yapcasia2012
ngx_small_lightで動的サムネイル生成 #yapcasia2012
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 
Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話Rubyの会社でPythonistaが三ヶ月生き延びた話
Rubyの会社でPythonistaが三ヶ月生き延びた話
 
AnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + αAnsibleでAzureの インフラを管理する話 + α
AnsibleでAzureの インフラを管理する話 + α
 
オンプレ回帰も簡単実現!自由自在なデータベース運用とは
オンプレ回帰も簡単実現!自由自在なデータベース運用とはオンプレ回帰も簡単実現!自由自在なデータベース運用とは
オンプレ回帰も簡単実現!自由自在なデータベース運用とは
 
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
.NET 7 での ASP.NET Core Blazor の新機能ピックアップ
 
20221117_クラウドネイティブ向けYugabyteDB活用シナリオ
20221117_クラウドネイティブ向けYugabyteDB活用シナリオ20221117_クラウドネイティブ向けYugabyteDB活用シナリオ
20221117_クラウドネイティブ向けYugabyteDB活用シナリオ
 
技術者として抑えておきたい Power BI アーキテクチャ
技術者として抑えておきたい Power BI アーキテクチャ技術者として抑えておきたい Power BI アーキテクチャ
技術者として抑えておきたい Power BI アーキテクチャ
 
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
uroboroSQLの紹介 (OSC2017 Tokyo/Spring)
 

More from hiro345

Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
hiro345
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
hiro345
 

More from hiro345 (11)

手軽に使ってみようIoTデバイス
手軽に使ってみようIoTデバイス手軽に使ってみようIoTデバイス
手軽に使ってみようIoTデバイス
 
Raspberry Pi を楽しもう
Raspberry Pi を楽しもうRaspberry Pi を楽しもう
Raspberry Pi を楽しもう
 
Raspberry Pi and WebIOPi
Raspberry Pi and WebIOPiRaspberry Pi and WebIOPi
Raspberry Pi and WebIOPi
 
Frontend framework and Template
Frontend framework and TemplateFrontend framework and Template
Frontend framework and Template
 
WordPress安全運用の基礎
WordPress安全運用の基礎WordPress安全運用の基礎
WordPress安全運用の基礎
 
Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)
Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)
Arduino、Raspberry Pi、PIC 入門以前(NSEG 2014-04-19)
 
5分でわかる! SqljockyでDart+MySQL
5分でわかる! SqljockyでDart+MySQL5分でわかる! SqljockyでDart+MySQL
5分でわかる! SqljockyでDart+MySQL
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
15分で知るVagrant (NSEG 2013-08-24)
15分で知るVagrant (NSEG 2013-08-24)15分で知るVagrant (NSEG 2013-08-24)
15分で知るVagrant (NSEG 2013-08-24)
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 

リーダブルパスワード - SQLアンチパターンより抜粋 -