blog

Windows 7 64bit版でhostsファイルを編集する

2010-07-03 20:00:57 贅肉的知識 Windows Comments: 0
32bit版は平気だけど64bit版は大変。

すんげー大変でした。
なんでこんなアホな仕様になってしまったんだろう。WOW64の弊害?
  1. メモ帳を右クリックして「管理者として実行」
  2. 開く
  3. 右下を「テキスト文書」から「すべてのファイル」に変更
  4. ファイル名に「c:\windows\sysnative」と入力すると隠しフォルダの中身が見える
  5. drivers/etc/hostsを開く。
デフォルトでlocalhostがコメントアウトされてるのも地味に凶悪な仕様変更だと思う。

ThunderBirdはFirefoxの通信設定の影響を受ける

2010-06-30 19:27:28 贅肉的知識 Comments: 0
ので、FireMobileSimulatorを有効にしたままメールチェックすると、
サーバに接続できなかったり、大変な事が起きる可能性があるかも。

関係ないけど、アカウント情報だけエクスポートしたいと思って、
accountexというアドオンがある事を知ったのだけど、更新されてなかった。
たぶんprofilesディレクトリ下のprefs.jsをとっとけばいいはず。
違ってたら悲しいけどまあいいや。昔使ってたいらんアカウント情報を消しただけだし。

scpで直接繋げないサーバにトンネル接続する

2010-06-26 10:58:23 贅肉的知識 Comments: 0
考えてみればあまりにも当たり前過ぎるけど今まで気づいてなかったこと。

シチュエーション

インターネットからsshアクセス出来るWebサーバと、ローカルからしかアクセス出来ないDBサーバがある。
もしくは、特定のIPアドレスからしか接続出来ないよう規制されており、踏み台のサーバを必要とする。
このような状況下で、直接アクセス出来ないサーバとGUIでファイルのやりとりがしたい。
もちろん、どちらのサーバにもsshでログイン可能な権限をあらかじめ有している。

方法

puttyと任意のscpクライアントソフトを用意する。
puttyでsshポートフォワーディングの設定をする。
ローカルポートに対してscpクライアントから接続する。

sshでsshをトンネルするという発想がでてこんかった。

「トンネル機能を持つscpクライアントソフト」なんて、そもそも必要無いわけで・・・。
「Windows sshトンネル」でぐぐると、このブログが上位に出るあたり、誰も求めない使い方なのかも知れないけど。

Hyper-Vと管理PCをインターネット経由で接続する

2010-06-22 06:06:22 Hyper-V Maniax Comments: 0
堂々の完結編です。感動してモニタが見えなくなるかも。

昔の記事(妥協した結果)

http://rhiz.jp/id/111.html
hamachi のセキュリティが信頼できるかが不透明なので、本番で使うのが怖い。

とも書いてあるし、

やはりhamachiにしようかとも考えたが、Hyper-Vにインストール出来ないので厳しいと思う。

とも書いてある。

ゲストOSに入れて、本来のサブネットにブリッジさせれば動くかも知れないが・・・。

という風にも書いてあるけど、このアプローチは意味が無い気がする。

やりたいこと

Hyper-Vマネージャをリモートで安全に使うために、
インターネット上に存在する管理PCとHyper-VサーバをVPNで繋げる!

セキュリティには不安があるが、とりあえずHamachiを使う。
Hamachiのセキュリティを疑問視するべきなのは変わらないので、極力安全な設定をする。
試す場合は自己責任で。

 

シチュエーション

導入済みのHyper-V Serverがすでにあり、ローカルには管理PCが存在する。
これらはすでに設定が完了しており、リモートデスクトップも使える状態になっている。
また、リモートデスクトップはsshトンネルによってインターネット経由でも使用可能な状態になっている。
(RDP 7.0の暗号化が信頼出来るのであれば、sshトンネルはしなくても良い)
scpやftpなどのファイルの転送手段がある。
IISのFTPはパフォーマンス的な観点ではFileZillaよりずっと早いのでおすすめ。セキュリティは・・・。

インターネット経由で新しい管理PCを稼働させて、ローカルの管理PCを廃止したい。

サーバのユーザアカウントにはパスワードがかかっており、ゲストアカウントがオンになっていたりしないこと。
firewallはoffにしなくても、onのままで設定可能なので、offにするのはうまくいかない時の動作確認に限るべし。

導入

サーバにHamachiをインストールする。
現在公式から配布されているインストーラは、x86版ではあるようだが、それでインストールできる。
https://secure.logmein.com/products/hamachi2/
試したバージョンは2.0.2.85

しかし、インストール後の起動は「oledlg.dll が存在しない」というエラーを吐いて、うまくいかない。
Windows Web Server 2008 R2があれば、system32の中にある同名のファイルを、hamachi本体のあるディレクトリにコピーすれば、このエラーを回避する事が出来る。

起動が完了したら、「システム」「設定」「セキュリティ」で「デフォルトで新しいネットワークメンバをブロックする」にチェックを入れる。

「ネットワーク」「新規ネットワークの作成」で、IDとパスワードを設定する。

