情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

ユーザー アカウント制御

ユーザー アカウント制御の設計が優れていると、システム全体にかかわる望ましくない変更を、予測可能な方法で、最小限の労力により防ぐことができます。

デザイン コンセプト
使用パターン
ガイドライン
   UAC シールド アイコン
   昇格
   昇格 UI
   ウィザード
テキスト
ドキュメント

"ユーザー アカウント制御" (UAC) を完全に有効にすると、現場の管理者は、通常は最小限のユーザー権限で操作を行いながら、承認 UI を使用して明確な承認を行うことにより、自分自身を昇格させて、管理タスクを行うことができます。このような管理タスクには、ソフトウェアやドライバーのインストール、システム全体の設定の変更、他のユーザー アカウントの表示/変更、および管理ツールの実行があります。

最小限の特権を持つ状態の管理者のことを、"保護された管理者" と呼びます。昇格した状態の管理者のことは、"システム特権を持つ管理者" と呼びます。一方、"標準ユーザー" は自分自身を昇格させることができませんが、資格情報 UI を使用して昇格できるように管理者に依頼することができます。ビルトイン Administrator アカウントの場合は、昇格は必要ありません。

"プログラムの許可" セキュリティ メッセージのスクリーン ショット

保護された管理者を昇格して管理者特権を持たせるために使用する承認 UI

パスワードの入力を求めるメッセージのスクリーン ショット

標準ユーザーを昇格させるために使用する資格情報 UI

UAC を使用するメリットは次のとおりです。

  • UAC を使用すると、昇格した権限で動作するプログラムの数が減るので、ユーザーが誤ってシステム設定を変更したり、"マルウェア" にシステム全体のアクセス権を取得されることを防ぐのに役立ちます。昇格が拒否された場合、マルウェアが影響を及ぼすことができるのは現在のユーザーのデータのみです。マルウェアは、昇格なしにシステム全体に対する変更を加えたり、他のユーザーのデータを侵害したりすることはできません。
  • 管理環境においては、優れた設計の UAC を使用すると、不要な制限がなくなるので、標準ユーザーとして実行する際のユーザーの生産性を向上させることができます。
  • 標準ユーザーは、現在のセッション内で管理タスクを実行するため、管理者に権限の付与を依頼することができます。
  • 家庭環境においては、インストールされるソフトウェアなど、システム全体の変更に対する、保護者による制限が強化されます。

開発者向け情報: 実装に関する情報については、UAC との互換性のための UI のデザイン変更に関するページ を参照してください。

Windows Vista® では、保護された管理者は、すべてのシステム変更について通知を受けるか、一切通知を受けないかを選択できます。UAC の既定の設定では、元が何であれすべての変更について通知されます。通知があると、デスクトップが暗くなり、UAC ダイアログ ボックスで要求を承認または拒否するまでは、コンピューター上で他の操作を行うことができません。デスクトップが暗くなっている間は他のプログラムが動作できないため、このようなデスクトップのことをセキュリティで保護されたデスクトップと呼びます。

Windows® 7 では、Windows Vista で追加された 2 つの UAC 設定に加え、保護された管理者用に 2 つの中間的な UAC 設定が導入されています。1 つはプログラムが変更を実行しているときにだけユーザーに通知する設定です。管理者が自分自身で変更を行うときには自動的に昇格します。Windows 7 ではこれが既定の UAC 設定です。この設定でもセキュリティで保護されたデスクトップが使用されます。

Windows 7 の 2 つ目の中間設定は、1 つ目とほぼ同じですが、セキュリティで保護されたデスクトップを使用しないという違いがあります。

Windows 7 の 4 つの UAC 設定を示すスクリーン ショット

Windows 7 では 2 つの中間的な UAC 設定が導入されています。

注: ユーザー アカウント制御をサポートするためのコードの記述に関するガイドラインは、別の項目として記載しています。

デザイン コンセプト

目的

