SQLでパスワードを平文で格納してはいけない データベース設計における重大なセキュリティリスクのうちの一つに、SQLでパスワードを平文で格納するというものがあります。 これは重大なセキュリティ欠陥であり、権限のない人に特権的なアクセスを与えるセキュリティリスクを生じさせます。 パスワードを平文で格納したインシデント例 パスワードは、よく文字列型の列としてAcountsテーブルに格納されます。 CREATE TABLE Acounts ( accountid SERIAL PRIMARY KEY, account_name VARCHAR(20) NOT NULL, email VARCHAR(…
副題 問題にぶつかると「正規表現を使えばいい」という人がいる。 そして問題を二つ抱えることになる。 事例:検索エンジンの必要性 webサイトで記事の数が膨大になるにつれて、検索機能の必要性が明らかになる。 分類して設置しておくことも一つの解決策だが、分類が難しい記事もあるし、結局は検索機能が必要になる。 検索には次のような用件が求められる crashで検索すると、crashed,crashes,chrashingなどが出てくる 記事が増加しても処理が重くならない 確かに、オンラインでのテキスト検索は一般的になった。 しかしSQLでテキスト検索を高速かつ正確に行うのは、簡単そうに見えて難しい。 …
ポリモーフィックなテーブルを作成したい。 あなたはバグレポートを管理するシステムを作成しようとしています。 そしてこのバグレポート管理システムに新たなる要件が届きました。 その要件とは「バグについてのコメントを書き込めるような機能が欲しい」というものです。 つまり、バグについての情報があるテーブルと新たに作成されたCommentsというテーブルには一対多の関連が存在する。 ところが問題は -- バグについての情報があるテーブルは一つとは限らないこと -- 例えば、issueというテーブルを継承した二つのテーブル Bugs FeatureRequests があるかもしれない。 この状態で(複数の…
この記事は? SQLアンチパターンの備忘録です。 特に今回は5章の「エンティティ アトリビュート バリュー」 と呼ばれる手法の悪い点と改善策をまとめました。 エンティティ アトリビュート バリュー とは あなたはバグレポートを管理するシステムを作成しようとしています。 UI,UX,使用する言語が決まりましたが、SQLのデータベースの方式がなかなか決められません。(データベース設計のこと) 特に、バグのデータといっても、イシュー(要望)として扱われるのか、プロブレム(問題)として扱われるのかの二種類のデータがあることに苦悩しています。これら二つをサポートしたデータベースを仮に作成した場合、どちら…
外部キー制約とは何か? 外部キー制約とは、SQLのテーブルに課す制約の一種。 外部キー制約を設定したカラムは、設定時に指定した親テーブルの特定のカラムにデータが存在するかどうかを、CRUDが発生するたびにチェックしてくれる 制約を設定する際には 対象となる「子」のテーブルと より強い権限を持つ「親」テーブルを指定する Create table文発行の際に設定し、次のような予約語で設定する FOREGIN KEY (カラム名) REFERENCES 親テーブル(カラム名) 外部キー制約具体例 今、Bugsというテーブルには、reported_byカラムが存在し、次の条件を満たすとする CRUDの…
SQLアンチパターンの備忘録です。 主キーは適切に選ばなければえらい目にあう 例)ジョンはwebアプリケーションを管理するエンジニアだ。 このwebアプリケーションは記事をタグ付けして管理することがウリであり、記事の内容が格納されているAriticleテーブルとタグの種類を格納しているTagsテーブル。そしてその二つを関連付ける次のArticleTagsテーブルを管理している。 CREATE TABLE AtrticleTags ( id SERIAL PRIMARY KEY, article_id BIGINT UNSIGNED NOT NULL, tag_id BIGINT UNSIGEN…