• 締切済み

テーブルの分散について

お世話になります。 個人情報を格納しているユーザーテーブルがあります。 項目は以下の通りです。 ------------------------------ 1.連番 2.ユーザーID 3.名前カナ(姓) 4.名前カナ(名) 5.名前(姓) 6.名前(名) 7.性別 8.生年月日 9.年齢 10.電話番号 11.携帯番号 12.メールアドレス 13.パスワード 14.職業 15.郵便番号 16.国 17.住所(都道府県) 18.住所(市区町村) 19.住所(町域(番地)) 20.住所(建物名) 21.備考1 22.備考2 23.備考3 24.備考4 25.備考5 ------------------------------ 上記のように個人情報を1つのテーブルにまとめてセキュリティ上、問題はありませんでしょうか。 もし上記のテーブルを分散するとしたらどのように管理するようにしたらいいのでしょうか。 くだらない質問で大変申し訳ありませんがご教授いただけたら幸いです。 何卒、アドバイスの方を宜しくお願いします。

  • MySQL
  • 回答数1
  • ありがとう数0

みんなの回答

  • hymat
  • ベストアンサー率58% (95/162)
回答No.1

基本的に、セキュリティはデータベース単位のパスワードですから、テーブルを分けるかどうかは決定的ではないと思います。万一、パスワードが破られたら全部が漏洩したも同然です。特別に強固にするなら、テーブルを分けるだけでなく、別のデータベースにすべきでしょう。 しかし、データベースのパスワードが破られなくてもSQLインジェクション( http://www.geocities.jp/ikepy0n/SQLInjectin.html など参照)でデータを読み出される可能性があります。その対策としてテーブルを分けることはあります。 頻繁に使うのはログイン時のユーザーIDとパスワード、および表示用のユーザー名くらいでしょうから、それだけを別テーブルに切り出すのが現実的でしょう。処理も軽くなるはずです。 ただしパスワードはハッシュ化しておくべきです。そうすれば万一の際にもユーザーIDとユーザー名、およびハッシュ化されていて使えないパスワードの漏洩だけで済みます。 もっともSQLインジェクション対策としてはプログラム側で入力値をエスケープする処理を入れるのが普通なので、それが完全であれば必ずしもテーブルを分けなくても構いません。どこまで万一の脆弱性に備えるかというトレードオフになるでしょう。

関連するQ&A

  • SQL文だけで可能な処理でしょうか?

    今回初めて投稿いたします。 質問内容で、失礼等ございましたら、お伝え下さい。 過去の質問も検索したのですが、それらしいものが見つけられませんでした。 もし、過去に同様の内容がございましたら、お教えください。 さて、質問内容ですが、 当方Accessを少々かじったことがある初心者です。 今回、VB6.0+SQLに挑戦していまして、SQL文で往生しています・・・ 下記のないようをSQL文(又は、ストアド)を記述したいのですが、可能でしょうか? それとも、ワークテーブル等を作成しなければ無理処理なのでしょうか? T郵便番号(テーブル)   郵便番号   都道府県_漢字   市区町村_漢字   町域名   都道府県_カナ   市区町村_カナ   町域名_カナ T事業所郵便番号(テーブル)   郵便番号(個別番号)   事業所名_漢字   事業所名_カナ   都道府県_漢字   市区町村_漢字   町域名 住所検索(フォーム)   mySearch(検索キー) 住所検索.検索一覧(MSFlexGrid)   郵便番号   漢字    カナ 住所検索フォームのmySearchにキーを入力したときに T郵便番号の曖昧検索 郵便番号 漢字(都道府県_漢字 + 市区町村_漢字 + 町域名)  カナ(都道府県_カナ + 市区町村_カナ + 町域名_カナ) T事業所郵便番号の曖昧検索 郵便番号 漢字(事業所名_漢字)  カナ(事業所名_カナ) 6つの項目を検索して、住所検索.検索一覧(MSFlexGrid)の3項目に表示する。 取り留めない文章になりましたが、SQL文だけで可能な処理でしょうか? よろしく、お願い致します。 尚、テーブルのデータは、郵政省の郵便番号データを利用していまして、一部省略してあります。

  • テーブル設計につきまして(正規化)

    顧客情報管理サイトを作ろうと思っています。 ・非正規化  {顧客コード , 氏名 , かな名 , 性別 , 郵便番号 , 都道府県 , 市区町村 , 建物名 , 電話番号 ,  FAX番号 , 携帯番号1, 携帯メール1 , 携帯番号2 , 携帯メール2 , 顧客ランク,備考}  の列を考えております。 ・正規化テーブル  1.顧客情報テーブル   {顧客コード , 氏名 , かな名 , 性別 ,郵便番号(外部キー) , 建物名 , 電話番号 ,   FAX番号 , 携帯番号1, 携帯メール1 , 携帯番号2 , 携帯メール2 , 顧客ランク,備考}  2.郵便情報   {郵便番号(主キー) , 都道府県 , 市区町村 これ以上、正規化できないと思っているのですが、顧客情報テーブルをもっと効率よく テーブルを設計し、正規化できるものでしょうか? よろしくお願いします。

  • 2つのテーブルで使っているフィールドの編集

    電話番号や会社名などの個人情報が入っているテーブル1と 書き込んだ日付や出荷した荷物などの詳細が書かれているテーブル2があります。 (テーブル2には同じ会社に対して何種類か書いているので"登録番号"フィールドには同じ"登録番号"が存在する場合がある) この2つのテーブルを現在"登録番号"で繋いでいる状態なのですが、 この"登録番号"は穴空き連番になっている状態です。 この穴空き連番を綺麗な連番に変えたいと思っています。 なので穴空き連番と別フィールドに仮に振った綺麗な連番に書き換えたいと思っています。 作業順としては (1)"登録番号"と"連番"を最小値から比較していき、"登録番号"の空きを探す (2)"登録番号"の空きが見つかったらコレを一時保存、連番も一時保存 (3)次に登録されている"登録番号"を探す。 (4)"登録番号"発見したら、一時保存していた"登録番号"に一時保存していた"連番"を入れる *テーブル2には"登録番号"が複数ある場合があるため複数あるものはすべてコピー といった作業を繰り返したいのですが、 伝わりますでしょうか・・・ 分かりにくい場所は多いと思いますが何かいい案はありますでしょうか 他にこうした方が簡単というものがあれば教えてください。 ヒントでもいただければと思い質問しました。

  • アクセスでテーブルの一部を他テーブルを使って更新をしたい

    [ユーザーリスト]というテーブルがあり、その中にはユーザー名、住所、電話番号などが入っています。 後から電話番号の更新があったユーザーを修正するために、新しい電話番号とユーザー名だけが入っている[更新リスト]というテーブルを使って、[ユーザーリスト]の電話番号だけを一括で修正することはできるのでしょうか。 わかりにくい説明で申し訳ありませんが、ご回答の方宜しくお願いします。

  • access2000の構文エラー

    みなさんこんにちは。access2000で会社の住所録を作っているんですが、vbaでプログラムを作っているときにどうしても分からない構文エラーがでるので教えてください・・・ 以下の & "ORDER BY 姓カナ,名カナ;" がどうしてもひっかかります。 ちなみに全体は下です。 よろしくお願い致します。 '概要:サブフォームに個人リストを表示する Private Sub SetSubIndividual() Dim strSql As String Dim frm As Form_個人情報入力 Set frm = Form_個人情報入力 If IsNull(frm.TXT姓カナ) Then Exit Sub strSql = "SELECT 個人ID AS 番号, [姓] & ' ' & [名] & '(' & [姓カナ] & ' ' & [名カナ] & ')' AS 名前 " _ & "FROM 個人情報 " _ & "WHERE 姓カナ Like '" & frm.TXT姓カナ & "*' " & "ORDER BY 姓カナ,名カナ;" frm.FRM名簿SUB.Form.RecordSource = strSql frm.FRM名簿SUB.Requery frm.GRP選択 = fncGetHeader(frm.TXT姓カナ) End Sub

  • Access]2つのテーブルを比較してフィールドの一部が一致したデータを抽出

    2つの名簿テーブルを比較してどちらのテーブルにも含まれている個人を抽出したいと考えております。 テーブル名とフィールドは以下のとおりです。 ==================== テーブル名「名簿A」 氏名 電話番号 住所 メールアドレス ==================== テーブル名「名簿B」 姓 名 電話番号 住所 メールアドレス ==================== たとえば、この2つの名簿をメールアドレスで一致したものを抽出する場合は選択クエリのデザインビューで「名簿A」のフィールドを読み込ませ、 メールアドレスフィールドの抽出条件として Like [名簿B].[メールアドレス] を入れれば抽出ができたのですが、メールアドレスは、名簿ごとに記入されていたりしなかったりするので、名前での一致を行いたいと思っています。 ここで問題なのが、名簿Aは「氏名」で入力されているのに対し、名簿Bでは「姓」と「名」が別フィールドになっております。 そこで自分なりにやってみたのが、選択クエリのデザインビューで「氏名」のフィールドの抽出条件として Like (*[名簿B].[姓]*) を設定するものでした。 これがうまくいけば最終的には Like (*[名簿B].[姓]*) And Like (*[名簿B].[名]*) という風にして、名簿Aの「氏名」フィールドに名簿Bの「姓」も「名」も入っているものを抽出できるかな?と考えたのですが、上記のように入力すると、自動的に Like ("*[名簿B].[姓]*") となってしまい、何も抽出されなくなってしまいました。 このような方法では希望する抽出は行えないのでしょうか? お分かりのかた、よろしくお願いいたします。

  • 町域って?

    大変非常識な質問で申し訳ありません。 ○○市△△1番地1号 ××マンション111号 に住んでいるとします。 いつもよくわからないのですが、 町域・番地の欄って△△も含みますか?? 町域・番地の例には「3-3-3」としか書いてありません。 しかし、郵便番号・都道府県、市区町村郡、町域・番地、建物名を記入する場合、 市区町村郡→○○市 建物名→××マンション111号 となりますよね? そもそも町域・番地に数字しか並ばない場合ってあるのでしょうか?

  • Accessで住所分割 並び順で問題?

    Accessで住所を4項目(都道府県・市区町村・町域・その他)に 分割しようとしていますが、市区町村の分割がうまくいきません。 並び順に問題がある気がしているのですが ご教授いただけると助かります。 ■マスタ登録状況■■■■■■■■■■■■■■■■■■■ ※日本郵政HPから郵便番号一覧をダウンロードし以下を用意 ○都道府県一覧 都道府県 --------- 東京都 神奈川県 ○市区町村一覧 ※市区町村が(以下にない場合)などのデータは削除済 都道府県 市区町村 ----------------------- 神奈川県 横浜市金沢区 神奈川県 横浜市 ○市区町村一覧 ※町域が(以下にない場合)などのデータは削除済 都道府県 市区町村   町域 ---------------------------------------- 神奈川県 横浜市金沢区 福浦 神奈川県 横浜市金沢区 平潟町 神奈川県 横浜市    中区新山下 ■処理フロー■■■■■■■■■■■■■■■■■■■ 【実行前】住所一覧 ワーク          都道府県 市区町村 町域 ---------------------------------------------------- 神奈川県横浜市金沢区福浦*-*-* (1)都道府県分割クエリ実行 ・都道府県をセット ・ワークから都道府県を削除 【クエリ(1)後】住所一覧 ワーク          都道府県 市区町村 町域 ---------------------------------------------------- 横浜市金沢区福浦*-*-*   神奈川県 (2)市区町村分割クエリ実行 ・市区町村をセット ・ワークから市区町村を削除 【クエリ(2)後】住所一覧 ワーク          都道府県 市区町村 町域 ---------------------------------------------------- 福浦*-*-*         神奈川県 横浜市金沢区 (3)町域分割クエリ実行 ・町域をセット ・ワークから町域を削除 【クエリ(3)後】住所一覧 ワーク          都道府県 市区町村 町域 ---------------------------------------------------- *-*-*         神奈川県 横浜市金沢区 福浦 !!!!!クエリ(2)市区町村分割で困っています!!!!! ■クエリ実行結果■■■■■■■■■■■■■■■■■■■ 欲しい結果↓ ワーク          都道府県 市区町村 町域 ---------------------------------------------------- 福浦*-*-*         神奈川県 横浜市金沢区 現状↓ ワーク          都道府県 市区町村 町域 ---------------------------------------------------- 金沢区福浦*-*-*         神奈川県 横浜市 ■クエリSQL■■■■■■■■■■■■■■■■■■■ クエリ(2)市区町村分割(1) ※市区町村をセット UPDATE 住所一覧, 市区町村一覧 SET 住所一覧.市区町村 = 市区町村一覧.市区町村名 WHERE (((住所一覧.ワーク) Like 市区町村一覧.市区町村 & "*") AND ((住所一覧.都道府県)=市区町村一覧.都道府県名)); クエリ(2)市区町村分割(2) ※ワークから市区町村を削除 UPDATE 住所一覧 SET 住所一覧.ワーク = Replace(住所一覧.ワーク,住所一覧.市区町村,"") WHERE (((住所一覧.市区町村) Is Not Null)); 市区町村一覧の並び順を降順にしたり、 間に選択クエリをはさんでLen(市区町村)で降順にしたり、 「横浜市金沢区」が「横浜市」より先に来るようにしていますが うまくいきません。 長文ですがどうぞよろしくお願い致します。

  • 【MySQL】1対1でテーブルをあえて分ける

    mysqlを使用してデータベースを作成しているのですが データベースでテーブルを分けるときって 【アカウントテーブル】 ID アカウント 名 アカウント パスワード 名前 住所 電話番号 職業 【職業テーブル】 職業ID 職業名 というような1対多というのはよく組むとおもうんですが 下記のような 【アカウント情報テーブル(アカウント情報)】 アカウントID アカウント 名 アカウント パスワード 【アカウント情報テーブル(プロフィール情報)】 アカウントID 名前 住所 電話番号 職業 1対1の関係でテーブルをジャンル(エンティティ)ごとに複数にわけて あとでリレーションして一個にまとめるというのはデータベース的にあまりよろしくないのでしょうか? 何故、こんなことしたいかというと、1テーブルあたりのカラム数がかなり多くなってくると PHPでデータベースを書き込んだり呼び出したりする時に毎度多くのカラムを取り扱わなければならず SELECTで、カラムを一個一個選んで行かないといけません。 しかし、取り扱いたいカラムは大抵の場合あるジャンルだけなので リレーションするかしないかで、あるジャンルのデータだけを取り扱えれば 効率がよくなるのでは? というのがあります。 また、視覚的にカラムの把握もしやすくなります。 この1対1テーブルは、DB設計的にどうなでしょうか?

    • ベストアンサー
    • MySQL
  • 異なるDB間の異なるテーブルの特定レコード間のリンクは可能か?

    Window98, Access2000を使用しています。 現在(1)住所録DBと(2)家計簿DBをAccessにて作成しています。家計簿DBは長年使っていますのでかなりの情報量です。(1)の住所録DBは先日から作り始めたばかりです。そこで質問させていただきたいのですが、(2)の家計簿DBにあるAccount名と住所録DBにある会社名とリンクをさせたいのですがどのようにしたらよいのでしょうか? 外部テーブルとしてリンクさせるテーブルを新たに新規Account名として追加して家計簿DBにつくることは出来ますが、完全な目的達成の問題点として、 1)家計簿DB内にあるAccount名の数は1000件を超えていますが、そのそれぞれのAccount名テーブルはかなり簡素なものなので、そのテーブル構造及びフィールド(住所、担当者(個人名)、交信情報(メモ))やそれぞれのリンク構造は住所録DBを使いたい。但し、1000件以上のAccount内容全てにその詳細情報は不要で、家計簿DBの特定のAccount名につき住所録DBの会社テーブルにある特定のレコードとリンクさせ、内容を充実させたい。即ち異なるDB間で特定のテーブル内にある特定のレコード間のリンクは可能か否か? 2)家計簿DB内のAccount名は会社名もあれば個人名もあります。一方住所録DBには、家計簿DBのAccount名テーブルの該当リンク先テーブルとして、会社名は (a)会社テーブル、個人の場合は (b)担当者(個人)テーブルのように2種類のテーブルが存在していますが、それぞれ該当レコードにリンクさせる事は可能か? 上記1)、2)に付き技術的可能性の可否について、或いは目的達成のためのアイデアが頂ければ喜びます。宜しくお願いします。