Submit Search
RDBにおけるバリデーションをリレーショナルモデルから考える
21 likes
11,162 views
Mikiya Okuno
Validation nightで発表したスライドです。
Software
Read more
1 of 24
Download now
Downloaded 47 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
More Related Content
PDF
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
PPTX
世界一わかりやすいClean Architecture
Atsushi Nakamura
KEY
やはりお前らのMVCは間違っている
Koichi Tanaka
PDF
ブラック企業から学ぶMVCモデル
Yuta Hiroto
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
PDF
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
PDF
MySQLで論理削除と正しく付き合う方法
yoku0825
PDF
Javaのログ出力: 道具と考え方
Taku Miyakawa
ドメイン駆動設計サンプルコードの徹底解説
増田 亨
世界一わかりやすいClean Architecture
Atsushi Nakamura
やはりお前らのMVCは間違っている
Koichi Tanaka
ブラック企業から学ぶMVCモデル
Yuta Hiroto
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
aha_oretama
MySQLで論理削除と正しく付き合う方法
yoku0825
Javaのログ出力: 道具と考え方
Taku Miyakawa
What's hot
(20)
ODP
MVC の Model を考える
tomo_masakura
PDF
BigQuery で 150万円 使ったときの話
itkr
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
PDF
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
PDF
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
PDF
こわくない Git
Kota Saito
PDF
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
PDF
できる!並列・並行プログラミング
Preferred Networks
PDF
データベース設計徹底指南
Mikiya Okuno
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
PDF
MySQLアーキテクチャ図解講座
Mikiya Okuno
PDF
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
PDF
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
PDF
Keycloak拡張入門
Hiroyuki Wada
PDF
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
PDF
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
PDF
インフラエンジニアってなんでしたっけ(仮)
Akihiro Kuwano
PDF
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
MVC の Model を考える
tomo_masakura
BigQuery で 150万円 使ったときの話
itkr
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
こわくない Git
Kota Saito
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
できる!並列・並行プログラミング
Preferred Networks
データベース設計徹底指南
Mikiya Okuno
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
MySQLアーキテクチャ図解講座
Mikiya Okuno
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Keycloak拡張入門
Hiroyuki Wada
WebAssemblyのWeb以外のことぜんぶ話す
Takaya Saeki
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
NTT DATA Technology & Innovation
インフラエンジニアってなんでしたっけ(仮)
Akihiro Kuwano
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
NTT DATA Technology & Innovation
Ad
Viewers also liked
(20)
PDF
focuslight-validator validate sinatra application - validation night at LINE ...
Satoshi Suzuki
PDF
Javaでのバリデーション 〜Bean Validation篇〜
eiryu
PDF
リレーショナルな正しいデータベース設計
Mikiya Okuno
PDF
リレーショナルデータベースとの上手な付き合い方
Mikiya Okuno
PDF
あなたが知らない リレーショナルモデル
Mikiya Okuno
PDF
人類は如何にして大切な データベースを守るべきか
Mikiya Okuno
PDF
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
Mikiya Okuno
PDF
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
Mikiya Okuno
PDF
What's New in MySQL 5.7 InnoDB
Mikiya Okuno
PDF
知って得するWebで便利なpostgre sqlの3つの機能
Soudai Sone
PDF
What's New in MySQL 5.7 Security
Mikiya Okuno
PDF
とあるギークのキーボード遍歴
Mikiya Okuno
PDF
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
Mikiya Okuno
PDF
リレーショナルデータベースとの上手な付き合い方 long version
Mikiya Okuno
PDF
Rdbms qpstudy-okuno
Mikiya Okuno
PDF
実践Herokuデータベース編 Webセミナー
Salesforce Developers Japan
PDF
制約をつけて遊ぼう
Fumihito Yokoyama
PDF
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
Hiroshi Tokumaru
PPTX
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
Hiroshi Tokumaru
PPTX
失敗事例にみるDbの負荷試験の重要性
Kazu Onishi
focuslight-validator validate sinatra application - validation night at LINE ...
Satoshi Suzuki
Javaでのバリデーション 〜Bean Validation篇〜
eiryu
リレーショナルな正しいデータベース設計
Mikiya Okuno
リレーショナルデータベースとの上手な付き合い方
Mikiya Okuno
あなたが知らない リレーショナルモデル
Mikiya Okuno
人類は如何にして大切な データベースを守るべきか
Mikiya Okuno
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
Mikiya Okuno
データモデルについて知っておくべき7つのこと 〜NoSQLに手を出す前に〜
Mikiya Okuno
What's New in MySQL 5.7 InnoDB
Mikiya Okuno
知って得するWebで便利なpostgre sqlの3つの機能
Soudai Sone
What's New in MySQL 5.7 Security
Mikiya Okuno
とあるギークのキーボード遍歴
Mikiya Okuno
私は如何にして詳解 MySQL 5.7を執筆するに至ったか
Mikiya Okuno
リレーショナルデータベースとの上手な付き合い方 long version
Mikiya Okuno
Rdbms qpstudy-okuno
Mikiya Okuno
実践Herokuデータベース編 Webセミナー
Salesforce Developers Japan
制約をつけて遊ぼう
Fumihito Yokoyama
ここが変だよ、グローバルスタンダードの脆弱性対策~入力値の考え方~
Hiroshi Tokumaru
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
Hiroshi Tokumaru
失敗事例にみるDbの負荷試験の重要性
Kazu Onishi
Ad
Similar to RDBにおけるバリデーションをリレーショナルモデルから考える
(20)
PDF
なぜ、いまリレーショナルモデルなのか
Mikiya Okuno
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
Masahiro Nishimi
PDF
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
Mikiya Okuno
PDF
Database qpstudy-okuno
Mikiya Okuno
PDF
LightSwitch 結局何ができるの
Yoshitaka Seo
PDF
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
PDF
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
Koichiro Matsuoka
PDF
5分で理解するクラウドビジネスアプリ
Yoshitaka Seo
PDF
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
PDF
レスポンシブWebデザインのサイトを作る前に
Yuki Nakane
PDF
Webデベロッパの祭典@東京:Webエンジニアの視点
masayoshi takahashi
PPTX
ぼくたちのじゅたくかいはつ(と品質の話)
Atsushi Harada
PDF
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
Ryuji Tamagawa
PPTX
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
慎一 古賀
PDF
【B-3】 社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~ 原島法子氏/岩永義弘氏
Developers Summit
PDF
phpspecで始めるBDD
Yuuki Takezawa
PDF
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
Koichiro Matsuoka
PDF
My sql casual12lt
Meiji Kimura
PDF
LightSwitchでWebアプリ開発
Yoshitaka Seo
PPTX
Blendの便利機能振り返り
一希 大田
なぜ、いまリレーショナルモデルなのか
Mikiya Okuno
デキるプログラマだけが知っているコードレビュー7つの秘訣(DevLove版)
Masahiro Nishimi
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
Mikiya Okuno
Database qpstudy-okuno
Mikiya Okuno
LightSwitch 結局何ができるの
Yoshitaka Seo
テストとリファクタリングに関する深い方法論 #wewlc_jp
kyon mm
DDDオンライン勉強会#2 「集約・境界付けられたコンテキスト」
Koichiro Matsuoka
5分で理解するクラウドビジネスアプリ
Yoshitaka Seo
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
レスポンシブWebデザインのサイトを作る前に
Yuki Nakane
Webデベロッパの祭典@東京:Webエンジニアの視点
masayoshi takahashi
ぼくたちのじゅたくかいはつ(と品質の話)
Atsushi Harada
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
Ryuji Tamagawa
運用管理者のための「開発者からみたDevOps」 - Visual Studio 2015 新機能から考える開発者の取り組み
慎一 古賀
【B-3】 社内ソーシャルメディア開発トライ&エラー ~おれたちの4tate~ 原島法子氏/岩永義弘氏
Developers Summit
phpspecで始めるBDD
Yuuki Takezawa
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
Koichiro Matsuoka
My sql casual12lt
Meiji Kimura
LightSwitchでWebアプリ開発
Yoshitaka Seo
Blendの便利機能振り返り
一希 大田
More from Mikiya Okuno
(12)
PDF
サポート一筋24+年のエンジニア、サポートのイロハは E4500に教わった。 Sun Microsystems 勉強会〜1994年頃から2000年頃の思い...
Mikiya Okuno
PDF
MySQL Cluster 新機能解説 7.5 and beyond
Mikiya Okuno
PDF
MySQL 5.7 トラブルシューティング 性能解析入門編
Mikiya Okuno
PDF
What's New in MySQL 5.7 Replication
Mikiya Okuno
PDF
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
Mikiya Okuno
PDF
MySQLトラブル解析入門
Mikiya Okuno
PDF
Mysql toranomaki
Mikiya Okuno
ODP
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
Mikiya Okuno
PDF
MySQL 5.6新機能解説@dbtechshowcase2012
Mikiya Okuno
PDF
Database smells
Mikiya Okuno
PDF
MySQL日本語利用徹底入門
Mikiya Okuno
ODP
Performance Schema @ MySQL Casual #2
Mikiya Okuno
サポート一筋24+年のエンジニア、サポートのイロハは E4500に教わった。 Sun Microsystems 勉強会〜1994年頃から2000年頃の思い...
Mikiya Okuno
MySQL Cluster 新機能解説 7.5 and beyond
Mikiya Okuno
MySQL 5.7 トラブルシューティング 性能解析入門編
Mikiya Okuno
What's New in MySQL 5.7 Replication
Mikiya Okuno
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
Mikiya Okuno
MySQLトラブル解析入門
Mikiya Okuno
Mysql toranomaki
Mikiya Okuno
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
Mikiya Okuno
MySQL 5.6新機能解説@dbtechshowcase2012
Mikiya Okuno
Database smells
Mikiya Okuno
MySQL日本語利用徹底入門
Mikiya Okuno
Performance Schema @ MySQL Casual #2
Mikiya Okuno
RDBにおけるバリデーションをリレーショナルモデルから考える
1.
RDBRDB におけるバリデーションをにおけるバリデーションを リレーショナルモデルから考えるリレーショナルモデルから考える 奥野 幹也 Twitter: @nippondanji mikiya (dot) okuno (at) gmail (dot) com @Validation Night
2.
免責事項 ● 本プレゼンテーションにおいて示されている見 解は、私自身の見解であって、オラクル・コー ポレーションの見解を必ずしも反映したもので はありません。ご了承ください。
3.
自己紹介 ● MySQL サポートエンジニア – 日々のしごと ●
トラブルシューティング全般 ● Q&A 回答 ● パフォーマンスチューニング など ● ライフワーク – 自由なソフトウェアの普及 ● オープンソースではない ● ブログ – 漢のコンピュータ道 – http://nippondanji.blogspot.com/ 今日は個人として 参加しています。
4.
RDB における バリデーションって なんだろう?
5.
SQL インジェクション ● ≠RDB の問題 –
アプリケーションが意図しない SQL を生成してしまう問題 – アプリケーションの問題 – RDB 側でバリデーションは要らない、アプリでやってくれ。 話が終わった!!
6.
入力バリデーション ● ≠RDB の問題 – アプリケーションが意図しないデータを受け付けてしまう 問題 –
アプリケーションの問題 – RDB 側でバリデーションは要らない、アプリでやってくれ。 話が終わった!! またもや
7.
【悲報】リレーショナルモデルに バリデーションはない。 Validation Constraint
8.
制約( Constraint ) ●
制約とは、評価した結果真となるべき条件式。 ● Type Constraint – データ型が満たすべき条件 – ≒ ドメインの定義 ● Database Constraint – データベース内のデータが満たすべき条件 – 外部キーは Database Constraint の一種
9.
ドメイン ● ドメイン=リレーショナルモデルにおけるデータ型 – 属性(≒カラム)が取りうる値の集合 ●
属性の値は、ドメインの要素のひとつであると考える – 平たく言うと、属性の値は予めドメインに登録されている とされたものだけであるという考え – そうなるようにドメインを設計する
10.
ドメインは究極のホワイトリスト! ● ドメイン=属性が取り得る値の集合 – 値は想定されたもののみ –
集合の要素の一つを取ってくるだけ – つまり、ホワイトリスト ● 事前に判明している値なら、どれを取っても安全なはず だが現実は 甘くない!!
11.
どうやってドメインを表現するか ● 実際にドメインを集合として表現することは不可能に近い – 特に文字列で表現するデータが難しい ● データサイズが大きい ● ドメインの要素数が膨大になる ●
列挙できるがデータサイズが大きいもの – 住所 etc ● 未知の値が多すぎて対処できないもの – 人名、商品名、部品の名称 etc ● フリーダム過ぎるもの – メールアドレス、アカウント名、コメント etc
12.
妥協案=ドメインを制約で表現 ● SQL 上で使用できるツール – CHECK
制約 – CREATE TYPE – トリガー( CHECK 制約がない製品で) – テーブル+外部キー制約 ● 制約≒テーブルへ格納するデータをフィルタリングする
13.
データの危険性 ● ロジックで値をフィルタリングする以上、ホワイトリストには成 り得ない – 格納されている値は安全ではないかも知れない –
攻撃用のコードが仕組まれているかも・・・・ ● XSS 、 CSRF 、セカンドオーダー SQL インジェクション etc バリデーションが 必要では!?
14.
DB の出力⇒アプリへの入力 ● アプリケーションへ入力されたデータは適切にバリデー ションしましょう。 ● バリデーション≠
RDB の問題 – アプリケーションが意図しないデータを受け付けてしまう 問題 – アプリケーションの問題 – RDB 側でバリデーションは要らない、アプリでやって くれ。 ● RDB でやるべきことは制約 – ≒RDB へ格納するデータのフィルタリング
15.
ドメインの設計は超重要 ● 正しいデータ型を使えばアプリケーションによるバリデーショ ンの手間が軽減される ● 数値は数値型を – 数値を文字列で格納するべからず! –
数値型ならバリデーション不要 ● CHECK 制約で取り得る値の範囲を絞り込む – 安全であることが保証されていると GOOD!! ● 英数字のみの文字列など – 正規表現を活用 ● フリーダムなデータはアプリ側で確実にバリデーションを
16.
(余談)本当に正しい値か? ● もし仮にホワイトリスト方式でドメインを実装しても、この問い は完全には消え去らない – ユーザーが間違った値を選択してしまう可能性がある –
Database Constraint で軽減できるが限界はある ● 最終的にデータが正しいかどうかを確かめるのは、アプリ ケーションの運用者 – 確認するのは管理権限を持ったユーザー – ユーザーに身分証の提示を依頼する等 ● 氏名、年齢、住所、電話番号 – 実際に機能するかどうか確かめる ● メールアドレス、 SMS ● 運用設計は重要 – 確認にはコストがかかる – 重要なデータにコストをかける ● 正しさが重要でないデータもたくさんある
17.
SQL ≠ リレーショナルモデル
18.
SQL≠ リレーショナルモデル リレーショナルモデル ● 集合論(述語論理)に基づ くデータモデル ● 全て集合:見出し、組、本 体、ドメイン ● 集合演算に基づく各種操 作が定義されている SQL ● リレーショナルモデルに基 づいたデータベース操作言 語 ● SELECT
に各種リレーション の演算が盛り込まれている ● リレーショナルモデル以外 のデータの扱いおよび操作 も可能 – NULL – 重複 – カーソル
19.
リレーショナルモデルでは 表現できないものがある ● グラフ ● ツリー ● 行列 ●
履歴 ● 全文検索 ● 正規表現 ● ソート ● 集計 ● 空間データ etc etc
20.
リレーショナルモデルの 外側の世界 ● 現実世界のアプリケーション – リレーショナルモデルに適合するデータと、そうでない データが入り乱れている。 –
リレーショナルモデルには定石がある – リレーショナルモデル以外の領域に決定的なやりかた ( DB 設計、クエリの書き方等)はない ● 創意工夫が必要 ● 外側の世界ではリレーショナルモデルを無理に実践すべき ではない!! – そもそも無理 – うまく行ったように見えても技術的負債に ● 両者の境界線を見極めることが重要 – リレーショナルモデルで解決できる部分はリレーショナル モデルを適用すべし!! – そうでない部分はリレーショナルモデルを適用してはなら ない!!
21.
RDB における 制約とバリデーション ● 制約:リレーショナルモデルの世界 –
ドメインを近似する( Type Constraint ) – データの整合性を保つ( Database Constraint ) ● バリデーション:リレーショナルモデルの外側の世界 – アプリケーションと同じようにバリデーションが必要 ● プロシージャ内で使用する値を検証する ● リレーショナルでないデータ ● リレーショナルでない各種操作の実行後 – 部分文字列 – 文字列の結合 – ただし、実際には SELECT で取得した文字列を使って動 的にクエリを組み立てない限り、 RDB 内部で問題になる ことはない。 ● プロシージャ内で PREPARE するべからず
22.
まとめ ● RDB にあるのは制約 – バリデーションではない ● RDB
まわりでバリデーションが必要になるところ – RDB からの出力=アプリケーションへの入力 ● バリデーションはアプリケーション側の課題 – リレーショナルモデルに沿わないデータやロジック ● プロシージャ内で PREPARE するべからず バリデーションについて考えるときも、 リレーショナルモデルについての理解は 大切だと思います。
23.
宣伝:新書籍の紹介 ● リレーショナルデータベース実践入門 – リレーショナルモデル、 SQL
、そして DB 設計が主なテーマの書籍です。 – どうやってリレーショナルデータベースを使いこなすか! ● リレーショナルモデル基礎編 – SQL とリレーショナルモデル – 述語論理とリレーショナルモデル – 正規化 1: 関数従属性 – 正規化 2: 結合従属性 – 直交性 – ドメインの設計 etc ● アプリケーション開発実践編 – 履歴 – グラフ – インデックスの設計 – ウェブアプリケーションのためのデータ構造 etc 基礎の基礎から よくある間違いを 指摘しつつ 応用まで
24.
Q&Aご静聴ありがとうございました。
Download