ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Archive for 11月 2011

Kindle DXのE-Inkが壊れた

leave a comment »

IMG_0932_mid_640_480

<Fig.1 : E-Inkが破損したKindle DX>

このところKindle DXばかり使っていた。Kindle DXはお気に入りの電子ブックリーダーだ。レギュラーサイズのKindleが600×800ピクセル、6インチのE-Inkパネルに対して、Kindle DXは824×1200ピクセル、9.7インチのE-Inkパネルサイズである。現行のKindleは日本語フォントを搭載しているが、俺が持っているレギュラーサイズのKindleはKindle 2であり日本語フォントがない。またKindle DXも同様で日本語フォントはない。そこでこれらのKindleでは文庫本をスキャンしてPDFにして読んでいるのだが、レギュラーサイズのKindle、E-Inkが6インチでは文庫本を読むのに文字が小さすぎて少し辛いところがある。しかしKindle DXの9.7インチサイズE-Inkディスプレイでは、文字が大きくとても読みやすい。

サイズが大きいためKindle DXの重量はレギュラーサイズKindleより重い。レギュラーサイズKindle 2が、公称289g、実測290gだったのに対して、Kindle DXは公称536g、実測545gだった。545gという重量は、通勤カバンに入れて日々持ち歩くことについて実質的に満足できる重量ではあるが、やはり289gのKindle 2を持つと、その差を感じてしまう。

とはいえ、画面サイズの大きさが良いので毎日通勤カバンに入れて持ち歩いていたのだが、ある日、通勤電車に乗るときにカバンからKindle DXを取り出すと、このようになってしまっていた。

IMG_0933_mid_640_480

<Fig.2 : Kindle DXの壊れたE-Ink>

E-Inkの上部半分ほど、右側よりに広範囲で表示できなくなっている。よく見るとパネル左上あたりにひびらしきものがスポットを形成している。

IMG_0934_mid_640_480

<Fig.3 : 壊れたE-Inkにはひび割れのスポットが形成されている>

まったく意識していないのだが、このディスプレイの状況から考えて、カバンの中にあった何か硬いもの、それは音楽プレイヤーか携帯電話かわからないが、それらデバイスの角かどこから圧迫して壊れたように思われる。

E-Inkのパネルは硬いように見えるが、意外に脆いものらしい。Kindle DXはウレタンのケースに入れていたのだが、そのような柔らかいケースではだめだったようだ。少し前にはレギュラーサイズのKindle 2のE-Inkが壊れたが、あれはまったく物理的な影響はなかった。このKindle DXの破損とKindle 2の破損は別の原因だと思われるが、それにしても堅牢性には欠けているように感じる。AmazonのKindleページには、浜辺でKindleを持っている写真や子どもがベッドで読んでいる写真、スーツの内ポケットにそのままKindleを入れている写真などがあり、カジュアルな利用シーンを想像させているが、このようなラフな使い方はお勧めできないようだ。

広告

Written by Yoshio Matsumoto

2011年11月29日 at 1:46 AM

Windows Server 2008 で Windows XP のUSBリムーバブルストレージの使用を禁止するグループポリシーを実現するためにグループポリシー管理用テンプレートを作り適用する

leave a comment »

Active Directoryとグループポリシーはクライアントコンピュータを効果的に管理する強力なツールである。業務コンピュータをWindows ServerとWindowsクライアントで構成する理由の半分はActive Directoryとグループポリシーにあると言っても過言ではないはずだ。

Windows ServerのActive DirectoryとグループポリシーはWindows 2000 ServerからWindows Server 2003、Windows Server 2008と進化してきた。当然ながらWindows XP、Windows Vista、Windows 7と新しいクライアントに対応したグループポリシーが充実したが、残念ながらWindows XPを対象外とするポリシーも増えてきた。

データ漏洩の危険性、あるいはUSBメモリを介して広がるウィルスの蔓延といったセキュリティ上の観点から、クライアントコンピュータのUSB大容量ストレージの使用を禁止したいと多くの管理者は思っているはずだ。Windows Server 2008のグループポリシーでは「リムーバブル記憶領域へのアクセス」に関する多くのポリシーが用意されている。たとえば「リムーバブルディスク:実行アクセス権の拒否」といったものだ。しかしこれらのポリシーの多くはWindows Vista以降が対象である。