優れた設計のユーザー アカウント制御の目的は、以下のとおりです。

  • 不必要な昇格を省きます。ユーザーが昇格するのは、"管理者特権を必要とするタスク" を実行する場合に限定します。その他のすべてのタスクを昇格なしで行えるように設計する必要があります。従来のソフトウェアの多くでは、レジストリ セクションの HKLM や HKCR、または Program Files フォルダーや Windows システム フォルダーへの書き込みに対して、不必要な管理者特権が頻繁に求められます。
  • 予測可能な状態にします。標準ユーザーは、実行するために管理者である必要があるタスク、または管理環境では一切実行できないタスクがどれかを知る必要があります。管理者は、昇格が必要なタスクはどれかを知る必要があります。昇格の必要性を正確に予測できなければ、管理タスクに対して、不適切な場合も昇格を承認してしまう可能性があります。
  • 必要な労力を最小限に抑えます。管理者特権が必要なタスクは、一度の昇格で実行できるように設計します。複数回の昇格が必要なタスクは、すぐに面倒になります。
  • 最小限の権限に戻ります。管理特権が必要なタスクが完了したら、プログラムは最小限の権限の状態に戻る必要があります。

昇格タスクのフロー

タスクに昇格が必要な場合の手順は、以下のとおりです。

  1. エントリ ポイント。UAC が完全に有効になっている場合、即時の昇格が必要なタスクのエントリ ポイントには、UAC シールドのマークが付きます。この場合、ユーザーがそのようなコマンドをクリックした後すぐに昇格 UI が表示されます。シールドの付いていないタスクから昇格 UI が表示された場合は、特に注意が必要です。

    UAC シールド アイコンとそのラベルのスクリーン ショット

    この例では、保護者による制限とユーザー アカウントのコントロール パネル アイテムで昇格が必要です。

    UAC が部分的に有効になっている場合、または完全に無効になっている場合、昇格 UI が表示されなくても、タスクがシステム レベルの変更を伴うものであり、昇格が必要であることを示すために、UAC シールドは表示されます。昇格が必要なタスクに対して常に UAC シールドを表示することによって、UI を常にシンプルで予測可能な状態にできます。

  2. 昇格。保護された管理者の場合、タスクによって承認 UI が表示され、承認が求められます。標準ユーザーの場合、タスクによって資格情報 UI が表示され、管理者資格情報が求められます。

    2 種類の昇格のスクリーン ショット

    これらは、資格情報 UI と承認 UI の例です。

  3. 昇格したプロセスを分ける。タスクを実行するために、昇格した新しいプロセスが内部的に作成されます。
  4. 最小限の権限に戻す。必要に応じて最小限の権限に戻し、昇格が不要なその他の手順を完了します。

タスクは昇格した状態を "記憶" しません。たとえば、ウィザードにおいて昇格のエントリ ポイントを行き来する場合、ユーザーは毎回昇格する必要があります。

使用パターン

ユーザー アカウント制御には、以下に示す複数の使用パターンがあります (優先度順)。

  1. 標準ユーザーの作業。機能の範囲を現在のユーザーに限定することによって、すべてのユーザー用に機能を設計します。設定を現在のユーザー (システム全体の逆) に限定することで、昇格 UI を一切不要にし、ユーザーがタスクを完了できるようにします。

    間違った例:
    "特権がありません" というメッセージのスクリーン ショット

    この例が示すように、Windows XP ユーザーは現在のタイム ゾーンを確認または変更するために管理者特権を持つ必要がありました。

    正しい例:
    [日付と時刻] ダイアログ ボックスのスクリーン ショット

    この例が示すように、Windows 7 および Windows Vista® ではタイム ゾーン機能の設計が変わり、すべてのユーザーが使用できるようになっています。

  2. 標準ユーザーと管理者に対して個別の UI 要素を用意する。標準ユーザーのタスクと管理タスクを明確に分離します。有用な読み取り専用の情報へのアクセスをすべてのユーザーに付与します。UAC シールドを使用して、管理タスクを明確に特定します。

    必要な昇格を示す UAC シールドの図

    この例では、[システム] コントロール パネル アイテムではすべてのユーザーに対してシステム状態が表示されていますが、システム全体の設定を変更するには昇格が必要です。

  3. 標準ユーザーがタスクを試行し、失敗した場合に昇格を行うことを許可する。標準ユーザーが情報を見ることができ、昇格なしで変更を行うことができる場合は UI へのアクセスを許可し、タスクが失敗した場合にのみ昇格させます。このアプローチは、Windows エクスプローラー内にある自分のファイルのプロパティなど、標準ユーザーのアクセス権が限定されている場合に適しています。また、コントロール パネルのハイブリッド ハブ ページの設定にも適しています。

    "アクセスが拒否されました" というメッセージのスクリーン ショット

    この例では、ユーザーがプログラム ファイルのプロパティを変更しようとして、権限が足りなかった場合を示しています。ユーザーは昇格して再試行できます。

  4. 管理者専用の作業。 このアプローチは、管理者用の機能やプログラムに対してのみ使用します。 管理者だけを対象とした機能の場合 (かつ標準ユーザーのナビゲーション パスや標準ユーザーにとって有用な読み取り専用の情報がない場合)、UI を表示する前にエントリ ポイントで管理者の資格情報を求めることができます。このアプローチは、長いウィザードやページ フローで、すべてのパスで管理者特権が必要な場合に使用します。

    プログラム全体が管理者専用の場合は、管理者の資格情報を求めてから起動するようにします。Windows では、このようなプログラムのアイコンには、UAC シールドが重ねて表示されます。

    Windows ロゴと UAC シールドのオーバーレイのスクリーン ショット

    この例では、このプログラムを起動するには管理者特権が必要です。

