ユーザー別所属セキュリティグループ一覧作成

 サラリーマンのみなさーん。体調が悪いとき、会社来てどうしのいでますか?
 私はMS-Excelのマクロに仕事してもらってます。
 ここで、Application.ScreenUpdating = Falseとするのがコツ。
 Trueにすると画面が変わらないので、ただサボっているのと見分けがつかない。
 Falseにすると画面がせわしなく書き換わるので「ああ、マクロが終わるのを待っているんだ」と分かる。処理時間もかかってその分休めるという一石二鳥であります。もっとも見ているこっちの気分が悪くなるので「Falseにしておいて、一行出力するたびにTrueに変えてキーとなるセルをSelect。出力したところを見せておいてまたFalseに戻す、ってのが適当かな。これだと実行状況を適宜監視できるようにした、と説明できる。

 今回はこういうとき、ものすごーく長く休めるマクロの話。マクロでなくてVBAだっけ。
 夏に盲腸で休んでしまったのだけど、そのときたまたま組織変更があったのよね。当然私は権限も無いし(私にアクセス権その他の権限を与えると怖そうだという周囲の気持ちは分かる)関係ないといやあ、ないんだけど。休んでいたときには他の人ががんばってくれて、問題なくきっちりゴール!ってやってくれて、それで終わりのはずなんだけど、この手のことは常に何かしら期待されていて、今回も手順について痛い腹抱えて説明したという経緯があって、それこそギリギリでやってもらって、ってところがあったので、感謝の印に後始末は僕がやろう、と買って出た。権限無いけど。(権限無い人間が話しているから守秘義務は無いと思うがいかがだろうか。それにやばそうなところは外している、oh should I say、もともとないし。)

 組織変更でシステム管理者がやることといえばというと、台帳整備とデータ移行、そしてアクセス権整理。台帳は持っているわけではないので横に置いておいて、データ移行は綺麗にやってくれたようで(以前詳細な手順書いた覚えはあるが)、残るアクセス権が気になった。所定の移行期間の後、無くなるべき人は無くなっていて、付くべきところには付いているか?
 ところがこれを調べる手段がなーい。僕権限無いから。聞いても教えてもらえないんだよね。僕権限無いから。(←しつこい!がこれのおかげで苦労したのだ。)

 なんとかならんかねえ。レビュー可能なように「誰それはどこへのアクセス権持ってます」って一覧表が出てきてくれないと困る。よくかんがえると僕はアクセス権の仕組みすら知らない?え、机の上のアルマジロ本は何かって?これUNIX用だから。
 なぬなぬ、セキュリティグループというのがあって、各ユーザーはこのセキュリティグループに属しており、セキュリティグループごとにアクセス権が付くのか。まあ妥当な設計だなあ。では、セキュリティグループに属しているメンバーを出せばよいのか。イチからたぐってたぐって調査。

 net groupというコマンドでセキュリティグループの一覧を出して、グループごとに net group (グループ名)ってコマンドを発行すると、ユーザーIDが出てくる。
 このユーザーIDをキーに、属しているセキュリティグループを一覧にする。
 で、ユーザーID一件一件についてnet userコマンドを叩いて名前を見つけ、名簿とつき合わせて組織名を補完し、組織別ユーザー別に並べてレビュー可能な形態に。
 あっさり書いてますがここまでくるの大変でした。アクセス権の仕組みからして知らなかったわけですから当然。一覧を作りましたが「二度とこんなことはするまい」と思いました。
 ところが、二度する必要が出てきました。一度目は鬼のような数のバッチファイルを作って、集計したのですが・・・しゃーないVBAで書こう。いやPascalで書いたほうがいいのだけど、最近うるさくなっているからなあ。

 一時期はVBAも捨てたもんじゃないと思ってたんですよ。今取り扱っているデータがMS-Excelの表の座標として見えるからやっていることを見失いにくいんだよね。見失わない限りはある程度適当にできるので、こんな感じでやるかなぁ、と思い立ったらエディターに向かって書いてデバッガーで1ステップずつ実行し、変数の中味を確認して直していればそのうち動くものができてくる。が、やりすぎは危険です。頭の中でアルゴリズムを考えなくてもなんとなく出来るので、プログラミングが下手になります。特に悪影響があるのは「エラー処理をしなくなる」。どうせデバッグモードに落ちるんだし、そのときは自分がいるからなんとかなるや。プログラムとしての完成度は確実に下がりますが生産性を考えると一概に悪いことでもないというのが悩ましいところ。もっとも「検索しても見つからなかった」くらいのエラー処理は必要で、OFFICE TANAKAさん、さすがです。いつも参考にさせていただいております。ありがとうございます。

 というわけで、出来たものは
1.確認したいセキュリティグループの一覧をワークシートの1列目に貼り付けると、net group (グループ名)のコマンドを発行してくれて、戻り値からセキュリティグループ/ユーザーIDの組み合わせ表を作ってくれる。
2.組み合わせ表から、1行=1ユーザーIDで、所属セキュリティグループを横にずらずら伸ばして格納する。
3.ユーザーIDごとにnet user (ユーザーID)コマンドを発行して氏名とアカウントが有効かどうかを引っ張ってきてセットする。
4.別途用意した名簿とつき合わせて、所属組織を補完。

 走らせました。時間かかりました。返ってきたのを見ました。ん?殆ど完璧でないか。
 これでは「後始末は任せとけ」と見栄を張った私の立場が無い。かといってここまで完璧に終わらせてくれた皆様の顔を潰すわけにはいかない。どうしよう。そうだ、最初に全部手作業でやったときに気が付いたことがあったのだ。
 「このセキュリティグループ、メンバーゼロなんですが、グループも消しちゃっていいですかね。」
 「ああ、こないだの案件だ。そういえば念のためグループだけは残してたな。月末目処で消す予定だったんだけど、安定稼動しているからもう必要ないね。ありがとう、じゃあ一緒に消しといて。」
 ハイ、一件落着。

 ちなみに「このマクロ欲しい人いる?」って聞いたんだけど、誰もいらないそうです。だろうな、これだけアクセス権が完璧に管理されているなんて僕も知らなかった。僕に権限が無いのは、僕が手を加えなくても何の問題もなかったからってことらしい。

公開場所
だれもほしいといわなかったのでなし。
フリーソフト開発秘話、目次
ホーム