「権限の分離」をもっとよく知りたいと思う

私は最近「権限の分離(Segrecation of duties, SoD, セグリケーション)」について勉強し直したいと思っているのですが、 手近に良い本が見つからず、困っております。良い書籍や記事をご存知のいらっしゃったら、教えて下さると幸いです。

こんなことを言うのは、WEB業界で働いていると、「権限の分離」「権限の分離」っぽいものが混同されているとしばしば感じるのですが、 さりとて「権限の分離」を語れるほどの語彙も知識もなく、モヤモヤしているからです。

以下、自分なりの「権限の分離」とモドキの理解を書いてみます。

『権限の分離』

権限の分離(セグリケーション)
社員による不正や誤謬を防ぐために、業務を意図的に作り変えること。 1人に権限が集中しないようにしたり、監視役を設けたり、上司による決裁を必須にしたりすること。

『権限の分離』モドキ

権限の分離や不正防止に結果的に貢献することもあるが、貢献しないこともあるし、そもそも不正防止が目的ではなかったりするもののリスト。

上長決裁
特定の業務をする際に、上長による許可を必須にすること。 不正防止・事故防止の目的で行うこともあるが、上長がめくら判を押してしまい、機能しないこともしばしば。 どちらかと言うと、指揮系統の明確化・責任所在の明確化という意味が大きいのかもしれない。

職務分掌
業務を分担して行うこと・分担の仕方。2人以上で仕事をするには何らかの分担が必要になる。 分担を決める際には権限の分離も考慮することもある。

インフラ担当者とアプリ開発者の分離
大型コンピュータやネットワークなどのインフラを構築・運用するには高度な知識と人手が必要である。 よって、インフラを構築・運用する専門の担当者・専門の部署を設けることが多い。

データベースにおける権限階層
データベースソフトウェアでは、使用者の権限を「データの閲覧のみ可」「データの追加のみ可」「データやテーブルの追加削除も可」など、細かく権限レベルを分けて設定できる。データベースソフトウェアは、人間だけでなく別のソフトウェアからも利用されるので、ソフトが乗っ取られた場合の被害を防ぐため、細かい権限設定が重要である。もちろん、人間による不正や誤謬を防ぐためでもある。

SI業界における「開発」「運用」「保守」の分離
サービス開始時の開発、サービスの運用、運用開始後に見つかった不具合の修正や追加機能の実装(保守)を、別々の業者が請け負ったり、 同一業者でも別のチームが行ったりする。ぶっちゃけ請負業者側の大人の都合である。

開発者とテスト担当者の分離
開発者が自分が書いたコードを自分でテストすると、自分のミスを見て見ぬふりをしたり、視野狭窄に陥ったりして、テストが甘くなりがちだと考えられている。 よって、開発者とは別にテスト担当者を置いて、その人にテストさせる。

また、

  • 「開発者の給料は高いから、給料が安いテスターにテストさせるべき」
  • 「訓練を受けたテスト担当者(テストエンジニア)にテストさせる方が確実」

といった事情もある。不正防止に寄与する場合もあるが、主な目的はミスの防止である。

コードレビュー
開発者が書いたコードを、別の添削者が添削すること。不正を抑止する面もあるが、どちらかというとミスを見つけたり、コードのより良い書き方を指導するのが目的。添削者は1人の場合もあれば複数人の場合もある。

ペアプログラミング・ペア作業 1人でもできるプログラミングや作業をあえて複数人で行うこと。目的は色々あり、

  • 3人寄れば文殊の知恵(2人だけど)
  • 目玉が2個より4個の方がミスも見つけやすい
  • 別途コードレビューする工程を省けて効率的
  • ベテランと新人を組ませることで知識の伝承ができる
  • サボリを防げる

機長と副操縦士
現在の航空機は自動化が進んでいるので1人でも操縦できるが、2人の操縦士を乗務させるケースが多い。 パイロットが航空機を盗んだり、乱心して故意に墜落させるのを防ぐためである。 もちろん、操縦士が急病で倒れた場合のバックアップや、トラブル発生時に分担して対応するためでもある。

江戸時代の武士における「相役」
江戸時代には1つの役職に複数人の武士を配置することがしばしばあった。不正防止という意味もあったのだろうが、武士が余っていたという面もある。