ユーザー アカウント制御

Note

この設計ガイドは Windows 7 用に作成されており、新しいバージョンの Windows では更新されていません。 ガイダンスの多くは原則として適用されますが、プレゼンテーションと例には 現在の設計ガイダンスは反映されていません。

適切に設計されたユーザー アカウント制御エクスペリエンスは、予測可能で最小限の労力を必要とする方法で、望ましくないシステム全体の変更を防ぐのに役立ちます。

ユーザー アカウント制御 (UAC) が完全に有効になっている場合、対話型管理者は通常、最小限のユーザー特権で実行されますが、同意 UI で明示的に同意することで、管理タスクを実行するように自己昇格できます。 このような管理タスクには、ソフトウェアとドライバーのインストール、システム全体の設定の変更、他のユーザー アカウントの表示または変更、管理ツールの実行が含まれます。

最小特権の状態では、管理者は保護された管理者と呼ばれます。 昇格された状態では、管理者特権管理者と呼ばれます。 これに対し、Standard ユーザーは自分で昇格することはできませんが、管理者に資格情報 UI を使用して昇格させることができます。 組み込みの管理者アカウントでは、昇格は必要ありません。

管理者特権を持つ保護された管理者を昇格させるために使用される同意 UI。

パスワードを要求するメッセージのスクリーン ショット

Standard ユーザーの昇格に使用される資格情報 UI。

UAC には、次の利点があります。

  • これにより、昇格された特権で実行されるプログラムの数が減り、ユーザーが誤ってシステム設定を変更するのを防ぎ、"マルウェア" がシステム全体にアクセスするのを防ぐのに役立ちます。 昇格が拒否されると、マルウェアは現在のユーザーのデータにのみ影響を与える可能性があります。 昇格がないと、マルウェアはシステム全体に変更を加えたり、他のユーザーに影響を与えたりすることはできません。
  • マネージド環境では、適切に設計された UAC エクスペリエンスを使用すると、不要な制限を取り除くことで、Standard ユーザーとして実行する際の生産性を高めることができます。
  • Standard ユーザーは、現在のセッション内で管理タスクを実行するアクセス許可を管理者に付与するように求めることができます。
  • 家庭環境では、インストールされているソフトウェアなど、システム全体の変更に対する保護者による制御が向上します。

開発者: 実装情報については、「 UAC 互換性のために UI を再設計する」を参照してください。

Windows Vista では、保護された管理者は、すべてのシステム変更に関する通知を受け取るか、まったく通知しないか選択できます。 UAC の既定の設定では、配信元に関係なく、すべての変更について通知します。 通知を受け取ると、デスクトップは淡色表示され、コンピューターで他の操作を行うには、[UAC] ダイアログ ボックスで要求を承認または拒否する必要があります。 デスクトップの淡色表示は、淡色表示されている間は他のプログラムを実行できないため、 セキュリティで保護されたデスクトップ と呼ばれます。

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

Windows 7 の 2 番目の中間設定は、セキュリティで保護されたデスクトップを使用しない点を除き、最初の設定と同じです。

Windows 7 の 4 つの uac 設定のスクリーン ショット

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

メモ:ユーザー アカウント制御をサポートするコードの記述に関連するガイドラインについては、別の記事で説明します。

設計概念

目標

適切に設計されたユーザー アカウント制御エクスペリエンスには、次の目標があります。

  • 不要な昇格を排除します。 ユーザーは、管理特権を必要とするタスクを実行するためにのみ昇格する必要があります。 他のすべてのタスクは、昇格の必要性を排除するように設計する必要があります。 多くの場合、レガシ ソフトウェアでは、HKLM または HKCR レジストリ セクション、またはプログラム ファイルまたは Windows システム フォルダーに書き込むことで、管理者特権が不必要に必要になります。
  • 予測可能です。 標準ユーザーは、管理者が実行する必要があるタスク、またはマネージド環境でまったく実行できないタスクを把握する必要があります。 管理者は、昇格が必要なタスクを把握する必要があります。 昇格の必要性を正確に予測できない場合は、管理タスクに同意する必要がない場合に同意する可能性が高くなります。
  • 最小限の労力が必要です。 管理特権を必要とするタスクは、1 つの昇格を必要とするように設計する必要があります。 複数の昇格を必要とするタスクは、すぐに面倒になります。
  • 最小限の特権に戻します。 管理特権を必要とするタスクが完了したら、プログラムは最小特権の状態に戻す必要があります。

