ユーザー アカウント制御
手記
このデザイン ガイドは Windows 7 用に作成されたもので、新しいバージョンの Windows では更新されていません。 ガイダンスの多くは原則として適用されますが、プレゼンテーションと例には、現在の設計ガイダンス 反映されていません。
適切に設計されたユーザー アカウント制御エクスペリエンスは、予測可能で最小限の労力で不要なシステム全体の変更を防ぐのに役立ちます。
ユーザー アカウント制御 (UAC) が完全に有効になっている場合、対話型管理者は通常、最小限のユーザー特権で実行されますが、同意 UI で明示的に同意することで、管理タスクを実行するように自己昇格できます。 このような管理タスクには、ソフトウェアとドライバーのインストール、システム全体の設定の変更、他のユーザー アカウントの表示または変更、管理ツールの実行が含まれます。
最小特権の状態では、管理者は保護された管理者と呼ばれます。 管理者特権の状態では、管理者特権管理者と呼ばれます。 これに対し、Standard ユーザーは自分で昇格することはできませんが、資格情報 UI を使用して昇格するように管理者に依頼できます。 組み込みの管理者アカウントでは、昇格は必要ありません。
のスクリーン ショット
管理者特権を持つ保護された管理者を昇格するために使用される同意 UI。
パスワードスクリーン ショット
標準ユーザーの昇格に使用される資格情報 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スクリーン ショット
Windows 7 では、2 つの中間 UAC 設定が導入されています。
注: ユーザー アカウント制御 をサポートするコード 記述に関連する ガイドラインについては、別の記事で説明します。
設計の概念
目標の
適切に設計されたユーザー アカウント制御エクスペリエンスには、次の目標があります。
- 不要な昇格を排除します。 ユーザーは、管理者特権を必要とするタスクを実行するためにのみ昇格する必要があります。 他のすべてのタスクは、昇格の必要性を排除するように設計する必要があります。 多くの場合、レガシ ソフトウェアでは、HKLM または HKCR レジストリ セクション、またはプログラム ファイルまたは Windows システム フォルダーに書き込むことで、管理者特権が不必要に必要になります。
- 予測可能である。 標準ユーザーは、管理者が実行する必要があるタスク、または管理対象環境でまったく実行できないタスクを把握する必要があります。 管理者は、昇格が必要なタスクを把握する必要があります。 昇格の必要性を正確に予測できない場合は、必要でないときに管理タスクに同意する可能性が高くなります。
- 最小限の労力が必要です。 管理特権を必要とするタスクは、単一の昇格を必要とするように設計する必要があります。 複数の昇格を必要とするタスクは、すぐに面倒になります。
- 最小限の特権に戻します。 管理特権を必要とするタスクが完了したら、プログラムは最小特権の状態に戻す必要があります。
昇格タスク フロー
タスクに昇格が必要な場合は、次の手順を実行します。
エントリ ポイント。 UAC が完全に有効な場合に即時昇格が必要なタスクには、UAC シールドでマークされたエントリ ポイントがあります。 この場合、ユーザーはこのようなコマンドをクリックした直後に昇格 UI が表示されることを期待する必要があります。また、シールドのないタスクから昇格 UI が表示される場合は、特に注意が必要です。
uac シールド アイコンとそのラベルのスクリーン ショットを
この例では、保護者による制御とユーザー アカウントのコントロール パネル項目には昇格が必要です。
UAC が部分的に有効または完全にオフになっている場合、UAC シールドは引き続き表示され、タスクにシステム レベルの変更が含まれているため、ユーザーに昇格 UI が表示されない可能性がある場合でも昇格が必要であることを示します。 昇格を必要とするタスクの UAC シールドを常に表示すると、UI がシンプルで予測可能になります。
標高。 保護された管理者の場合、タスクは同意 UI を使用して同意を要求します。 標準ユーザーの場合、タスクは資格情報 UI を使用して管理者の資格情報を要求します。
2 種類の昇格スクリーン ショット
これらの例では、資格情報 UI と同意 UI を示します。
昇格されたプロセスを分離します。 内部的には、タスクを実行するために新しい昇格されたプロセスが作成されます。
最小限の特権に戻します。 必要に応じて、最小限の特権に戻して、昇格を必要としない手順を完了します。
タスクでは、昇格された状態は "記憶" されません。 たとえば、ユーザーがウィザードの昇格エントリ ポイントを前後に移動する場合、ユーザーは毎回昇格する必要があります。
使用パターン
ユーザー アカウント制御には、(優先順に) いくつかの使用パターンがあります。
Standard ユーザー向けに作業します。 現在のユーザーにスコープを制限して、すべてのユーザーの機能を設計します。 (システム全体ではなく) 現在のユーザーに設定を制限することで、昇格 UI を完全に不要にし、ユーザーがタスクを完了できるようにします。
不正解:
がありません
この例では、Windows XP ユーザーは、現在のタイム ゾーンを表示または変更するための管理特権を持っている必要がありました。
正解:
[日付と時刻] ダイアログ ボックスのする
この例では、タイム ゾーン機能が Windows 7 と Windows Vista で再設計され、すべてのユーザーに対して機能するようにしました。
標準ユーザーと管理者用に個別の UI 要素を用意します。 標準ユーザー タスクと管理タスクを明確に分離します。 すべてのユーザーに便利な読み取り専用情報へのアクセス権を付与します。 UAC シールドを使用して管理タスクを明確に識別します。
昇格が必要な図
この例では、システム コントロール パネル項目は、その状態をすべてのユーザーに表示しますが、システム全体の設定を変更するには昇格が必要です。
Standard ユーザーがタスクを試行し、障害発生時に昇格できるようにします。 Standard ユーザーが情報を表示でき、昇格なしでいくつかの変更を加えることができる場合は、UI にアクセスし、タスクが失敗した場合にのみ昇格させることができます。 この方法は、Windows エクスプローラーで独自のファイルのプロパティを使用するなど、Standard ユーザーがアクセスが制限されている場合に適しています。 コントロール パネルのハイブリッド ハブ ページの設定にも適しています。
アクセス
この例では、ユーザーはプログラム ファイルのプロパティを変更しようとしましたが、十分な特権を持っていませんでした。 ユーザーは昇格してもう一度試すことができます。
管理者専用で作業します。 この方法は、管理者の機能とプログラムにのみ使用してください。 機能が管理者のみを対象としており (また、標準ユーザーのナビゲーション パスや便利な読み取り専用情報がない) 場合は、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 shieldスクリーン ショット
即時昇格が必要なリンク。
メニュー:
uac shieldスクリーン ショット
即時昇格を必要とするドロップダウン メニュー。
タスクは昇格された状態を記憶しないため、状態を反映するように UAC シールドを変更しません。
ユーザー アカウント制御がオフになっている場合や、ユーザーが組み込みの管理者アカウントを使用している場合でも、UAC シールドを表示します。 UAC シールドを一貫して表示すると、プログラミングが容易になり、タスクの性質に関する情報がユーザーに提供されます。
標高
可能な限り、昇格なしで Standard ユーザーが実行するタスクを設計します。 すべてのユーザーに便利な読み取り専用情報へのアクセス権を付与します。
設定ごとにではなく、タスクごとに昇格します。 標準ユーザー設定と管理設定を 1 つのページまたはダイアログ ボックスに混在させる必要はありません。 たとえば、Standard ユーザーが一部の設定を変更できるが、すべての設定を変更できない場合は、それらの設定を別の UI サーフェスとして分割します。
不正解:
[日付と時刻の設定] ダイアログ ボックスのスクリーン ショットを
この例では、標準ユーザー設定が管理設定と誤って混在しています。
正解:
uac shieldsする
この例では、日付と時刻を変更するための設定は別のダイアログ ボックスにあり、管理者のみが使用できます。 タイム ゾーンの設定は Standard ユーザーが使用でき、管理設定と混在しません。
コントロールを表示または無効にする必要があるかどうかを判断するときに昇格する必要は考慮しないでください。 これは、次の理由があります。
- アンマネージド環境では、Standard ユーザーが管理者に問い合わせれば昇格できると想定します。 昇格を必要とするコントロールを無効にすると、ユーザーは管理者を昇格できなくなります。
- マネージド環境では、Standard ユーザーが昇格できないことを前提としています。 昇格を必要とするコントロールを削除すると、ユーザーは探しを停止するタイミングを把握できなくなります。
不要な昇格を排除するには:
- タスクで昇格が必要な場合は、できるだけ遅く昇格します。 タスクに 確認が必要な場合は、ユーザーが確認した後にのみ昇格 UI を表示します。 タスクに常に昇格が必要な場合は、そのエントリ ポイントで昇格します。
- 昇格したら、昇格された特権が不要になるまで昇格されたままにしてください。 ユーザーは、1 つのタスクを実行するために複数回昇格する必要はありません。
- ユーザーが変更を加えるために昇格する必要があるが、変更を加えない場合は、正のコミット ボタンを有効のままにしますが、コミットはキャンセルとして処理します。 そうすることで、ユーザーはウィンドウを閉じるためだけに昇格する必要がなくなります。
- 不正解:
- ボタンが 1 つだけアクティブなウィンドウのスクリーン ショットを
- この例では、不要な昇格を回避するために [変更の保存] ボタンは無効になっていますが、ユーザーが選択内容を変更すると有効になります。 ただし、無効になっているコミット ボタンを使用すると、ユーザーに選択肢がないように見えます。
ユーザーが昇格しないことを選択したため、タスクが失敗した場合はエラー メッセージを表示しません。 ユーザーが意図的に続行しないことを選択したとします。そのため、この状況はエラーとは見なされません。
不正解:
この例では、Fabrikam Restore では、ユーザーが昇格しないことを決定したときにエラー メッセージが誤って表示されます。
ユーザーがタスクを実行するために特権を昇格する必要がある可能性があることを説明する警告は表示しないでください。 ユーザーが自分でこの事実を発見できるようにします。
次の表に基づいて UAC シールドと昇格 UI を表示します:
オブジェクト 事情 UAC シールドを配置する場所 昇格するタイミング プログラム プログラム全体は管理者専用です。 windows ロゴと uac シールド オーバーレイスクリーン ショット
UAC shield overlay on program icon.起動時に昇格 UI を表示します。 命令 コマンド全体は管理者専用です。 アカウント変更リンクと uac シールドスクリーン ショット
コマンド ボタンまたはリンクの UAC シールド。コマンド ボタンまたはリンクがクリックされたときに、確認後に昇格 UI を表示します。 命令 コマンドは、すべてのユーザーに適した便利な読み取り専用情報を表示しますが、変更には管理者権限が必要です。 変更設定リンクと uac シールドスクリーン ショット
変更を加えるコマンド ボタンまたはリンク上の UAC シールド。コマンド ボタンがクリックされたときに、確認後に昇格 UI を表示します。 命令 標準ユーザーは、情報を表示し、場合によっては昇格なしでいくつかの変更を加えることができます。 標準ユーザーが失敗時に昇格することを許可します。 に uac アイコンが表示されたエラーのスクリーン ショット
コマンドの UAC シールドは表示せず、コマンドが失敗した場合は昇格エントリ ポイントに対して表示します。ユーザーがコマンドを再試行したときに昇格 UI を表示します。 タスク ステップ 以降のすべての手順では、昇格が必要です。 uac shieldスクリーン ショット
[次へ] ボタンの UAC シールド (または同等)。[次へ] またはその他のコミット ボタンがクリックされたときに昇格 UI を表示します。 タスク ステップ 一部の分岐には昇格が必要です。 uac shieldスクリーン ショット
昇格が必要なコマンド リンクの UAC シールド。UAC シールドを使用したコマンド リンクがクリックされたときに昇格 UI を表示します。
昇格 UI
- ユーザーが有効でないアカウント (名前またはパスワード) を提供している場合、または管理者特権を持っていない場合は、資格情報 UI を再表示するだけです。 エラー メッセージを表示しません。
- ユーザーが資格情報 UI をキャンセルした場合は、元の UI に戻ります。 エラー メッセージを表示しません。
- ユーザー アカウント制御がオフになっていて、標準ユーザーが昇格を必要とするタスクを実行しようとした場合は、"このタスクには管理者特権が必要です。 このタスクを実行するには、管理者アカウントを使用してログオンする必要があります。
タスクのスクリーン ショット
この例では、ユーザー アカウント制御がオフになっているため、ユーザーが管理者アカウントを使用する必要があることを示すエラー メッセージが表示されます。
ウィザード
- 複数回昇格しないでください。 ウィザードが昇格されると、管理者特権を維持する必要があります。
- タスクがウィザード内で実行される場合は、[コミット] ページの [次へ] ボタンに UAC シールドを配置します (より 特定のラベルを指定する必要があります)。 ユーザーがコミットしたとき:
- 次のページが [進行状況] ページの場合は、そのページに進み、昇格 UI をモーダルに表示します。 昇格に成功したら、タスクを実行します。
- 次のページが完了ページの場合は、そのページに進み (ただし、その内容を一時的に "Waiting for permission...") に置き換え、昇格 UI をモーダルで表示します。 昇格に成功したら、タスクを実行し、[完了] ページの内容を表示します。
- ユーザーが昇格 UI をキャンセルした場合は、[コミット] ページに戻ります。 そうすることで、ユーザーはもう一度試すことができます。
- ウィザードの完了後にタスクが実行された場合は、[コミット] ページの [完了] ボタンに UAC シールドを配置します (より 特定のラベルを指定する必要があります)。 ユーザーがコミットしたとき:
- [コミット] ページに残り、昇格 UI をモーダルに表示します。 昇格に成功したら、ウィザードを閉じます。
- ユーザーが昇格 UI をキャンセルした場合は、[コミット] ページに戻ります。 そうすることで、ユーザーはもう一度試すことができます。
- 管理者専用の長いウィザードの場合は、UI を表示する前に、エントリ ポイントで管理者の資格情報の入力を求めることができます。
テキスト
- 省略記号は、コマンドに昇格が必要な理由だけで使用しないでください。 昇格の必要性は UAC シールドで示されます。
ドキュメンテーション
ユーザー アカウント制御を参照する場合:
- この機能は、最小限の特権を持つユーザー アカウントや LUA ではなく、ユーザー アカウント制御 (最初のメンション時) または UAC (後続のメンションの場合) を参照してください。
- 管理者以外のユーザーを Standard ユーザーとして参照します。
- 組み込みのコンピューター管理者を組み込み管理者として参照してください。
ユーザー ドキュメントで次の操作を行います。
- 管理タスクの実行に同意する行為を、アクセス許可を付与する行為を参照してください。
プログラミングおよびその他の技術ドキュメントでは、次の手順を実行します。
- 管理タスクを昇格として実行するための同意を与える行為を参照してください。
- UAC のコンテキストでは、管理者を管理者特権でない場合は保護された管理者、昇格後は管理者特権を参照してください。
- 資格情報 UI としてパスワードを入力するために使用するダイアログ ボックスを参照してください。 同意 UI として同意を与えるために使用されるダイアログ ボックスを参照してください。 一般に、両方を昇格 UI と参照してください。