データベースを新しいサーバーに復元すると、同じユーザーがに存在する場合でもmaster
、同じシステムIDを持たないため、復元されたデータベースからユーザーを削除して、復元されたデータベースに再度追加する必要があります。このようにして、認証されたユーザーのシステムIDがデータベースに流れ、master
すべての権限を再スクリプト化することなく、すべての権限が復元されます...
たとえば、データベースを別のサーバーに復元する場合、使用するログインごとに次のスクリプトを実行する必要がありました。
USE [new_db_name]
GO
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'login_name')
DROP USER [login_name]
GO
CREATE USER [login_name] FOR LOGIN [login_name]
GO
EXEC sp_addrolemember N'My_StoredProcs', N'login_name'
GO
EXEC sp_addrolemember N'db_datareader', N'login_name'
GO
EXEC sp_addrolemember N'db_datawriter', N'login_name'
GO
ログインも特定のメンバーであることがわかるroles
ので、それらもスクリプト化する必要があります。もちろん、各ユーザーに属するロールのみを追加する必要があります...!SSMSを開き、[DB] | [DB]の下のユーザーにドリルダウンすることで、ユーザーに割り当てられている役割を確認できます。セキュリティ| ユーザー| ユーザーを右クリック| プロパティ。
編集
ところで-新しいサーバーに古いデータベースに存在するユーザーがいない場合は、削除して復元したデータベースに再度追加する前に、マスターでユーザーを作成する必要があります。