昇格タスク フロー

タスクに昇格が必要な場合は、次の手順を実行します。

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

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

    この例では、ペアレンタル コントロールとユーザー アカウントのコントロール パネル項目には昇格が必要です。

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

  2. 標高。 保護された管理者の場合、タスクは同意 UI を使用して同意を要求します。 Standard ユーザーの場合、タスクは資格情報 UI を使用して管理者の資格情報を要求します。

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

    これらの例では、資格情報 UI と同意 UI を示します。

  3. 個別の昇格されたプロセス。 内部的には、タスクを実行するために新しい昇格されたプロセスが作成されます。

  4. 最小特権に戻します。 必要に応じて、最小限の特権に戻して、昇格を必要としない手順を完了します。

タスクでは、昇格された状態は "記憶" されません。 たとえば、ユーザーがウィザードの昇格エントリ ポイントを前後に移動する場合、ユーザーは毎回昇格する必要があります。

使用パターン

ユーザー アカウント制御には、(優先順に) いくつかの使用パターンがあります。

  1. Standard ユーザー向けに作業します。 スコープを現在のユーザーに制限することで、すべてのユーザーの機能を設計します。 (システム全体ではなく) 現在のユーザーに設定を制限することで、昇格 UI を完全に不要にし、ユーザーがタスクを完了できるようにします。

    正しくない:

    メッセージのスクリーン ショット: 特権がありません

    この例では、Windows XP ユーザーは、現在のタイム ゾーンを表示または変更するための管理特権を持っている必要がありました。

    正確:

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

    この例では、すべてのユーザーに対して機能するように Windows 7 と Windows Vista でタイム ゾーン機能が再設計されました。

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

    昇格が必要であることを示す uac シールドの図

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

  3. Standard ユーザーにタスクの試行を許可し、失敗時に昇格させます。 Standard ユーザーが情報を表示でき、昇格なしでいくつかの変更を行うことができる場合は、UI にアクセスし、タスクが失敗した場合にのみ昇格させることができます。 この方法は、Standard ユーザーが Windows エクスプローラーの独自のファイルのプロパティなど、アクセスが制限されている場合に適しています。 また、ハイブリッド ハブ ページの設定コントロール パネル適しています。

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

    この例では、ユーザーはプログラム ファイルのプロパティを変更しようとしましたが、十分な特権を持っていませんでした。 ユーザーは昇格し、もう一度試すことができます。

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

    プログラム全体が管理者専用の場合は、起動するために管理者の資格情報の入力を求めるメッセージを表示するようにマークします。 Windows では、UAC シールド オーバーレイを使用して、このようなプログラム アイコンが表示されます。

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

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

ガイドライン

