web-dev-qa-db-ja.com

SQL Server 2005でデータベースを別のサーバーにバックアップおよび復元した後、ユーザーが機能しない

「SQL01」という最初のSQLサーバーインスタンスに「foo」というデータベースがあり、Snap Manager for SQL Serverを使用してスナップショットを介して毎晩バックアップされ、Flexクローンが作成されて「SQL02」という2番目のサーバーインスタンスに復元されます。データベースfooには、データリーダーとストアドプロシージャの権限を持つ「someuser」というSQLユーザーがいます。

復元操作後、someuserユーザーでSQL02のfooデータベースにアクセスできません。ユーザーのアクセス許可が正しく設定されているように見えますが、データベースにアクセスできません。エラーは、「サーバープリンシパル「someuser」は、現在のセキュリティコンテキストでデータベース「foo」にアクセスできません。」です。

データベースからユーザーを削除してから再度追加すると、正常に機能します。何か案は?

1
Robert Swisher

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

http://msdn.Microsoft.com/en-us/library/ms176060.aspx

0
Sankar Reddy

チェックアウト sp_change_users_login sp_change_users_login 'レポート'を実行します。結果がある場合は、sp_change_users_login 'autofis'、 'someuser'を使用します。

0
SqlACID

復元したデータベースからユーザーを削除してから、サーバーセキュリティでユーザーを開き、そのDBにユーザーのアクセス許可を再度設定する必要がある場合があります。

0
beakersoft

この問題を回避するには、ユーザー(バックアップを作成しているユーザー)をバックアップデータベースのユーザーとして追加します。ユーザーは新しいインスタンスに(ログイン)アクセスできる必要があります。

0
user3414230

サーバーログインはマスターデータベースに保存され、アプリケーションDBとともに移動されません。サーバーレベルでログインを作成してから、Sankarの提案に従ってsp_change_users_login'auto_fix '、' loginname 'を使用できます。より多くのログインセットを移動するには、次のリンクを確認してください。 SQL Serverのインスタンス間でログインとパスワードを転送する方法

0
Stan the DBA