Hamachiの設定

管理PCにもHamachiを導入し、サーバとの接続を行う。
サーバ側で、接続してきたIDを「セキュリティ」画面で探し出し、右クリックして「信頼する」。
管理PCに戻り、右クリックでpingが打てる事を確認する。
共有フォルダにアクセス出来ないor適切な制限がかかっていることも確認すると良い。

管理PCの設定

従来通り。

http://blogs.technet.com/hirookun/archive/tags/Maniax/default.aspx
【仮想】Hyper-V Serverを使ったこんな環境を作りたい(4) まで手順を進める。

元サイトが消えたら悲しいので一応要約しておく。
  1. Windows 7 Pro or Ult をインストールする
  2. Hyper-Vマネージャをインストールする
  3. コントロールパネルのプログラムの「Windows の機能の有効化または無効化」で、Hyper-Vツールにチェックを入れる
  4. HVRemote.wsfをダウンロードする
  5. コマンドプロンプトを右クリックして「管理者として実行する」
  6. ダウンロードしたHVRemote.wsfのあるディレクトリに移動し、次のコマンドを打つ。
  7. 管理ツールのHyper-Vマネージャを開いて接続を確認する。だめなら再起動してもう一度試してみる。
cscript.exe hvremote.wsf /mmc:enable
cscript.exe hvremote.wsf /anondcom:grant

セキュリティへの配慮

安全なリモートデスクトップが利用できているなら、
「Hyper-Vマネージャを使いたいときだけサーバでHamachiを起動する」のがベストである。
使わないときはオフにしておく。

NoSQL時代のRDBMS設計 (2/2)

2010-06-13 21:22:32 PHP データベース Comments: 0
JOINをどうするか。

まず、RDBMSで自分が設計するテーブルの種類を洗い出してみた。
  • ハッシュ(設定ファイル的な用途)
  • 一対多のリレーション
  • 多対多のリレーション
  • 人間様向けに視認できるようにするための表(view)
  • なんとかマスタ
  • 取引の記録
こんだけと言えば、こんだけである。

もうちょっとだけ掘り下げておく。有料サイトのアクセス権を管理するシステムを想定する。
  • customersマスタ
  • sitesマスタ
  • purchase_history(誰がいつ何を買ったかの記録 一対多)
  • permission(誰がどこに入れる権限を有するかの状態 多対多)
  • お客様がどのサイトにアクセス出来るかの一覧(ビュー)
リレーションをPHPで書くために最低限必要なことは、関連するすべてのテーブルをreadしないといけない。
それが嫌なら、リレーションの結果として取得したいデータを、あらかじめテーブルに埋めておくしかない。
SQL的に言うなら「パフォーマンスを稼ぐために正規化をあえて崩す部分を作る」ということになる。

「お客様がどのサイトにアクセス出来るかの一覧」を得るための最小限のコードは、次のようになる。
SELECT sites.name
FROM permission
INNER JOIN sites ON permission.sites_id = sites.id
WHERE customers.id = 1
これに対して、あらかじめpermissionテーブルの中にsites.nameを格納しましょう、というアプローチはだいぶナンセンスだ。なので仕方なくこれを分けることにする。

$sites_ids =
SELECT sites_id
FROM permission
WHERE customers_id = 1
$site_names =
SELECT name
FROM sites
WHERE id IN ( 【join(',', $site_ids)】 )
【】の中身はSQLではなくPHPです。
ちなみに、TT用語では、INのことを TDBQCNUMOREQ というらしい。

これを拡大して、「サイトの価格を表示したい」「合計金額も計算したい」となった場合は、合計金額の表示はPHPで計算することになる。カテゴリ別に分類したり、カテゴリごとの合計金額を出すのもPHPの仕事だ。でもそれは元々多次元配列で実現するだろうから、あまり労力は変わらないんじゃなかろうか。

この$site_namesを「購入順」に並べたい。となると、話は少しややこしくなる。
ひとつの方法は、PHPで配列をマージした上でsortしてしまう手である。さもなくば、新しい配列を作って並べ直す。
// $site_idsは ORDER BY dt ASCされているものとする。
// $site_namesは site_id を キーにしているものとする。
$sorted = array();
foreach ($site_ids as $site_id) {
$sorted[] = $site_names[$site_id];
}
ちょっと苦しいけど、まあ出来る。値渡しにしたらメモリ効率は良くないだろうな。

なんだかこの作業って、ORMの内側にある泥臭い実装とあんまり変わらない気がするのだ。
どうせmysqldにはhtmlspecialchars関数は無いので、ビューで受け取った値をさらに加工しているのが実態である。
だったら、いままでSQLに頼ってきた処理も全部PHPで用意しとけば便利じゃね? と思ったりする。

それだけじゃ実現不可能なケースや、実現コストが現実的ではないケースを考えようとしてみたけど、
とりあえずはあんまり浮かばなかった。あとは色々試してみるしかないな。
前へ 1 2 3 4 5 次へ 175 件中 6 ~ 10 件目