既定のユーザー権限が削除された後に SQL Server のインストールが失敗する
この記事は、セキュリティ強化後に Microsoft SQL Server をインストールまたはアップグレードするときに発生する問題を解決するのに役立ちます。
適用対象: SQL Server
現象
Windows で Microsoft SQL Server を実行しているシナリオを考えてみましょう。 セキュリティを強化するには、ローカル管理者グループから既定のユーザー権限を削除します。 システムで SQL Server を設定するには、セットアップ アカウントをローカル管理者グループに追加します。
このシナリオでは、SQL Server をインストールまたはアップグレードしようとすると、インストール プロセスが失敗し、次のようなメッセージのいずれかに似たエラー メッセージが表示されることがあります。
シナリオ 1: 新しいインストールが失敗すると、次のエラー メッセージが表示されます。
Access is denied
Detail.txt ファイルに次のようなエラー メッセージが表示される場合もあります。
2009-01-02 13:00:17 SQLEngine: --SqlServerServiceSCM: Waiting for nt event 'Global\sqlserverRecComplete$NIIT' to be created 2009-01-02 13:00:20 SQLEngine: --SqlServerServiceSCM: Waiting for nt event 'Global\sqlserverRecComplete$NIIT' or sql process handle to be signaled 2009-01-02 13:00:20 Slp: Configuration action failed for feature SQL_Engine_Core_Inst during timing ConfigRC and scenario ConfigRC. 2009-01-02 13:00:20 Slp: Access is denied 2009-01-02 13:00:20 Slp: Configuration action failed for feature SQL_Engine_Core_Inst during timing ConfigRC and scenario ConfigRC. 2009-01-02 13:00:20 Slp: System.ComponentModel.Win32Exception: Access is denied 2009-01-02 13:00:20 Slp: at System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited) 2009-01-02 13:00:20 Slp: at System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited) 2009-01-02 13:00:20 Slp: at System.Diagnostics.Process.OpenProcessHandle() 2009-01-02 13:00:20 Slp: at System.Diagnostics.Process.get_Handle() 2009-01-02 13:00:20 Slp: at Microsoft.SqlServer.Configuration.SqlEngine.SqlServerServiceBase.WaitSqlServerStart(Process processSql) 2009-01-02 13:00:20 Slp: at Microsoft.SqlServer.Configuration.SqlEngine.SqlServerServiceSCM.StartSqlServer(String[] parameters) 2009-01-02 13:00:20 Slp: at Microsoft.SqlServer.Configuration.SqlEngine.SqlServerStartup.StartSQLServerForInstall(String sqlCollation, String masterFullPath, Boolean isConfiguringTemplateDBs) 2009-01-02 13:00:20 Slp: at Microsoft.SqlServer.Configuration.SqlEngine.SqlEngineDBStartConfig.ConfigSQLServerSystemDatabases(EffectiveProperties properties, Boolean isConfiguringTemplateDBs, Boolean useInstallInputs) 2009-01-02 13:00:20 Slp: at Microsoft.SqlServer.Configuration.SqlEngine.SqlEngineDBStartConfig.DoCommonDBStartConfig(ConfigActionTiming timing) 2009-01-02 13:00:20 Slp: at Microsoft.SqlServer.Configuration.SqlEngine.SqlEngineDBStartConfig.Install(ConfigActionTiming timing, Dictionary<string, string> actionData, PublicConfigurationBase spcb) 2009-01-02 13:00:20 Slp: at Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, Dictionary<string, string> actionData, PublicConfigurationBase spcbCurrent) 2009-01-02 13:00:20 Slp: at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, Dictionary<string, string> actionData, PublicConfigurationBase spcbCurrent) 2009-01-02 13:00:20 Slp: at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) 2009-01-02 13:00:20 Slp: at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream) 2009-01-02 13:00:20 Slp: Exception: System.ComponentModel.Win32Exception. 2009-01-02 13:00:20 Slp: Source: System. 2009-01-02 13:00:20 Slp: Message: Access is denied.
シナリオ 2: Microsoft SQL Server 2012 または Microsoft SQL Server 2008 R2 の新しいインストールが失敗した場合、次のいずれかのエラー メッセージが表示されます。
Rule "Setup account privileges" failed. The account that is running SQL Server Setup doesn't have one or all of the following rights: the right to back up files and directories, the right to manage auditing and the security log and the right to debug programs. To continue, use an account with both of these rights.
シナリオ 3: バックアップ ディレクトリの場所にネットワーク共有 (UNC パス) を指定したときに SQL Server 2012 以降のバージョンのインストールが失敗した場合、次のエラー メッセージが表示されます。
SQL Server setup account does not have the `SeSecurityPrivilege` on the specified file server in the path *\<UNC backup location>*. This privilege is required to set folder security in the SQL Server setup program. To grant this privilege, use the Local Security Policy console on this file server to add SQL Server setup account to **Manage auditing and security log** policy. This setting is available in the **User Rights Assignments** section under Local Policies in the Local Security Policy console.
Note
この問題は、SQL Server セットアップ アカウントに、ネットワーク共有をホストするファイル サーバーに対する
SeSecurityPrivilege
アクセス許可がないために発生します。
原因
セットアップをローカル管理者として実行している場合、セットアップを正常に実行するには、次のユーザー権限が必要です。
ローカル グループ ポリシー オブジェクトの表示名 | ユーザー権限 |
---|---|
バックアップ ファイルとディレクトリ | SeBackupPrivilege |
プログラムのデバッグ | SeDebugPrivilege |
監査ログとセキュリティ ログの管理 | SeSecurityPrivilege |
Note
SQL Server のインストールに必要なアクセス許可の詳細については、次の記事の「前提条件」セクションを参照してください。
データ ディレクトリまたはその他のディレクトリ (ユーザー データベース ディレクトリ、ユーザー データベース ログ ディレクトリ、TempDB ディレクトリ、TempDB ログ ディレクトリ、またはバックアップ ディレクトリ) のストレージ オプションで SMB ファイル共有を使用する場合、セットアップ アカウントには、「 SMB ファイル共有ストレージを使用する SQL Server のインストール」の説明に従って、SMB ファイル サーバーに対する次の追加のアクセス許可が必要です。
SMB ネットワーク共有フォルダー | フル コントロール | SQL セットアップ アカウント |
---|---|---|
SMB ネットワーク共有フォルダー | フル コントロール | SQL Server と SQL Server エージェント サービス アカウント |
SMB ファイル サーバー | SeSecurityPrivilege |
SQL セットアップ アカウント |
解決方法
セットアップ アカウントに権限を追加するには、次の手順に従います。
- 管理者としてログオンします。
- Start>Run を選択し、「Control admintools」と入力し、OK を選択します。
- ローカル セキュリティ ポリシーをダブルクリックします。
- ローカル セキュリティ設定 ダイアログ ボックスで、ローカル ポリシーを選択し、User Rights Assignmentを開き、バックアップ ファイルとディレクトリをダブルクリックします。
- [ファイルとディレクトリのプロパティの]ダイアログ ボックスで、[ユーザーまたはグループの追加を選択。
- [ ユーザーまたはグループの選択 ] ダイアログ ボックスで、セットアップに使用するユーザー アカウントを入力し、 OK 2 回選択します。
Note
Debug ProgramsおよびManage auditing and security log ポリシーのユーザー アカウントを追加するには、手順 1 から 6 を実行します。
- File メニューの ローカル セキュリティ設定 ダイアログ ボックスを開き、Exit を選択して閉じます。
よく寄せられる質問 (FAQ)
UNC 共有のバックアップ ディレクトリのファイル サーバーに SeSecurityPrivilege
が必要なのはなぜですか?
このアクセス許可は、既定のバックアップ ディレクトリのアクセス制御リスト (ACL) を取得して、SQL Server サービス アカウントがフォルダーに対する完全なアクセス許可を持っていることを確認するために必要です。 サービス アカウントは、ディレクトリのバックアップを実行できるように、SQL サービス アカウントに対するアクセス許可がない場合にも ACL を設定します。 セットアップ プログラムでは、既定のバックアップ ディレクトリに対してこれらのチェックが実行されるため、インストール後にバックアップが実行された場合、(アクセス許可がないため) エラーが発生しません。
Note
SeSecurityPrivilege
は、ディレクトリとサブフォルダーから get/set ACLs
を変更するために必要です。 これは、ディレクトリに対する FULL CONTROL 権限を持つユーザーが、ディレクトリからの情報を get/set OWNER
および監査する権限を持っていない場合でも当てはまります。
シナリオ 3 で説明されているエラーが Microsoft SQL Server 2012 以降のバージョンでのみ発生するのはなぜですか?
SQL Server 2012 以降、Microsoft は SMB ファイル共有上のデータ ファイルとログ ファイルをサポートしています。 この改善の一環として、セットアップ エクスペリエンスがさらに強化され、インストール後のアクセス許可が不十分なため、お客様にエラーや問題が発生しないようにセキュリティ チェックが強化されます。 SQL Server 2012 より前のバージョンでは、SQL サービス アカウントにバックアップを実行するアクセス許可がない場合でも、ユーザーはバックアップ ディレクトリのネットワーク共有パスを設定できます。 ただし、このような状況では、インストール後にエラーが発生します。 これらのシナリオは、ネットワーク共有で SQL 2012 セットアップ チェックを開始するときに禁止されるようになりました。
詳細
セットアップ アカウントに現在関連付けられている特権の一覧を確認するには、 AccessChk.exe ツールを使用します。 このツールをダウンロードするには、 AccessChk v6.13 を参照してください。
使用法:
accesschk.exe- a \<setup account> *
例:
c:\tools\accesschk.exe -a testdc\setupaccount *
Sample output: SeSecurityPrivilege SeBackupPrivilege SeRestorePrivilege SeSystemtimePrivilege SeShutdownPrivilege SeRemoteShutdownPrivilege SeTakeOwnershipPrivilege SeDebugPrivilege SeSystemEnvironmentPrivilege SeSystemProfilePrivilege SeProfileSingleProcessPrivilege SeIncreaseBasePriorityPrivilege SeLoadDriverPrivilege SeCreatePagefilePrivilege SeIncreaseQuotaPrivilege SeChangeNotifyPrivilege SeUndockPrivilege SeManageVolumePrivilege SeImpersonatePrivilege SeCreateGlobalPrivilege SeTimeZonePrivilege SeCreateSymbolicLinkPrivilege SeInteractiveLogonRight SeNetworkLogonRight SeBatchLogonRight SeRemoteInteractiveLogonRight
詳細については、「 Windows サービス アカウントと権限の構成」を参照してください。