「権限の分離」をもっとよく知りたいと思う
私は最近「権限の分離(Segrecation of duties, SoD, セグリケーション)」について勉強し直したいと思っているのですが、 手近に良い本が見つからず、困っております。良い書籍や記事をご存知のいらっしゃったら、教えて下さると幸いです。
こんなことを言うのは、WEB業界で働いていると、「権限の分離」と「権限の分離」っぽいものが混同されているとしばしば感じるのですが、 さりとて「権限の分離」を語れるほどの語彙も知識もなく、モヤモヤしているからです。
以下、自分なりの「権限の分離」とモドキの理解を書いてみます。
『権限の分離』
権限の分離(セグリケーション)
社員による不正や誤謬を防ぐために、業務を意図的に作り変えること。
1人に権限が集中しないようにしたり、監視役を設けたり、上司による決裁を必須にしたりすること。
『権限の分離』モドキ
権限の分離や不正防止に結果的に貢献することもあるが、貢献しないこともあるし、そもそも不正防止が目的ではなかったりするもののリスト。
上長決裁
特定の業務をする際に、上長による許可を必須にすること。
不正防止・事故防止の目的で行うこともあるが、上長がめくら判を押してしまい、機能しないこともしばしば。
どちらかと言うと、指揮系統の明確化・責任所在の明確化という意味が大きいのかもしれない。
職務分掌
業務を分担して行うこと・分担の仕方。2人以上で仕事をするには何らかの分担が必要になる。
分担を決める際には権限の分離も考慮することもある。
インフラ担当者とアプリ開発者の分離
大型コンピュータやネットワークなどのインフラを構築・運用するには高度な知識と人手が必要である。
よって、インフラを構築・運用する専門の担当者・専門の部署を設けることが多い。
データベースにおける権限階層
データベースソフトウェアでは、使用者の権限を「データの閲覧のみ可」「データの追加のみ可」「データやテーブルの追加削除も可」など、細かく権限レベルを分けて設定できる。データベースソフトウェアは、人間だけでなく別のソフトウェアからも利用されるので、ソフトが乗っ取られた場合の被害を防ぐため、細かい権限設定が重要である。もちろん、人間による不正や誤謬を防ぐためでもある。
SI業界における「開発」「運用」「保守」の分離
サービス開始時の開発、サービスの運用、運用開始後に見つかった不具合の修正や追加機能の実装(保守)を、別々の業者が請け負ったり、
同一業者でも別のチームが行ったりする。ぶっちゃけ請負業者側の大人の都合である。
開発者とテスト担当者の分離
開発者が自分が書いたコードを自分でテストすると、自分のミスを見て見ぬふりをしたり、視野狭窄に陥ったりして、テストが甘くなりがちだと考えられている。
よって、開発者とは別にテスト担当者を置いて、その人にテストさせる。
また、
- 「開発者の給料は高いから、給料が安いテスターにテストさせるべき」
- 「訓練を受けたテスト担当者(テストエンジニア)にテストさせる方が確実」
といった事情もある。不正防止に寄与する場合もあるが、主な目的はミスの防止である。
コードレビュー
開発者が書いたコードを、別の添削者が添削すること。不正を抑止する面もあるが、どちらかというとミスを見つけたり、コードのより良い書き方を指導するのが目的。添削者は1人の場合もあれば複数人の場合もある。
ペアプログラミング・ペア作業 1人でもできるプログラミングや作業をあえて複数人で行うこと。目的は色々あり、
- 3人寄れば文殊の知恵(2人だけど)
- 目玉が2個より4個の方がミスも見つけやすい
- 別途コードレビューする工程を省けて効率的
- ベテランと新人を組ませることで知識の伝承ができる
- サボリを防げる
機長と副操縦士
現在の航空機は自動化が進んでいるので1人でも操縦できるが、2人の操縦士を乗務させるケースが多い。
パイロットが航空機を盗んだり、乱心して故意に墜落させるのを防ぐためである。
もちろん、操縦士が急病で倒れた場合のバックアップや、トラブル発生時に分担して対応するためでもある。
江戸時代の武士における「相役」
江戸時代には1つの役職に複数人の武士を配置することがしばしばあった。不正防止という意味もあったのだろうが、武士が余っていたという面もある。