ガイドライン

UAC シールド アイコン

  • UAC が完全に有効になっているときに "即時" の昇格が必要なタスクであることを示すために、現在 UAC が完全に有効になっていない場合でも、コントロールに UAC シールドを付けて表示します。ウィザードおよびページ フローにおけるすべてのパスで昇格が必要な場合は、タスクのエントリ ポイントに UAC シールドを表示します。UAC シールドを適切に使用すると、ユーザーは昇格が必要なタイミングを予測しやすくなります。
  • 複数バージョンの Windows をサポートするプログラムの場合、少なくとも 1 つのバージョンで昇格が必要であれば UAC シールドを表示します。Windows XP では昇格が不要なため、Windows XP については、パフォーマンスに影響を及ぼすことなく一貫して UAC シールドを削除できる場合は、削除を検討します。
  • ほとんどのコンテキストで昇格が不要なタスクには UAC シールドを表示しません。このアプローチは誤解を招く可能性があるので、適切にシールドを表示したコンテキスト依存コマンドを使用するアプローチを推奨します。
  • Windows エクスプローラーの写真ファイルのスクリーン ショット

  • 新しいフォルダーの作成コマンドは、システム フォルダーで使用するときのみ昇格が必要なので、ここでは UAC シールドなしで表示されています。

  • UAC シールドを表示できるコントロールは以下のとおりです。

    コマンド ボタン:

    UAC シールド アイコンが付いたコマンド ボタンのスクリーン ショット

    即時の昇格が必要なコマンド ボタン。

    コマンド リンク:

    UAC シールド アイコンが付いたコマンド リンクのスクリーン ショット

    即時の昇格が必要なコマンド リンク。

    リンク:

    UAC シールドが付いた "アカウントの変更" リンクのスクリーン ショット

    即時の昇格が必要なリンク。

    メニュー:

    UAC シールドが付いたメニューのスクリーン ショット

    即時の昇格が必要なドロップ ダウン メニュー。

  • タスクは昇格した状態を記憶しないので、状態を反映するために UAC シールドを変更しないでください。
  • ユーザー アカウント制御がオフになっている場合や、ユーザーがビルトイン Administrator アカウントを使用している場合でも、UAC シールドを表示します。UAC シールドを一貫して表示する方が、プログラミングが簡単です。また、タスクの性質をユーザーに知らせることができます。

