本の紹介
私はシステム開発に関する仕事に携わっています。(特にSI)
2、3年前からWEBアプリケーションの脆弱性に関連するシステム開発に携わっていました。
普段、開発しているときにSQLインジェクションが・・・とか、XXSとか・・・なんて意識して
開発している人はあまりいないですよね。(少なくとも私のまわりにはいません)
以下の本は、WEBアプリケーションを開発する人にとっては是非、手に取ってほしいと思います。
体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
- 作者: 徳丸浩
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2011/03/01
- メディア: 単行本
- 購入: 119人 クリック: 4,283回
- この商品を含むブログ (146件) を見る
S2Daoで複数のデータソースを扱う
S2Daoを使用しているシステム(S)で他システムに対してデータを更新しないといけなくなり、他システム(W)用のデータソースを追加します。
変更するファイルは以下の2つ。
・j2ee.dicon
・dao.dicon
それぞれ、S用とW用に分割します。
まず、j2ee.diconについてトランザクション関連以外のコンポーネントを削除します。
・j2ee.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
各システム用のデータソースを定義したj2ee_s.dicon、j2ee_w.diconを作成します。
・j2ee_s.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
"oracle.jdbc.driver.OracleDriver"
"jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:sss"
"USER01"
"PASSWORD01"
600
10
true
・j2ee_s.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
"oracle.jdbc.driver.OracleDriver"
"jdbc:oracle:thin:@zzz.zzz.zzz.zzz:1521:www"
"USER02"
"PASSWORD02"
600
10
true
dao.diconも分割します。それぞれで、S用、W用のj2ee.diconをインクルードします。
・dao_s.dicon
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
・dao_w.dicon
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
ActionやDaoのコンポーネント定義を記載しているapplication.diconを編集します。
・application.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components21.dtd">
←分割後のdao.diconに変更
←分割後のdao.diconに変更
aop.traceInterceptor
〜 省略 〜
<!-- S用システムにアクセスするDAOアスペクト適用 -->
dao_s.interceptor
"jp.co.zzz.xxx.s.dao"
".*Dao"
<!-- W用システムにアクセスするDAOアスペクト適用 -->
dao_w.interceptor
"jp.co.zzz.xxx.w.dao"
".*Dao"
仕組みが理解できていれば、意外と簡単。
テーブルのデータをCSVファイルに出力する
とあるシステムではレプリケーション機能を使っていて、マスター1台、スレーブ2台というような構成になっている。
現時点では原因が判明していないが、レプリケーションに遅延が発生して、ある短い期間でマスタとスレーブでデータ不整合となる状態となった。
現状は整合性が取れている状態なのだが、念のため3台のテーブルの内容に差異がないことの確認をすることになった。
対象のテーブルのデータ量は多くないので、データをCSVファイルに出力させて内容のdiffを取ることになった。
そこで以下を実行し、データをCSVファイルに出力することにした。
$ mysql -uXXXXX -pXXXXX XXXXdb;
mysql>SELECT * FROM テーブル名 INTO OUTFILE "/home/admin/XXXXX.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '囲み文字の指定';
mysql>
Cassandraにデータを入れてみる
インストールフォルダにREADME.txtがあり、そこに書いてあることを実行してみる。
まずはKeyspace1というキースペースを作成する。
[default@unknown] create keyspace Keyspace1;
5fb17170-9fe0-11e0-0000-242d50cf1ffc
Waiting for schema agreement...
... schemas agree across the cluster
[default@unknown]
使用するKeyspaceを指定する。
[default@unknown] use Keyspace1;
Authenticated to keyspace: Keyspace1
[default@Keyspace1]
次はColumn familyを作成する。(RDBでいうところのテーブルみたいなものか?)
[default@Keyspace1] create column family Users with comparator=UTF8Type and default_validation_class=UTF8Type and key_validation_class=UTF8Type;acc99e60-9fe0-11e0-0000-242d50cf1ffc
Waiting for schema agreement...
... schemas agree across the cluster
[default@Keyspace1]
データを入れてみる。
[default@Keyspace1] set Users[jsmith][first] = 'John';
Value inserted.
[default@Keyspace1] set Users[jsmith][last] = 'Smith';
Value inserted.
[default@Keyspace1] set Users[jsmith][age] = long(42);
Value inserted.
入れたデータを取得してみる。
[default@Keyspace1] get Users[jsmith];
=> (column=age, value=42, timestamp=1309085036510000)
=> (column=first, value=John, timestamp=1309085005307000)
=> (column=last, value=Smith, timestamp=1309085015807000)
Returned 3 results.
案外、簡単にできるものなんですね。。。
そりゃ、書いてある通りにコマンド打っているだけですからね。