「SQL01」という最初のSQLサーバーインスタンスに「foo」というデータベースがあり、Snap Manager for SQL Serverを使用してスナップショットを介して毎晩バックアップされ、Flexクローンが作成されて「SQL02」という2番目のサーバーインスタンスに復元されます。データベースfooには、データリーダーとストアドプロシージャの権限を持つ「someuser」というSQLユーザーがいます。
復元操作後、someuserユーザーでSQL02のfooデータベースにアクセスできません。ユーザーのアクセス許可が正しく設定されているように見えますが、データベースにアクセスできません。エラーは、「サーバープリンシパル「someuser」は、現在のセキュリティコンテキストでデータベース「foo」にアクセスできません。」です。
データベースからユーザーを削除してから再度追加すると、正常に機能します。何か案は?
sp_change_users_loginは古い方法であり、SQL Server 2005を使用しているため、ALTERUSER構文を使用してみてください。
http://sqlblog.com/blogs/greg_low/archive/2009/02/02/much-ado-about-logins-and-sids.aspx
チェックアウト sp_change_users_login sp_change_users_login 'レポート'を実行します。結果がある場合は、sp_change_users_login 'autofis'、 'someuser'を使用します。
復元したデータベースからユーザーを削除してから、サーバーセキュリティでユーザーを開き、そのDBにユーザーのアクセス許可を再度設定する必要がある場合があります。
この問題を回避するには、ユーザー(バックアップを作成しているユーザー)をバックアップデータベースのユーザーとして追加します。ユーザーは新しいインスタンスに(ログイン)アクセスできる必要があります。
サーバーログインはマスターデータベースに保存され、アプリケーションDBとともに移動されません。サーバーレベルでログインを作成してから、Sankarの提案に従ってsp_change_users_login'auto_fix '、' loginname 'を使用できます。より多くのログインセットを移動するには、次のリンクを確認してください。 SQL Serverのインスタンス間でログインとパスワードを転送する方法