(SQL Server)mdfファイルを別SQL Serverに移行した時のDBユーザの問題
例えば、SQL Server で "testDB" というデータベースを運用しているとします。
この SQL Server には "userA" という SQL ユーザがおり、SQL 認証でのログインが可能で、"testDB" に対して db_owner のロールを持っているとします。
e0091163_15592288.jpg


この "testDB" データベースをデタッチして、新たに SQL Server をインストールした別のサーバに "testDB" の mdf,ldf ファイルを移してアタッチします。

この時、どうやら mdf ファイルに前のサーバで設定した データベースユーザの情報が残っているらしく、Management Studio でみると、"testDB" のセキュリティに "userA" が表示されます。
ただ、SQL Server 全体のセキュリティには表示されません。
ちょうど下記のような状態です。(SQL Server からユーザ削除した時と同じ現象ですね。)
これは "testDB" の "userA" のプロパティです。ログインができなくなってます。
e0091163_16124921.jpg


この状態で、下記のように "userA" を作っても、うまく "testDB" とのマッピングができません。

USE [master]
GO
CREATE LOGIN userA WITH PASSWORD=N'1234', DEFAULT_DATABASE=testDB, CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE testDB
GO
CREATE USER userA FOR LOGIN userA
GO
USE testDB
GO
EXEC sp_addrolemember N'db_owner', N'userA'
GO

このように、マッピングされていない状態となってしまいます。
e0091163_16132227.jpg


それで、上記のコマンドの前にいったん "testDB" に関連付けられてる "userA" を削除する下記 SQL を実行したら、上記コマンド実行後にちゃんと "testDB" と "userA" がマッピングされるようになりました。

USE [testDB]
GO
DROP USER [userA]
GO


まあ、Management Studio から手動でマッピングしてもいいんですが、パッケージ製品として、インストール時にバッチファイル等で初期設定するときとかは SQL コマンドでやったほうが楽ですね。
[PR]
by jehoshaphat | 2009-07-08 16:15 | サーバがらみ | Trackback | Comments(0)
トラックバックURL : http://jehupc.exblog.jp/tb/10574962
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。


<< (ネットワーク)DNS環境が無... (Firefox) いつのまに... >>