管理者グループ(administrators)なのにSQL Server Expressの管理者になれない場合

VisualStudio2010(その他バージョンも含む)では、DBはSQL Server Expressがあると便利ですね。
じゃ実際に使おうとしたときにうまくいかないケースはありませんか?
Google先生で調べてみても、Admonistratorsグループ所属ユーザであれば、SQL Server Expressの管理者であるようなことが書いてあるブログ記事が多く見つけられます。
でも、実際にadministratorsグループ所属ユーザで使おうとすると、”権限がありません”というメッセージが出てしまう。
EATE DATABASE permission denied in database ‘master’
データベース’master’への権限がありません。
これは、SQL Server Express本体をインストールしたユーザにのみ、sysadminの権限が与えられている模様。
調べているとようやくひとつ見つかった。
下記のURLの通りやってみるとうまくいったので、日本語で解説しておきたい。
http://tech.avivo.si/2012/02/how-to-restore-administrator-access-to-a-sql-server/
管理者(管理者に所属する)ユーザでログインする
下記のレジストリを変更する。(regeditを使う)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQLServer
LoginMode が1であれば、2にする。
※これは、Windows認証(1)をSQL Server認証(2)に切り替える
SQL Serverを再起動。(サービスからSQL Serverを選んで再起動)
サービスからSQL Serverを停止。
停止したサービス「SQL Server」のプロパティを見て、パスを取得する。
例:
"c:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER2008\MSSQL\Binn\sqlservr.exe" -sMSSQLSERVER2008
この最後に、
-m -cを追加
例:
"c:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER2008\MSSQL\Binn\sqlservr.exe" -sMSSQLSERVER2008 -m -c
これは、SQL Serverの起動コマンドになるので、コマンドプロンプトから実行する。
コマンドプロンプトが実行中のままになるので、別途コマンドプロンプトを立ち上げる。
以下の通りログインユーザ「hero」パスワード「123」としてsysadminの権限を付与して作成する。
CREATE LOGIN hero WITH PASSWORD="123", DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF EXEC sys.sp_addsrvrolemember @loginame = "hero", @rolename = "sysadmin" GO
※loginame のnは1つ。間違えやすいので。
これでユーザが作られた。
あとは、SQL Serverを停止させる。
実行中のコマンドプロンプトをアクティブにして、CTRL+Cで停止させる。
停止してよいか?と聞かれるのでY。
あとは、通常通り、サービスからSQL Serverを起動させてログインを確認してみる。
うまくいってるはず。
[amazonjs asin=”4798034754″ locale=”JP” tmpl=”Small” title=”よくわかるSQL Server 2012データベース構築・管理入門編 (TECHNICAL MASTER)”]
1件のコメント