SQL Server 2012: パスワードを忘れたときの緊急対応策

SQL Server のパスワードを忘れるという考えられない事態が発生したときに、システムに再度アクセスする手段があります。

Saleem Hakani

あなたは、自信に満ち溢れ、会社の皆から信頼されるデータベース管理者 (DBA) です。‏SQL Server で実行している重要なサービスを、運用環境で整備して更新する業務を任されています。あなたは次の手順を実行することにしています。これらの手順は、堅実なデータベース管理者が、許可されていないアクセスから会社の SQL Sever をセキュリティで保護するためにとるベスト プラクティスです。

  • SQL Server のログインからすべての組み込みの管理者アカウントを削除する。
  • sysadmin サーバー ロールのメンバーからシステム管理者 (SA) 以外のすべてのユーザー (Windows アカウントと SQL Server ログインを含む) を削除する。
  • SA アカウントに推測や暗記が困難な複雑なパスワードを設定する。
  • SQL Server の日常業務には、自分のドメイン ユーザー アカウントを使用する。使用するユーザー アカウントにはユーザーのデータベースに対するデータベースの所有者 (DBO) の権限はあるが、システムに対する sysdamin 権限はない。
  • SA のパスワードは、他人に知られるのを防ぐため、どこにも記載しない (結局のところ、パスワードをどこかに記載しておくのは良いことではありません)。

SA のパスワードをとても複雑なものにして、SQL Server のデータベースに関する日常業務には、SA アカウントではなくドメイン アカウントを使用しているため、考えられない事態が発生します。それは、SQL Server の SA のパスワードを忘れてしまうという状況です。

チームの中で SA のパスワードを知っているのは自分だけです。パスワードを思い出せない中、運用環境の SQL Server でサーバー レベルのいくつかの構成を変更する必要が生じました。このような場合には、どうしたらよいかというと、次のような選択肢があります。

  • 心あたりのあるすべてのパスワードを使って、SA アカウントでログインを試みる。
  • コンピューターのハード ドライブや電子メールの中に、SA のパスワードが残っていないか探してみる (ファイルにパスワードが保存されているかもしれません。好ましい習慣ではありませんが、パスワードが見つかれば助かります)。
  • データベースのバックアップから master データベースを復元してみる。SA のパスワードを思い出せなければ、また同じ問題に直面するので、この方法は、長い目で見ると有効な手段ではありません。
  • master データベースを再構築する。ログイン、アクセス許可、全サーバー レベルのオブジェクトを含むシステム/サーバー レベルの構成と設定がすべて失われるため、この方法はあまり有効とはいえません。
  • SQL Server 2012 を再インストールし、すべてのユーザー データベースをアタッチする。master データベースを再構築した場合と同じ問題に直面する可能性があるため、この方法も有効でないかもしれません。

SA のパスワードでシステムにログインする試みがすべて失敗したとします。その場合は、マイクロソフト製品サポート サービス チームという増援を呼びましょう。マイクロソフト製品サポート サービス チームからは、次のような緊急対応策が提示される可能性があります。

これは、運用環境の SQL Server に sysadmin としてアクセスするのに役立つ SQL Server 2012 への裏口からのアクセス方法です。この方法を実行するには、お使いの Windows アカウントが、SQL Server 2012 を実行している Windows Server のローカルの Administrators グループのメンバーになっている必要があります。

SQL Server では、ローカルの Administrators グループのすべてのメンバーが、sysadmin 権限で SQL Server に接続できます。

SA アカウントで SQL Server 2012 の管理を行うための手順は次のとおりです。