Group_Policy_USB_003

<Fig.1 : グループポリシー管理エディターでの「リムーバブル領域へのアクセス」グループポリシー>

Group_Policy_USB_005

<Fig.2 : 「リムーバブルディスク:読み取りアクセス権の拒否」ポリシーはWindows Vista以降が対象>

ではWindows Server 2008のグループポリシーでWindows XPのUSBリムーバブルディスクの使用禁止を管理できないのかといえば、そうではない。従来からの方法として、グループポリシー管理テンプレートを作って適用する方法がある。

そもそもWindowsクライアントコンピュータの挙動は、Windows XP以降は「レジストリ」によって基本的に一元管理されることとなった。したがってレジストリを書き換えることで、Windowsコンピュータの挙動を管理することができる。グループポリシーとは、サーバー側で一括してクライアントコンピュータのレジストリを管理することだ、と言い換えてもいい。グループポリシー管理テンプレートは、クライアントコンピュータのレジストリとグループポリシーを結びつけカスタマイズするものである。

まずWindows XPのレジストリからみて、USBリムーバブルディスクの使用を禁止するにはどうすればよいか。これは多くの技術資料がWebでも手に入り、コンピューターに USB 記憶装置がインストールされている場合は、次のレジストリ キーにある Start 値を 4 に設定するとよい。この値を4にすると、ユーザーがコンピューターに USB 記憶装置を接続しても、その記憶装置は動作しなくなる。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbStor

では実際にレジストリの値がどうなっているか見てみよう。レジストリの値を見るには、クライアントコンピュータに管理者権限のあるアカウントでログオンし、「ファイル名を指定して実行」でRegeditコマンドによりレジストリエディタを実行する。

USB_Regedit_001

<Fig 3 : クライアントPCでRegeditを実行しレジストリの値を確認する>

このように「USBStor」の「Start」値が「3」になっていることがわかる。

ではこの値を4に変えることができるグループポリシー管理テンプレートを作ってみよう。グループポリシー管理テンプレートはテキストファイルなので「メモ帳」などで作ることができる。メモ帳で次のようなファイルを作り、適当な名前で保存する。保存は拡張子.admとする。

—————————————————————-

CLASS MACHINE
CATEGORY !!categorytext
CATEGORY !!subcategorytext

POLICY !!policytext
KEYNAME "SYSTEM\CurrentControlSet\Services\USBSTOR"
EXPLAIN !!explaintext
PART !!label DROPDOWNLIST REQUIRED
VALUENAME "Start"
ITEMLIST
NAME !!Disabled VALUE NUMERIC 3 DEFAULT
NAME !!Enabled VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
END CATEGORY
END CATEGORY

[strings]
categorytext="管理テンプレートによるポリシー"
subcategorytext="リムーバブルドライブの使用制限"
policytext="USBリムーバブルドライブの使用禁止"
explaintext="usbstor.sysドライバーを無効にしてUSBリムーバブルドライブを使用できないようにします"
label="USBリムーバブルドライブの使用禁止"
Enabled="有効(使用禁止)"
Disabled="無効(使用可)"

—————————————————————-

このグループポリシーテンプレートはMicrosoftの英文の技術資料「Using Administrative Template Files with Registry-Based Group Policy Subscribe regpolicy」を見て書いたものだが、記述方法を少し説明すると、まず「CLASS MACHINE」でポリシーの対象がMACHINEポリシーであることを指定する。そしてCATEGORY – END CATEGORYでカテゴリを指定する。この例では2階層のカテゴリを指定している。POLICY – END POLICYでポリシーの名前、対照レジストリ値、説明文などを決める。さらにPARTとITEMLISTでレジストリ値を設定できるようにする。最後の[strings]以降は、説明文など文字列のエイリアスを記述するところだ。