UAC シールド アイコン

  • UAC が完全に有効になっていない場合でも、UAC が完全に有効になっている場合でも、タスクに即時昇格が必要であることを示すために、UAC シールドを使用してコントロールを表示 します。 ウィザードと ページ フロー のすべてのパスで昇格が必要な場合は、タスクのエントリ ポイントに UAC シールドを表示します。 UAC シールドを適切に使用すると、昇格が必要なときにユーザーが予測するのに役立ちます。

  • プログラムで複数のバージョンの Windows がサポートされている場合は、少なくとも 1 つのバージョンで昇格が必要な場合は、UAC シールドを表示します。 Windows XP は昇格を必要としないため、パフォーマンスを損なうことなく一貫して行うことができる場合は、Windows XP の UAC シールドを削除することを検討してください。

  • ほとんどのコンテキストで昇格を必要としないタスクの UAC シールドは表示しないでください。 このアプローチは誤解を招く場合があるため、代わりに適切にシールドされたコンテキスト コマンドを使用することをお勧めします。

    エクスプローラーでの写真ファイルのスクリーン ショット

    [新しいフォルダー] コマンドは、システム フォルダーで使用する場合にのみ昇格を必要とするため、UAC シールドなしで表示されます。

  • UAC シールドは、次のコントロールに表示できます。

    コマンド ボタン:

    uac シールド アイコンが表示されたコマンド ボタンのスクリーン ショット

    即時昇格を必要とするコマンド ボタン。

    コマンド リンク:

    uac シールド アイコンが表示されたコマンド リンクのスクリーン ショット

    即時昇格を必要とするコマンド リンク。

    リンク:

    uac シールドを使用したアカウントの変更リンクのスクリーン ショット

    即時昇格を必要とするリンク。

    メニュー:

    uac shield を使用したメニューのスクリーン ショット

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

  • タスクは昇格された状態を記憶しないため、 UAC シールドを状態を反映するように変更しないでください。

  • ユーザー アカウント制御がオフになっている場合や、ユーザーが組み込みの管理者アカウントを使用している場合でも、UAC シールドを表示します。 UAC シールドを一貫して表示すると、プログラミングが簡単になり、タスクの性質に関する情報がユーザーに提供されます。

Elevation

  • 可能な限り、昇格なしで Standard ユーザーが実行するタスクを設計します。 すべてのユーザーに便利な読み取り専用情報へのアクセス権を付与します。

  • 設定ごとにではなく、タスクごとに昇格します。 標準ユーザー設定と管理設定を 1 つのページまたはダイアログ ボックスに混在させることはできません。 たとえば、Standard ユーザーが一部の設定を変更できるが、すべての設定を変更できない場合は、それらの設定を別の UI サーフェスとして分割します。

    正しくない:

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

    この例では、標準ユーザー設定と管理設定が正しく混在しません。

    正確:

    uac シールドのない同じダイアログ ボックスのスクリーン ショット

    この例では、日付と時刻を変更するための設定は別のダイアログ ボックスにあり、管理者のみが使用できます。 タイム ゾーン設定は Standard ユーザーが使用でき、管理設定と混合されません。

  • コントロールを表示または無効にする必要があるかどうかを判断するときに昇格する必要は考慮しないでください。 その理由:

    • アンマネージド環境では、Standard ユーザーが管理者に問い合わせることで昇格できると想定します。 昇格を必要とするコントロールを無効にすると、ユーザーは管理者を昇格できなくなります。
    • マネージド環境では、Standard ユーザーが昇格できないことを想定します。 昇格を必要とするコントロールを削除すると、ユーザーは探しを停止するタイミングを把握できなくなります。
  • 不要な昇格を排除するには:

    • タスクに昇格が必要な場合は、できるだけ遅く昇格します。 タスクに確認が必要な場合は、ユーザーが 確認した後にのみ昇格 UI を表示します。 タスクに常に昇格が必要な場合は、エントリ ポイントで昇格します。
    • 昇格したら、昇格された特権が不要になるまで昇格されたままにします。 ユーザーは、1 つのタスクを実行するために複数回昇格する必要はありません。
    • ユーザーが変更を行うために昇格する必要があるが、変更を加えないことを選択する場合は、正のコミット ボタンを有効のままにして、コミットを取り消しとして処理します。 これにより、ユーザーはウィンドウを閉じるためだけに昇格する必要がなくなります。
    • 正しくない:
    • ボタンが 1 つだけアクティブなウィンドウのスクリーン ショット
    • この例では、不要な昇格を回避するために [変更の保存] ボタンは無効になっていますが、ユーザーが選択内容を変更すると有効になります。 ただし、無効にされたコミット ボタンを使用すると、ユーザーに選択肢がないように見えます。
  • ユーザーが昇格しないことを選択したため、タスクが失敗したときにエラー メッセージを表示しないでください。 ユーザーが意図的に続行しないことを選択したとします。そのため、この状況はエラーとは見なされません。

    正しくない:

    メッセージのスクリーン ショット: fabrikam の復元を実行できない

    この例では、Fabrikam Restore では、ユーザーが昇格しない場合にエラー メッセージが誤って表示されます。

  • ユーザーがタスクを実行するために特権を昇格する必要がある可能性があることを説明する警告は表示しないでください。 ユーザーが自分でこの事実を発見できるようにします。

  • 次の表に基づいて、UAC シールドと昇格 UI を表示します。

    Object 状況 UAC シールドを配置する場所 昇格するタイミング
    プログラム
    プログラム全体は管理者専用です。
    Windows ロゴと uac シールド オーバーレイのスクリーン ショット
    UAC シールド がプログラム アイコンに重なって表示されます。
    起動時に昇格 UI を表示します。
    コマンド
    コマンド全体は管理者専用です。
    アカウントの変更リンクと uac シールドのスクリーン ショット
    コマンド ボタンまたはリンク上の UAC シールド。
    コマンド ボタンまたはリンクがクリックされたときに、確認後に昇格 UI を表示します。
    コマンド
    コマンドは、すべてのユーザーに適した便利な読み取り専用情報を表示しますが、変更には管理特権が必要です。
    変更設定リンクと uac シールドのスクリーン ショット
    変更を加えるコマンド ボタンまたはリンク上の UAC シールド。
    コマンド ボタンがクリックされたときに、確認後に昇格 UI を表示します。
    コマンド
    標準ユーザーは、情報を表示し、昇格なしで変更を加える場合があります。 標準ユーザーが失敗時に昇格することを許可します。
    再試行ボタンの uac アイコンが表示されたエラーのスクリーン ショット
    コマンドの UAC シールドは表示しませんが、コマンドが失敗した場合は昇格エントリ ポイントに対して表示します。
    ユーザーがコマンドを再試行すると、昇格 UI が表示されます。
    タスク ステップ
    それ以降のすべての手順では、昇格が必要です。
    uac シールドを使用した次のコマンド ボタンのスクリーン ショット
    [次へ] ボタンの UAC シールド (または同等)。
    [次へ] またはその他のコミット ボタンがクリックされたときに昇格 UI を表示します。
    タスク ステップ
    一部のブランチには昇格が必要です。
    uac シールドを使用したコマンド リンクのスクリーン ショット
    昇格が必要なコマンド リンクの UAC シールド。
    UAC シールドを使用したコマンド リンクをクリックすると、昇格 UI が表示されます。