1. 管理者としてコマンド プロンプトを実行し、コマンド プロンプトからシングル ユーザー モードで SQL Server 2012 を起動します。SQL Server 2012 を最小構成で起動しても問題ありません。最小構成で起動すると、SQL Server は自動的にシングル ユーザー モードに設定されます。
2. (管理者として実行している) コマンド プロンプトで、「SQLServr.Exe –m (または SQLServr.exe –f)」と入力し、SQL Server 2012 データベース エンジンを起動します。このコマンド プロンプトのウィンドウは閉じないでください。SQL Servr.exe は、環境変数 path に指定されている Binn フォルダーにあることを確認できます。環境変数 path に SQL Server 2012 の Binn フォルダーが指定されていない場合は、SQL Server 2012 を実行しているコンピューターの Binn フォルダーを参照できます。通常、Binn フォルダーは C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn にあります。
3. SQL Server 2012 をシングル ユーザー モードまたは最小構成で起動すると、管理者として別のコマンド ライン ウィンドウを開いて、コマンド プロンプトから SQLCMD コマンドを使って SQL Server 2012 インスタンスに接続できます。
SQLCMD –S <Server_Name\Instance_Name>
Example: SQLCMD –S "SALEEMHAKANI"
  上記のコマンドを実行すると、SQL Server にログインできます。ここでは、"SALEEMHAKANI" という名前の SQL Server 2012 インスタンスに、SA としてログインしていることに注意してください。
4. コマンド プロンプトで SQLCMD を使って SQL Server 2012 にログインすると、新しいアカウントを作って、そのアカウントにサーバー レベルのアクセス許可を与えることができます。SQL_SALEEM という名前の新しい SQL Server 2012 のログイン アカウントを作成し、このアカウントを sysadmin サーバー ロールのメンバーに追加します。コマンド プロンプトから新しいログイン アカウントを作成するには、手順 3. を実行した後に、次のコマンドを実行します。
1> CREATE LOGIN '<Login_Name>' with PASSWORD='<Password>'
2> GO
  次に例を示します。
1>     CREATE LOGIN SQL_SALEEM WITH PASSWORD='$@L649$@m'
2>     GO
  SQL_SALEEM という新しいログイン アカウントを作成したら、このアカウントを SQL Server 2012 インスタンスの sysadmin サーバー ロールに追加します。同じコマンド プロンプト ウィンドウで、次のコマンドを実行します。
1> SP_ADDSRVROLEMEMBER '<Login_Name>','SYSADMIN'
2>go
  既存のログイン アカウントを sysadmin サーバー ロールに追加するには、次のコマンドを実行します。
1>     SP_ADDSRVROLEMEMBER '<LOGIN_NAME>','SYSADMIN'
2>     GO
  次に例を示します。
1>     SP_ADDSRVROLEMEMBER SQL_SALEEM,'SYSADMIN'
2>     GO
  上記の操作を行うと、SQL_SALEEM ログイン アカウントに sysadmin 権限が割り当てられます。
5. これらの手順が完了したら、今度は、通常のスタートアップ オプションを使用して SQL Server を停止して、再度起動します。今回は -f や -m を指定する必要はありません。
6. SQL Server 2012 の Management Studio にログインします。コマンド プロンプトからも SQL_SALEEM アカウントとそのパスワードを使用してログインできます。これで、SQL Server 2012 インスタンスに SA アカウントでアクセスできるようになり、SA のパスワードをリセットして、運用環境 SQL Server の管理できるようになりました。

ときどきパスワードを忘れてしまうのはごく普通のことですが、面倒がないわけではありません。ただし、これらの緊急対応策を知っていれば、慌てふためいたり、長時間のダウンタイムを引き起こすことなく、業務を遂行できる状態を取り戻せるでしょう。

Saleem Hakani

Saleem Hakani は、マイクロソフトの主席アーキテクトとして 18 年以上の経験があります。1992 年から SQL Server に携わっており、直近の 7 年間はマイクロソフトが提供する複数の大規模なサービス (Hotmail、Bing、MSN など) に、エンジニアおよび事業計画担当として従事しています。全世界のマイクロソフト社員の SQL Server コミュニティのリーダーを務め、TechReady、SQLFEST、SQL-SCHOOL、SQLPASS など、さまざまマイクロソフトのイベントで技術講演を行っています。

関連コンテンツ