「ゲームプログラミング/RPG/データベースとは」の版間の差分

削除された内容 追加された内容
編集の要約なし
312 行
なお、「死のオルゴール」はけっしてネット上の単なるウワサの類ではなく、けっして改造ロム版でもなく、すでに1980年代の時点で(攻略本ではなく)ドラクエ3のファンブック『ドラゴンクエスト3マスターズクラブ』にその没アイテムとバグ技の存在が、作者の堀井雄二氏によって紹介されています。
 
没アイテムなどでもゲームデータからの登録を消さない理由については、まったく製作元のエニックス(現スクウェア・エニックス)からは言明されていませんが、おそらく下記コラ、没相手アイテ以降id番号を維持することにうな理由り、デバッグの手間を減らすためろうと思います。
 
{{コラム|実社会のデータベースでは過去データは消さない|
 
もし在庫部品データで、購入元メーカーで生産中止になったりした部品があっても、一切、在庫データベースからは登録を消しません。
 
もし消したりすると、次の登録番号の部品との登録情報の連続性が無くなり、登録データが飛び飛びになるので、大変に管理が難しくなるからです。
 
だからともかく、生産中止部品のデータベース管理では普通、その部品の末尾コメントに「生産中止」などと書き足すだけにして、登録そのものは維持します。
 
 
また、自分が使っていなくても、過去の自社製品を購入した客先がその部品を組み込まれた自社製品を使っている場合もありますので、残す必要があります。
 
 
だからもし、生産中止でなく単に入力ミスなどで登録済みの部品をまた登録してしまったことが判明した場合も、
最新の登録IDでない限りは、消すのではなく、末尾コメントに「登録ミス。すでにID○番で登録済み。」のような記録を書いて残したままにするのです。
 
 
こういうのはデータベースを運用する際の基本テクニックです。
 
在庫データベースに限らず、たとえば会員制登録サイトなどでも、過去の退会した会員のデータには、新会員は上書きできません。
 
だから退会会員のID番号は欠番になるだけで、他の会員はまったく退会会員のID番号は使えません。
 
 
製造業の図面などの「部品表」の番号でも、同じようなテクニックが使われます。設計変更により過去の廃止になった部品に当てられていた番号は、消すのではなく、新規の番号を確保して、その新規番号に代替の新部品を割り当てるというテクニックです。
 
また、「登録IDを最整列して並び替える」なんてことは、一切、しません。そもそも、在庫ソフトにそのような機能も原則、ありません。
 
なぜなら、すでに紙に印刷した実物の台帳に保管されている登録ID番号までを、在庫管理ソフトで書き換えることは不可能だからです。
 
 
これはIT業界も同じで、いくらソフト内で番号を並び替えても、過去に紙の台帳に印刷して会社の書類棚に保管したままの印刷情報までは書き換えできないのです。実物の膨大な台帳などがあることを忘れないようにしましょう。
 
一般に在庫の台帳は小さな事業所でも数千種類の在庫部品があるので、台帳にあるその数千種の再チェックをするのは時間の無駄なので、並び替えはしません。
 
もし在庫番号の並び替えをすると、「本当に並び替え後の番号が合っているか?」などのチェックの手間が生じます。
}}
 
==== ハッキング体策の必要性 ====
{{コラム|テキスト読み取り機能へのハッキング問題|
:※ 模倣犯を防ぐために、下記は意図的にやや雑な内容にしています。詳細すぎる手口は書かないでください。
 
たとえば、ゲーム製作ツールにCSV出力およびCSV読み取りの機能があって、
 
<nowiki>ID=0番, 名前=アレフ, 職業=ヘタッピ剣士, レベル=1, HP=20, 最大HP=20, 攻撃力=8, 素早さ=7</nowiki>
 
に該当するデータをCSV形式で、
 
0,"アレフ","ヘタッピ剣士",1,20,20,8,7
 
と出力したとしましょう。CSVファイルの一般的な区切り文字はカンマ(,)です。数値でない文字列データに引用符("")を使うかどうかはソフトやその設定によります。
 
さて、データベースの内容をCSV出力できるようにすえば、エクセルなどで編集できて便利です。
 
開発者自身が個人でCSVを使う場合は、CSVで特に問題ありません。
 
問題点は、ハッキング(クラッキング)の手口として、CSVなどのデータの区切り小文字を悪用した典型的手法があるという事です。
 
 
たとえば、ユーザーでもキャラクター名と職業名の変更だけをしてもらう機能をつけたとしましょう。
 
ここで、もしユーザーを装った悪意のハッカー(クラッカー)が、キャラ名「アレフ」→「エドモンド」の変更を装って、
 
キャラ名を「"エドモンド","新世代の勇者",99,255,255,255,255(※末尾に改行文字)」とつけたら、
 
変更を許可してないレベルやHPや攻撃力などのデータまでを書き換えできてしまいかねません。
 
あるいは、もしネット通信RPGで、キャラ「アレフ」の利用ユーザーAさんと、次IDのキャラ「ベス」の利用ユーザーBさんが別ユーザーなら、
 
「"エドモンド","新世代の勇者",99,255,255,255,255(※末尾に改行文字)0,"ベス","痴漢",1,1,1,1,1」と他人のデータまで書き換えする悪用をされかねません。
 
:※ なので、世間の普通のネットサービスでは、そもそもネット上からのCSV読み込み自体を禁止していると思います。
:また、実際には、データ内にハッキング対策用の非公開データを幾つも埋め込むなどして、その非公開データの無い捏造データを発見しやすくする対策などもしていると思われます。
 
 
このような手法で、データベースをハッキングするという、典型的手法があります。
 
なお、ハッキングをして他人や他人のソフトなどに損害を与えたりすると、当然ですが法的に処罰されるので、絶対にハッキングしないようにしましょう。
 
 
CSVを悪用したハッキングに限らず、HTMLのような他のテキスト形式のIT技術でも同様に、区切り文字や制御文字などをハッキングで投稿するという典型的手法があります。
 
たとえばHTMLのハッキングなら、典型例として、個人が開発したネットのブログ機能ソフトなどでも、たとえば投稿欄に<code></body></code> などのHTML文字を入れるというハッキング手法があります。
 
なので、大手ネット会社の採用している投稿ブログ用サーバソフトなどには、投稿時にHTMLなどを無効化してそのまま表示する<nowiki><pre> ~ </pre></nowiki>タグ機能のようなもの(実際どうかは非公開)がついているの普通です。
 
しかし、これにすら簡単なハッキング方法があって、つまりその無効化タグそのものを終了したと錯覚させるテキストを投稿してしまうという、つまり
 
<nowiki></pre> (※ここにハッキング用コード) </nowiki>
 
という簡単な方法でクリアできてしまいます。
 
 
<nowiki></pre> </nowiki> タグで始まってないかチェックする機能をつけたとしても、
その機能すら、ハッキングでは、ハッキング用コードの冒頭に正常コードの用のpreタグをつけるという方法で抜け穴されてしまいます。つまり、
 
<nowiki><pre> ~ </pre></pre> (※ここにハッキング用コード) </nowiki>
 
のような後半部だけハッキング用コードにしてしまえば、冒頭チェック機能は抜け穴されてしまいます。
 
なので、ファイル入力を読み取るというのは、実は、なかなかセキュリティ的には、難しいのです。
 
外部公開しなければ問題ありませんが、問題は昨今の「クラウド」だの何だのの目的でもし上司からの「外部公開せよ」という命令のある場合です。
外部との共同作業というのは、そう簡単ではないのです。
}}