web-dev-qa-db-ja.com

バックアップ後に復元されたユーザー権限->復元操作

いくつかのSQL Server 2008データベースを新しいdbサーバーに移動して、すべてを(.bakファイルに)バックアップし、これらのファイルを新しいボックスにコピーして復元しました(すべてSQL Management Studioを使用して行いました)。

すべてうまくいきましたが、古いRDBMSで引き続き動作するSQL Serverアカウントを使用して、どのデータベースにもログインできません。私のWindows認証ログインは、ついでに問題なく動作します。

ユーザーと権限はすべてシームレスに新しいデータベースサーバーに複製されるという考えがありましたが、どこかで問題が発生しているようです。コメント/提案/ヘルプの提供をお願いします;-)

11
5arx

元の質問で気付いたのは、古いサーバーにまだアクセスできるということでした。

SO=に関する次の質問には同様の問題があり、ユーザー権限を生成するためのスクリプトを含むMicrosoftの記事へのリンクが含まれています。

https://stackoverflow.com/questions/461385/restoring-a-backup-to-a-different-server-user-permissions

(その質問にリストされているリソース http://support.Microsoft.com/kb/918992

サーバー設定をWindows認証から混合モード認証に変更すると問題が解決したようですが、問題が完全に解決しない場合に備えて、これが役立つと思いました。

7
Jeff

これは「孤立したユーザー」と呼ばれます。これを修正する方法は2つあります

  1. 可能であれば、元のマスターデータベースを「loginsource」として復元します。sys.server_principalsには、すべてのSQL ServerおよびWindowsログインを生成するのに十分な情報があります。つまり、SIDと暗号化されたパスワード

  2. Windowsログインのみを使用する場合、データベースごとにこれを実行してスクリプトを生成できます。

脚本:

SELECT
    'CREATE LOGIN [' + SUSER_SNAME(sid) + '] FROM WINDOWS'
FROM
    sys.database_principals
WHERE
    [type] IN ('G', 'U')
6
gbn

理想的には、復元を実行する前に、ユーザーと権限をスクリプト化します。それが行われていない場合は、事後に問題を修正する必要があります。チャンスは見逃される可能性がありますが、その方法の約90%を達成できるはずです。

確認する必要がある最初のことは、同じログインが新しいサーバーに存在するかどうかです。そうでない場合は、新しいサーバーでログインを作成してもよいかどうかを確認する必要があります。それらが作成されるべきだと思い込まないでください。そもそもなぜそれらが存在しなかったのかについては、十分な理由がある可能性があります。次に、sysusersテーブルを掘り下げて、それらを作成します。

次のようなものを実行して、孤立したユーザーを修正できます。

DECLARE @username varchar(25), @loginsid varbinary(85)
DECLARE fixusers CURSOR
FOR
SELECT UserName = name 
    FROM sysusers
    WHERE issqluser = 1 
    and (sid is not null and sid <> 0x0)
    and suser_sname(sid) is null
    and name in (select name from master..syslogins)
    ORDER BY name
OPEN fixusers
FETCH NEXT FROM fixusers
INTO @username
WHILE @@FETCH_STATUS = 0
BEGIN
    EXEC sp_change_users_login 'update_one', @username, @username

    FETCH NEXT FROM fixusers
    INTO @username
END CLOSE fixusers
DEALLOCATE fixusers 

このコードはSQL2008で機能しますが、SQL2000の下位互換性を持つように作成されています。

5
SQLRockstar

次のURLを参照して、データベースユーザーの権限を修正できます。

http://mywindowsblog.com/?p=287

0
Prashant