KEYNAMEで対象のレジストリキーを記述し、VALUENAMEでStart値を指定、キーの値はNAME !!Disabled VALUE NUMERIC 3 DEFAULTでデフォルトで値3によって「無効」つまり制限がなくUSBリムーバブルドライブが使用できる、NAME !!Enabled VALUE NUMERIC 4で「有効」つまりUSBリムーバブルドライブの使用が禁止されることになる。「有効」、「無効」という言葉は、「使用を禁止する」というポリシーに対する言葉である。

ちなみにこの技術資料の例では、テキスト部分を[strings]に書き出す書式になっているが、これは直接文字を""で囲って記述してもいい。たとえば次のようにだ。

—————————————————————-

CLASS MACHINE
CATEGORY "管理テンプレートによるポリシー"
CATEGORY "リムーバブルドライブの使用制限"

POLICY "USBリムーバブルドライブの使用禁止"
KEYNAME "SYSTEM\CurrentControlSet\Services\USBSTOR"
EXPLAIN "ドライバーを無効にして使用できないようにします"
PART "USBリムーバブルドライブの使用禁止" DROPDOWNLIST REQUIRED
VALUENAME "Start"
ITEMLIST
NAME "無効(使用可)" VALUE NUMERIC 3 DEFAULT
NAME "有効(使用禁止)" VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
END CATEGORY
END CATEGORY

—————————————————————-

このグループポリシー管理テンプレートを読み込むには、適当な新しいグループポリシーを作り、「管理用テンプレート」をポイントして右クリック「テンプレートの追加と削除」を行う。

GroupPolicyTemplate_004_edit

<Fig.4 : グループポリシーテンプレートの追加と削除>

GroupPolicyTemplate_006_edit

<Fig.5 : グループポリシー管理テンプレートのファイルを開く>

GroupPolicyTemplate_011_edit

<Fig.6 : グループポリシー管理テンプレートを追加した>

GroupPolicyTemplate_012

<Fig.6 : グループポリシー管理エディターで「従来の管理用テンプレート」が表示された>

作成したグループポリシー管理テンプレートを読み込むと、上図のように「管理用テンプレート」の下に「従来の管理用テンプレート」の項目が表示される。この中に作成したポリシーが記述されている。フォルダを展開すると次のようになっているはずだ。

GroupPolicyTemplate_013

<Fig.7 : グループポリシー管理エディタで「従来の管理用テンプレート」項目を展開した>

「従来の管理用テンプレート」-「管理用テンプレートによるポリシー」-「リムーバブルドライブの使用制限」のカテゴリは、インポートした管理用テンプレートに記述した項目である。そしてその中に「USBリムーバブルドライブの使用禁止」ポリシーができていることがわかる。このポリシーを開くと、次のようになる。作成したグループポリシー管理テンプレートの記述したテキストと、このグループポリシー管理エディター上の表示を比べるとよいだろう。

GroupPolicyTemplate_016

<Fig.8 : グループポリシー管理テンプレートの追加によってできて「USBリムーバブルドライブの使用禁止」ポリシー>

「無効(使用可)」となっているオプションを「有効(使用禁止)」にして「適用」しよう。

GroupPolicyTemplate_017

<Fig.9 : 「USBリムーバブルドライブの使用禁止」ポリシーを「有効(使用禁止)」にした>

対象のWindows XPクライアントコンピュータをこのグループポリシーを設定したOUに入れ、グループポリシーを強制的に適用してみよう。グループポリシーの強制的な適用は、コマンドラインでgpupdate /forceコマンドを実行する。

USB_Regedit_002

<Fig.10 : Windows XPクライアントのコマンドラインでgpupdate /forceを実行した>

そしてレジストリエディタregeditで「表示」-「最新の情報に更新」でレジストリの値を確認する。

USB_Regedit_003_edit

<Fig.11 : レジストリエディタで表示を最新の情報に更新する>

USB_Regedit_004

<Fig.12 : レジストリStart値が3から4に変わった>

レジストリの値が3から4に変わったことが確認できた。