昇格

  • 可能であれば常に、タスクは標準ユーザーが昇格せずに実行するように設計します。有用な読み取り専用の情報へのアクセスをすべてのユーザーに付与します。
  • 設定単位ではなく、タスク単位で昇格を行います。標準ユーザーの設定と管理設定を 1 つのページやダイアログ ボックスに混在させないでください。たとえば、標準ユーザーが変更できる設定とできない設定がある場合は、これらの設定を別の UI 画面に分離します。

    間違った例:
    [日付と時刻の設定] ダイアログ ボックスのスクリーン ショット

    この例では、標準ユーザーの設定が管理設定と混在しており、不適切です。

    正しい例:
    UAC シールドが付いていない同じダイアログ ボックスのスクリーン ショット

    この例では、日時を変更する設定が別のダイアログ ボックスにあり、管理者だけが使用できるようになっています。タイム ゾーンの設定は標準ユーザーも使用できるので、管理設定とは別にしてあります。

  • コントロールを表示するか無効にするかを決める際には、昇格の必要性を考慮しないでください。理由は次のとおりです。
    • 管理されていない環境の場合、標準ユーザーは管理者に依頼することで昇格できます。昇格が必要なコントロールを無効にすると、ユーザーは管理者に昇格を求めることができなくなります。
    • 管理環境の場合、標準ユーザーは一切昇格できないことが想定されています。昇格が必要なコントロールを削除してしまうと、ユーザーは使用できないことに気付かず、コントロールを探し続ける可能性があります。
  • 不必要な昇格を避けるためには、以下の方針に従います。
    • タスクで昇格が必要な "可能性がある" 場合は、昇格のタイミングをできるだけ遅くします。確認が必要なタスクの場合は、ユーザーが確認を行った場合のみ昇格 UI を表示します。常に昇格が必要なタスクの場合は、エントリ ポイントで昇格を行います。
    • 一度昇格したら、昇格した権限が不要になるまでその状態を維持します。1 つのタスクを実行するために複数回の昇格を行わなくても済むようにします。
    • 変更を行うのに昇格が必要な状況で、ユーザーが変更を行わないことを選択した場合は、肯定的なコミット ボタンを有効にしたまま、コミットをキャンセル扱いにします。こうすると、ユーザーはウィンドウを閉じるためだけに昇格する必要がなくなります。
    • 間違った例:
      1 つのボタンだけが有効になっているウィンドウのスクリーン ショット

    • この例では、不必要に昇格が行われないように [変更の保存] ボタンが無効になっていますが、ユーザーが選択肢を変更すると有効になります。しかし、コミット ボタンが無効になっていると、ユーザーには選択肢がないように見えます。

  • ユーザーが昇格しないことを選択した場合は、タスクが失敗してもエラー メッセージを出力しないようにします。ユーザーは操作を続行しないことを意図的に選択したので、この状況をエラーとは考えません。
  • 間違った例:
    "Fabrikam リストアを実行できません" というメッセージのスクリーン ショット

  • この例では、Fabrikam のリストアでユーザーが昇格しないことを決めたときに、エラー メッセージが表示されています。

  • タスクを実行するために権限を昇格させる必要がある可能性があることを説明するための警告は表示しません。この事実はユーザーが自分で見つけられるようにします。
  • UAC シールドと昇格 UI を表示する基準を、次の表に示します。
    オブジェクト状況UAC シールドの配置場所昇格のタイミング
    プログラムプログラム全体が管理者専用である。Windows ロゴと UAC シールドのオーバーレイのスクリーン ショット

    UAC シールドをプログラム アイコンに重ねて表示します。

    起動時に昇格 UI を表示します。
    コマンドコマンド全体が管理者専用である。"アカウントの変更" リンクと UAC シールドのスクリーン ショット

    コマンド ボタンまたはコマンド リンク上に UAC シールドを配置します。

    コマンド ボタンまたはコマンド リンクがクリックされたとき (ただし、確認操作がある場合はその後) に昇格 UI を表示します。
    コマンドコマンドでは、すべてのユーザーに適した有用な読み取り専用の情報が表示されるが、変更を行うためには管理者特権が必要となる。"設定の変更" リンクと UAC シールドのスクリーン ショット

    変更を行うためのコマンド ボタンまたはコマンド リンク上に UAC シールドを配置します。

    コマンド ボタンがクリックされたとき (ただし、確認操作がある場合はその後) に昇格 UI を表示します。
    コマンド標準ユーザーは、昇格することなく情報の表示と一部の変更を行うことができる。標準ユーザーがコマンドを試行し、失敗した場合に昇格を行うことを許可する。[再試行] ボタンに UAC アイコンが付いたエラーのスクリーン ショット

    コマンドには UAC シールドを表示せず、コマンドが失敗した場合に昇格のエントリ ポイントに UAC シールドを表示します。

    ユーザーがコマンドを再試行したときに昇格 UI を表示します。
    タスク手順後続のすべての手順で昇格が必要。UAC シールドが付いた [次へ] コマンド ボタンのスクリーン ショット

    [次へ] ボタン (またはそれに相当するもの) に UAC シールドを配置します。

    [次へ] またはその他のコミット ボタンがクリックされたときに昇格 UI を表示します。
    タスク手順一部の分岐で昇格が必要。 UAC シールドが付いたコマンド リンクのスクリーン ショット

    昇格が必要なコマンド リンク上に UAC シールドを配置します。

    UAC シールドのあるコマンド リンクがクリックされたときに昇格 UI を表示します。

