システム管理者がロックアウトされた場合の SQL Server への接続
適用対象:SQL Server (サポートされているすべてのバージョン)
この記事では、ロックアウトされている場合に、システム管理者として SQL Server データベースエンジンへのアクセスを回復する方法について説明します。システム管理者は、次のいずれかの理由により、SQL Server のインスタンスにアクセスできなくなる可能性があります。
sysadmin 固定サーバー ロールのメンバーであるログインがすべて、誤って削除された。
sysadmin 固定サーバー ロールのメンバーである Windows グループがすべて、誤って削除された。
sysadmin 固定サーバー ロールのメンバーであるログインの使用者が退社したか不在である。
sa アカウントが無効になっているか、パスワードが不明である。
解決方法
アクセスの問題を解決するには、SQL Server のインスタンスをシングルユーザーモードで起動することをお勧めします。 このモードでは、アクセスを回復しようとしている間に、他の接続が行われないようにします。 ここでは、SQL Server のインスタンスに接続し、sysadmin サーバー ロールにログインを追加できます。 この解決策に関する詳細な手順については、「ステップ バイ ステップの手順」セクションを参照してください。
コマンドラインからオプションまたは -f
オプションを使用して、 -m
SQL Server のインスタンスをシングルユーザーモードで起動できます。 その後、コンピューターのローカル管理者グループのメンバーは、 sysadmin固定サーバーロールのメンバーとして SQL Server のインスタンスに接続できます。
インスタンスをシングルユーザーモードで起動する場合は、最初に SQL Server エージェントサービスを停止します。 それ以外の場合は、SQL Server エージェントが最初に接続し、サーバーへの使用可能な接続を取得して、ログインをブロックすることがあります。
また、ログインできるようになる前に、不明なクライアント アプリケーションが使用可能な接続のみを取得してしまう場合もあります。 このような状況が発生しないようにするには、-m
オプションの後にアプリケーション名を指定することで、指定したアプリケーションからの単一の接続に限定することができます。 たとえば、を使用 -mSQLCMD
して SQL Server を開始すると、 -mSQLCMD
クライアントプログラムとして識別される1つの接続への接続が制限されます。 Management Studio のクエリエディターを使用して接続するには、を使用 -m"Microsoft SQL Server Management Studio - Query"
します。
重要
セキュリティ機能として -m
をアプリケーション名と一緒に使用しないでください。 クライアント アプリケーションは、接続文字列の設定を使用してアプリケーション名を指定するため、偽名を使って簡単になりすますことができます。
次の表は、コマンド ラインでインスタンスをシングル ユーザー モードで起動するさまざまな方法をまとめたものです。
オプション | 説明 | 使用する場合 |
---|---|---|
-m |
単一の接続に限定します | 他のユーザーがインスタンスに接続しようとしていない場合、またはインスタンスへの接続に使用しているアプリケーション名がわからない場合。 |
-mSQLCMD |
sqlcmd クライアント プログラムとして識別される必要がある単一の接続に限定します | sqlcmd でインスタンスに接続しようとしているときに、他のアプリケーションが使用可能な接続を取得できないようにする場合。 |
-m"Microsoft SQL Server Management Studio - Query" |
Microsoft SQL Server Management Studio クエリ アプリケーションとして識別される必要がある単一の接続に限定します。 | Management Studio のクエリエディターを使用してインスタンスに接続しようとしているときに、他のアプリケーションが使用可能な接続を取得できないようにする場合。 |
-f |
単一の接続に限定し、インスタンスを最小構成で開始します | 他の構成によって開始が妨げられている場合。 |
詳細な手順
シングルユーザーモードで SQL Server を開始する方法の詳細な手順については、「 Single-User モードで SQL Server を開始する」を参照してください。
PowerShell の使用
オプション 1: Azure Data Studio から実行可能なノートブックで直接ステップを実行する
Note
このノートブックを開く前に、Azure Data Studio がローカル コンピューターにインストールされていることを確認してください。 インストールするには、Azure Data Studio のインストール方法に関するページを参照してください。
オプション 2: 手動で手順を実行する
Windows PowerShell コマンドを開き、管理者として実行します。
サービス名と SQL Server インスタンス、Windows ログイン変数を設定します。 お使いの環境に合う値に置き換えます。
$service_name = "MSSQL`$instancename" # for a default instace use: "MSSQLSERVER" $sql_server_instance = "machine_name\instance" $login_to_be_granted_access = "[CONTOSO\PatK]"
次のコマンドを使用して、SQL Server サービスを停止して、シングルユーザー モードで再起動できるようにします。
net stop $service_name
ここで、SQL Server インスタンスをシングルユーザー モードで起動し、SQLCMD.exe の接続のみを許可します (/mSQLCMD)。
Note
必ず大文字の SQLCMD を使用してください
net start $service_name /mSQLCMD
SQLCMD を使用して CREATE LOGIN コマンドを実行してから、ALTER SERVER ROLE コマンドを実行します。 この手順では、ローカルの Administrators グループのメンバーであるアカウントを使用して Windows にログインしていることを想定しています。 これは、ドメイン名とログイン名が、Sysadmin メンバーシップを付与する資格情報に置き換えられていることを前提としています。
sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN $login_to_be_granted_access FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER $login_to_be_granted_access; "
Note
次のエラーが発生した場合は、他の SQLCMD が SQL Server に接続されていないことを確認する必要があります。
Sqlcmd: Error: Microsoft ODBC Driver X for SQL Server : Login failed for user 'CONTOSO\BobD'. Reason: Server is in single user mode. Only one administrator can connect at this time..
混合モード (省略可能): SQL Server が混合認証モードで実行されている場合は、次のこともできます。
SQL ログインに Sysadmin ロール メンバーシップを付与します。 sysadmin 固定サーバー ロールのメンバーである新しい SQL Server サーバー 認証ログインを作成するには、次のようなコードを実行します。 "?j8:z$G=JE9" を任意の強力なパスワードに置き換えてください。
$strong_password = "j8:zG=J?E9" sqlcmd.exe -E -S $sql_server_instance -Q "CREATE LOGIN TempLogin WITH PASSWORD = '$strong_password'; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin; "
また、SQL Server が混合認証モードで実行されていて、有効になっている saアカウントのパスワードをリセットする場合も同様です。 次の構文を使用して、sa アカウントのパスワードを変更します。 "j8:zG=J?E9" を忘れずに任意の強力なパスワードに置き換えてください。
$strong_password = "j8:zG=J?E9" sqlcmd.exe -E -S $sql_server_instance -Q "ALTER LOGIN sa WITH PASSWORD = $strong_password; "
マルチユーザー モードで SQL Server インスタンスを停止して再起動します。
net stop $service_name net start $service_name
SQL Server 構成マネージャーと SQL Server Management Studio (SSMS) の使用
以下の手順では、次のことを想定しています。
SQL Server Windows 8 以降で実行されています。 それ以前のバージョンの SQL Server または Windows の場合、必要に応じて調整する必要があります。
SQL Server Management Studio がコンピューターにインストールされています。
ローカル Administrators グループのメンバーとして Windows にログインしているときに、以下の手順を実行します。
Windows スタートメニューで SQL Server 構成マネージャーのアイコンを右クリックし、[管理者として実行] を選択して Configuration Manager に管理者の資格情報を渡します。
SQL Server 構成マネージャーの左側のウィンドウで、[ SQL Server Services] を選択します。 右ペインで、SQL Server のインスタンスを見つけます。 (SQL Server の既定のインスタンスには、コンピューター名の後に(MSSQLSERVER)が含まれます。 名前付きインスタンスは、[登録済みサーバー] に表示されているものと同じ名前が大文字表記で表示されます)。 SQL Server のインスタンスを右クリックし、[プロパティ] をクリックします。
[ 起動時のパラメーター ] タブの [ 起動時のパラメーターの指定 ] ボックスに「」と入力 し、[ 追加] をクリックします。 (入力文字はダッシュの後に小文字の m です)。
Note
以前のバージョンの SQL Server は、[起動時のパラメーター ] タブがありません。その場合は、[詳細設定] タブで [起動時のパラメーター] をダブルクリックします。 パラメーターが小さいウィンドウに表示されます。 既存のパラメーターは、いずれも変更しないように注意してください。 最後に、新しいパラメーター
;-m
を追加し、[;-m
をクリックします。 (入力文字はセミコロンの後に小文字の m です)。[OK] をクリックし、再起動するためのメッセージが表示されたら、サーバー名を右クリックし、 [再起動] をクリックします。
SQL Server が再起動されると、サーバーはシングルユーザーモードになります。 SQL Server エージェントが実行されていないことを確認します。 起動した場合、それが唯一の接続となります。
Windows スタートメニューで Management Studio のアイコンを右クリックし、[管理者として実行] を選択します。 これにより、管理者資格情報が SSMS に渡されます。
Note
以前のバージョンの Windows では、 [管理者として実行] オプションはサブメニューとして表示されます。
構成によっては、SSMS が複数の接続の確立を試みます。 SQL Server がシングルユーザーモードになっているため、複数の接続が失敗します。 実際のシナリオに基づいて、次のいずれかのアクションを実行します。
Windows 認証 (管理者の資格情報を含む) を使用してオブジェクト エクスプローラーと接続します。 [セキュリティ] 、 [ログイン] の順に展開し、自身のログインをダブルクリックします。 [サーバー ロール] ページで、 [sysadmin] を選択し、 [OK] をクリックします。
オブジェクト エクスプローラーではなく、Windows 認証 (管理者の資格情報を含む) を使用してクエリ ウィンドウと接続します (この方法で接続できるのは、オブジェクト エクスプローラーと接続していない場合のみです)。 sysadmin 固定サーバー ロールのメンバーである新しい Windows 認証ログインを追加するには、次のようなコードを実行します。 次の例では、
CONTOSO\PatK
という名前のドメイン ユーザーを追加します。CREATE LOGIN [CONTOSO\PatK] FROM WINDOWS; ALTER SERVER ROLE sysadmin ADD MEMBER [CONTOSO\PatK];
SQL Server が混合認証モードで実行されている場合は、Windows 認証 (管理者の資格情報を含む) を使用してクエリウィンドウと接続します。 sysadmin固定サーバーロールのメンバーである新しい SQL Server 認証ログインを作成するには、次のようなコードを実行します。
CREATE LOGIN TempLogin WITH PASSWORD = '************'; ALTER SERVER ROLE sysadmin ADD MEMBER TempLogin;
警告
************ は強力なパスワードと置き換えてください。
SQL Server が混合認証モードで実行されていて、 saアカウントのパスワードをリセットする場合は、Windows 認証 (管理者の資格情報を含む) を使用してクエリウィンドウに接続します。 次の構文を使用して、 sa アカウントのパスワードを変更します。
ALTER LOGIN sa WITH PASSWORD = '************';
警告
************ は強力なパスワードと置き換えてください。
Management Studio を閉じます。
以降のいくつかの手順では、SQL Server をマルチ ユーザー モードに戻します。 SQL Server 構成マネージャーの左側のウィンドウで、[ SQL Server Services] を選択します。
右ペインで SQL Server のインスタンスを右クリックし、[プロパティ] をクリックします。
[ 起動時のパラメーター ] タブの [ 既存のパラメーター ] ボックスで、[] を選択 し、[ 削除] をクリックします。
Note
以前のバージョンの SQL Server は、[起動時のパラメーター ] タブがありません。その場合は、[詳細設定] タブで [起動時のパラメーター] をダブルクリックします。 パラメーターが小さいウィンドウに表示されます。 前の
;-m
手順で追加したを削除し、[;-m
をクリックします。サーバー名を右クリックし、 [再起動] をクリックします。 シングルユーザーモードで SQL Server を開始する前に、エージェントを停止した場合は、SQL Server エージェントを再起動してください。
これで、sysadmin 固定サーバー ロールのメンバーであるアカウントの 1 つを使用して正常に接続できます。