このように、グループポリシー管理用テンプレートを自作し、追加することで任意のレジストリ値をグループポリシーによって管理することができる。したがってクライアントコンピュータのどのレジストリ値をどう変えるとよいかがわかれば、Active Directoryによって一元管理することができる。このレジストリとグループポリシーの関係は、Windows XPだけでなくWindopws VistaやWindows 7でも同様である。グループポリシー管理テンプレートを自作し、グループポリシーをカスタマイズしてうまくクライアントコンピュータを管理しよう。

もしこのやり方でうまくいかない場合は、Active Directoryの構成が間違っていないか、あるいはグループポリシーの作り方が間違っていないか確認しよう。グループポリシーは階層構造に適用されるので、より上位で別のポリシーが効いていれば適用されない場合がある。自分の作ったグループポリシー管理用テンプレートの挙動を確認するためには、既存のポリシー追加するのではなく、まずは新しいポリシーを作って試すことを奨める。

SQL Server – 「基準値」テーブルでコードを一括管理する

leave a comment »

SQL Serverによるシステムがある程度になると、いろいろな処理をするためのコードを効率よく処理することが必要になる。学校の場合は、たとえば「教科科目コード」や「時限コード」のような時間割に関するコード、「在籍コード」や「異動コード」など生徒の在籍状態に関するコード、などだ。

これらのコードをシステム上どのようにして処理するかだが、単純に考えると「教科科目コード」や「時限コード」といった名前のテーブルを作りコードを記録することだが、それぞれのコードに対してテーブルを作ると、テーブルの数が増えてシステム全体の見通しが悪くなる。ちなみに、このようにテーブルを作る場合でも、テーブル名は「コード教科科目」や「コード時限」のように「コード」といった共通の名前を前にするとテーブル名を一覧表示したときに見通しがよくなる。もちろん「C_教科科目コード」や「C_時限コード」のようにシンボリックな文字を前につけてもよい。

システムが大きくなると、このようなコードを記録する必要も大きくなる。そこでコードを一括して「基準値」テーブルにストアして管理する方法がよい。そのためにコードはすべて二桁の文字char(2)か、または日付smalldatetimeと統一し、次のようなテーブルを作る。

——————————————————————————-

テーブル名:基準値
フィールド:
基準値管理番号 int IDENTITY(1,1) NOT NULL
      基準分類 varchar(50)
      基準内容 varchar(50)
      基準値 char(2)
      基準日 smalldatetime
      表示順 int

——————————————————————————-

このテーブルで、「基準分類」によってコードの分類をし、コードの内容は「基準内容」に記述する。たとえば次のようにデータをストアする。

——————————————————————————-

基準分類    基準内容    基準値    基準日    表示順
性別          男              01          NULL      1
性別          女              02          NULL      2
異動         入学           01          NULL      1
異動         休学           02          NULL      2
異動         復学           03          NULL      3
異動         留学           04          NULL      4
異動         転学           05          NULL      5
異動         退学           06          NULL      6
異動         卒業           07          NULL      7
教科         国語           01          NULL      1
教科         地歴           02          NULL      2
教科         数学           03          NULL      3
教科         理科           04          NULL      4
教科         保健体育    05          NULL      5
教科         芸術           06          NULL     6
教科         外国語        07          NULL     7
教科         家庭           08          NULL     8
教科         情報           09          NULL     9
教科         商業           10          NULL    10
日程    前期開始日  NULL  2011/04/01   1
日程    前期終了日  NULL  2011/09/30   2
日程    後期開始日  NULL  2011/10/01   3
日程    後期終了日  NULL  2012/03/31   4

——————————————————————————-

この「基準値」テーブルを使って必要なコードを取得する。たとえば「性別」のコードを使うときは、

select 基準内容,基準値 from 基準値 where 基準分類=’性別’ order by 表示順

といったクエリを使う。これを「v_性別コード」のようなビューにしておくのもよいだろう。

「日程」データを取得するには、

select 基準内容,基準日 from 基準値 where 基準分類 = ‘日程’ order by 表示順

とする。

このように、コードを一元管理することで「あのコードを格納したのはなんというテーブルだったっけ」というように探し出す必要がなくなるのだ。

Written by Yoshio Matsumoto

2011年11月10日 at 10:55 PM