昇格 UI

  • ユーザーが (名前またはパスワードの) 有効でない、または管理者特権を持たないアカウントを入力した場合は、単に資格情報 UI を再表示します。エラー メッセージは表示しません。
  • ユーザーが資格情報 UI を取り消した場合は、元の UI に戻ります。エラー メッセージは表示しません。
  • ユーザー アカウント制御がオフになっているときに、標準ユーザーが昇格の必要なタスクを実行しようとした場合は、"このタスクには管理者特権が必要です。このタスクを実行するには、管理者アカウントを使用してログインする必要があります。" というエラー メッセージを表示します。

    "タスクには特権が必要です" というメッセージのスクリーン ショット

    この例では、ユーザー アカウント制御がオフになっているので、ユーザーが管理者アカウントを使用する必要があることを説明するエラー メッセージが表示されています。

ウィザード

  • 複数回の昇格を行わないようにします。一度昇格したウィザードは、昇格した状態を維持する必要があります。
  • ウィザード内で実行するタスクの場合、コミット ページの [次へ] ボタン (このボタンには、より具体的なラベルを付ける必要があります) に UAC シールドを配置します。ユーザーがコミットを行った場合は、次のようにします。
    • 次のページが進行状況ページの場合は、そのページに進み、昇格 UI をモーダルに表示します。昇格が成功したらタスクを実行します。
    • 次のページが完了ページの場合は、そのページに進み (ただし一時的に "アクセス許可を設定しています。しばらくお待ちください..." というコンテンツに置き換え)、昇格 UI をモーダルに表示します。昇格が成功したら、タスクを実行し、次に完了ページのコンテンツを表示します。
    • ユーザーが昇格 UI を取り消した場合は、コミット ページに戻ります。これによって、ユーザーは再試行できます。
  • ウィザードが完了した後で実行するタスクの場合は、コミット ページの [完了] ボタン (このボタンには、より具体的なラベルを付ける必要があります) に UAC シールドを配置します。ユーザーがコミットを行った場合は、次のようにします。
    • コミット ページを表示したままにして、昇格 UI をモーダルに表示します。昇格が成功したらウィザードを閉じます。
    • ユーザーが昇格 UI を取り消した場合は、コミット ページに戻り、ユーザーが再試行できるようにします。
  • 管理者専用の長いウィザードの場合は、UI を表示する前のエントリ ポイントで管理者の資格情報を求めることができます。

テキスト

  • 昇格が必要なコマンドだという理由で、省略記号を使用しないでください。昇格の必要性は UAC シールドによって示します。

ドキュメント

ユーザー アカウント制御に言及するときは、以下のことに留意します。

  • この機能のことは、"ユーザー アカウント制御" (初出時)、または "UAC" (初出時以外) と呼びます。"最小限の特権のユーザー アカウント" や "LUA" は使用しません。
  • 管理者以外のユーザーは "標準ユーザー" と呼びます。
  • 組み込みのコンピューター管理者のことは "ビルトイン Administrator" と呼びます。

ユーザー ドキュメントにおいては、以下のことに留意します。

  • 管理タスクを実行するために承認することを、"権限を付与する" と呼びます。

プログラミングおよびその他の技術文書においては、以下のことに留意します。

  • 管理タスクを実行するために承認することを、"昇格" と呼びます。
  • UAC のコンテキストでは、昇格していない管理者のことを "保護された管理者"、昇格した後の管理者のことを "システム特権を持つ管理者" と呼びます。
  • パスワードを入力するためのダイアログ ボックスのことを "資格情報 UI" と呼びます。承認するためのダイアログ ボックスのことを "承認 UI" と呼びます。両方のダイアログ ボックスのことを、一般に "昇格 UI" と呼びます。
表示: