マシンでsaパスワードを失い、adminグループのアカウントを使用してマシンに直接ログインすると、SQL Server Management StudioはWindows認証を使用したログインを許可しません。
私の計画は、単にサーバーにログインし、Windows認証を介して接続し、saをリセットして新しいパスワードを使用することでした。Windows認証経由で接続できないため、これは機能しません。
saパスワードをリセットするにはどうすればよいですか?
マシンでsaパスワードを失い、adminグループのアカウントを使用してマシンに直接ログインすると、SQL Server Management StudioはWindows認証を使用したログインを許可しません。
私の計画は、単にサーバーにログインし、Windows認証を介して接続し、saをリセットして新しいパスワードを使用することでした。Windows認証経由で接続できないため、これは機能しません。
saパスワードをリセットするにはどうすればよいですか?
回答:
以下のリンクに記載されている手順に従って、SAパスワードをリセットできます。
以下に要約する手順:
- [スタート]メニュー> [プログラム]> [Microsoft SQL Server 20xx]> [構成ツール]>インストールしたSQL Serverの最新バージョンに関連するSQL Server構成マネージャーを開きます(2005と2012がインストールされている場合は、2012バージョンを使用します)。スタートメニューがありませんか?Windows 8のスタート画面で、表示されるまでSQL Server Con ...と入力し始めます。
- SQL Serverサービスでインスタンスを右クリックし、[停止]を選択して、回復する必要があるSQL Serverインスタンスを停止します
- 停止したインスタンスを右クリックして[プロパティ]をクリックし、[詳細設定]タブの[プロパティ]テキストボックスで、[スタートアップパラメーター]オプションのリストの最後に「; –m」を追加します(新しいバージョンでは、 「スタートアップパラメータ」タブに直接移動し、「-m」と入力して、[追加]をクリックします。構文、セミコロン、またはその他何も心配する必要はありません)。
- [OK]ボタンをクリックして、SQL Serverインスタンスを再起動します
- SQL Serverインスタンスがシングルユーザーモードで起動すると、Windows管理者アカウントは、Windows認証を使用するsqlcmdユーティリティを使用してSQL Serverに接続できます。"sp_addsrvrolemember"などのTransact-SQLコマンドを使用して、既存のログイン(または新しく作成されたログイン)をsysadminサーバーロールに追加できます。
次の例では、「CONTOSO」ドメインのアカウント「Buck」をsysadminロールに追加します。
EXEC sp_addsrvrolemember 'CONTOSO\Buck', 'sysadmin';
sysadminアクセスが回復したら、Configuration Managerを使用してスタートアップパラメーターから「; -m」を削除し、SQL Serverインスタンスをもう一度再起動します。
注:「;」と「-m」の間にスペースがないことを確認してください。レジストリパラメータパーサーはこのような入力ミスに敏感です。SQL Server ERRORLOGファイルに「SQL Serverはシングルユーザーモードで起動しました」というエントリが表示されます。
追加のリソース:
最終的には、常にデータベースファイルを別のインスタンスにコピーするか、SQL Serverを再インストールすることもできます(そのプロセス中にローカルアカウントをsysadminとして追加します)。
行うことは、SQL Serverのバージョンと、新しい資格情報を確立するためにSQL Serverサービスを停止する余裕があるかどうかによって異なります。ここでの最初の2つの方法では、インスタンスを再起動する必要はありません。
NT AUTHORITY\SYSTEM
アカウント(または他のバックドアメソッド)を使用して接続できます。ここでいくつかの答えにいくつかの詳細があります:
この問題に対処するMSSQLTips.comのヒントもあります。
基本的に、PSExecをMicrosoftからダウンロードし、インストール後にManagement Studioを起動するために使用します。
PsExec -s -i "C:\...\Ssms.exe"
これにより、次のように接続されNT AUTHORITY\SYSTEM
、オブジェクトエクスプローラーで次のことができるようになります。
インスタンスをSQL ServerおよびWindows認証モードに変更します。サーバー名を右クリックし、プロパティを選択して、現在Windowsのみに設定されている場合はラジオボタンを変更します。
sa
アカウントのパスワードを設定します -[セキュリティ] sa
、[ログイン] を展開し、右クリックして[ プロパティ] を押すと、表示されるダイアログに2つのパスワード入力フィールドがあります。
独自のログインをaとして追加しますsysadmin
-[ログイン]、[新しいログイン]を右クリックし、ログイン名を(フォームにDOMAIN\username
)入力し、[サーバーロール]タブに移動してチェックsysadmin
ボックスをオンにし、[OK]をクリックします。
(または、ログインが既にリストされている場合は、右クリックして[プロパティ]を選択し、[ sysadmin
サーバーの役割]でオンになっていることを確認します)
SQL Server 2012以降、NT Authority\SYSTEM
デフォルトではSQL Serverに対する権限が付与されなくなりました。これらの新しいバージョンでそれを行う別の方法は、Argenis Fernandezによって詳述されています。
を開きregedit.exe
、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\SQLWriter\ImagePath
to の値を指すようSQLCMD.exe
に変更しますC:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\**<...110|120|130|140...>**\Tools\Binn
。編集後、レジストリ値は次のようになります(スクロールは申し訳ありません)。
"C:Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn\SQLCMD.exe" -S .\instancename -E -Q "ALTER ROLE sysadmin ADD MEMBER [YourDomain\YourUserName];"
SQL VSS Writerサービスを再度開始してみてください(エラーが表示されますが、問題ありません)。
これでをsysadmin
使用して接続できるようになりますYourDomain\YourUserName
。したがって、SQL VSS Writerサービスを停止し、レジストリを修正して、サービスを再起動します(実行する必要がある場合、またはサービスを開始する前に実行していた場合)。
これについては、2番目のヒントで詳細に説明しました。
そのヒントを書いたとき、私はコピーを作成しSQLCMD.exe
て置き換えるというより面倒なアプローチを使用しましたsqlwriter.exe
-サービスをSQLCMD.exe
直接指すだけではるかに簡単です。
シングルユーザーモードでインスタンスを再起動する必要がある、Microsoftから公式にサポートされているパスがあります。
SQL Serverを管理するためのPowershellソリューションであるdbatools.ioには、次の関数もありますReset-DbaAdmin
。
マイクロソフトにこれらのいわゆる「脆弱性」を「修正」するよう求める多くの人がいるようです。これらは、正当に所有しているSQL Serverのインスタンスへのアクセスを回復するための有効なアプローチです。これらはすべて、SQL Serverが存在する物理ホストでの昇格された特権を必要とします。複数の人に言ったように、開発者がSQL Serverのインストールをいじりたくない場合は、管理者にしないでください。