ActiveDirectory AGDLP 原則 と SQL Server 2005

Active Directory の権限管理においては、アカウント/様々なグループ/権限 を AGDLP (Wikipedia) またはUniversal Groupも必要なら AGUDLP という原則に従うとよいということになっている。これはMCSEであれば共通の知識体系の一部。

これを更にSQL Server に適用しようとすると、

  1. A (Active Directory Account)
  2. G (Active Directory Global Group)
  3. U (Active Directory Universal Group)
  4. DL (Active Directory Domain Local Group)
  5. SQL Server Login
  6. Database User
  7. Database Role
  8. Permission (各SQL Server オブジェクトに対する権限設定)

…なんとも深い階層だ。といってもActiveDirectory での権限管理を管理の基本にするのであれば SQL Server 内である 5.~7. については Domain Local Group とほぼ同じ名前をふって1対1の対応をしていく単純作業ではある。

また実際に設計するにあたっては、名前付け体系を作らないといけない。Active Directory における標準状態だとグローバルグループだけ定義されてて、"Domain なんとかs " という名前だったりするが日本語による名前付けとは相性は良くない。

そんなわけでとりあえず決めてみた prefix リスト

  1. prefixなし (Active Directory Account)
  2. G_ (Active Directory Global Group)
  3. U_ (Active Directory Universal Group)
  4. DL_ (Active Directory Domain Local Group)
  5. DomainName\DL_ (SQL Server Login)
  6. DomainName\DL_ (SQL Server Database User)
  7. DL_ (SQL Server Database Role)
  8. prefixなし (Permission)

ちなみに SQL Server Lagin / SQL Server Database User は同じ名前をつけるのは普通であるし、Database Role にドメイン名を含まないグループ名をそのままつけることは可能だ。

将来的には Database Role に直接 Domain Local Group を割り付けできるようになったりしないのかしら。パスワードで権限設定できてしまう アプリケーションロール などという飛び道具はすでに用意されているわけで。

(追記) ASP.NET フォーム認証用のSQLServer環境と、(1対1対応ではない)グループに割り当てるべき方針をもう少し考えてみた。以前述べたように、データベースロールとしては aspnet_Membership_BasicAccess といったように「末尾に Accessをつける」ことにより権限を持っているという意味を示している。

ここで、ユーザーと Grobal Group は人事的観点で設計し、DomainLocal Group から Permission の間はコンピュータシステムの観点で設計するものなのだなと整理してとらえてみた。

このような場合以下のようになる。

  • Database Role/Database User/SQL Server Login/ActiveDirectory Domain Local Group には「Access可能である」という意味のエントリを作成する。逆に明示的に拒否したいのであれば Refuse」 という意味のエントリを作成する。
  • ActiveDicertory Global Group には「会社組織上のグループ」を意味するエントリを作成する
  • DomainLocal Group と Grobal Group の対応付けが、グループと権限の対応付け を受け持つ。
    • Access 可能な Domain Local Group への割り付けは協議事項
    • Refuse なDomain Local Group への割り付けは多分メンテナンス部門

命名規則として言い直すと、

  • SQL上およびDomain Local Group の名前については、Permissionを意味のある単位でまとめたものということが分かるように、Access またはRefuse を末尾につける。
  • ユーザーとGlobal Group は、一般的なユーザーとグループだと思って利用すればよい。過去の習慣からすると Global Group に Users を末尾につける。

こんな感じかしら。

ものすごく具体的かつ端的に言えば、「Active Directory Domain Local Group として aspnet_Membership_BasicAccess, aspnet_Membership_FullAccess を作成してしまう」という方針である。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。