昇格 UI

  • ユーザーが無効なアカウント (名前またはパスワード) を提供している場合、または管理者特権を持っていない場合は、資格情報 UI を再表示するだけです。 エラー メッセージを表示しません。
  • ユーザーが資格情報 UI をキャンセルした場合は、ユーザーを元の UI に戻します。 エラー メッセージを表示しません。
  • ユーザー アカウント制御がオフになっていて、Standard ユーザーが昇格を必要とするタスクの実行を試みる場合は、"このタスクには管理者特権が必要です。 このタスクを実行するには、管理者アカウントを使用してログオンする必要があります。

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

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

ウィザード

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

Text

  • 省略記号は、コマンドに昇格が必要なためだけに使用しないでください。 昇格の必要性は、UAC シールドで示されます。

ドキュメント

ユーザー アカウント制御を参照する場合:

  • この機能は、最小限の特権を持つユーザー アカウントまたは LUA ではなく、ユーザー アカウント制御 (最初のメンション) または UAC (後続のメンション) として参照してください。
  • 管理者以外のユーザーを Standard ユーザーとして参照してください。
  • 組み込みのコンピューター管理者を組み込み管理者として参照してください。

ユーザー ドキュメントでは、次の操作を行います。

  • 管理タスクの実行に同意する行為を「許可する」を参照してください。

プログラミングおよびその他の技術ドキュメントでは、次の操作を行います。

  • 管理タスクを昇格として実行することに同意する行為を参照してください。
  • UAC のコンテキストでは、管理者が昇格されていない場合は保護された管理者、昇格後は管理者を参照してください。
  • 資格情報 UI としてパスワードを入力するために使用するダイアログ ボックスを参照してください。 同意 UI として同意を与えるために使用されるダイアログ ボックスを参照してください。 どちらも一般に昇格 UI と参照してください。