2

新しいデータベースのユーザー権限に問題があります。この新しいデータベースを別のサーバーからコピーしました。古いサーバーデータベースには一部のユーザーがいて、いくつかの手順を実行する権限が付与されています。バックアップして新しいサーバーに復元した後、すべてのアクセス許可が失われました。sp_helprotectを実行して、古いサーバーのユーザーとアクセス許可を確認します。それらの権限と役割をスクリプト化する方法はありますか?

現在、SQLServer2012バージョンを実行しています。しかし、その古いデータベースはSQL Server2008r2にありました。それが問題の原因ですか?

4

2 に答える 2

4

データベースを新しいサーバーに復元すると、同じユーザーがに存在する場合でも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]の下のユーザーにドリルダウンすることで、ユーザーに割り当てられている役割を確認できます。セキュリティ| ユーザー| ユーザーを右クリック| プロパティ。

編集

ところで-新しいサーバーに古いデータベースに存在するユーザーがいない場合は、削除して復元したデータベースに再度追加する前に、マスターでユーザーを作成する必要があります。

于 2012-12-07T19:09:03.507 に答える
1

このようなツールを使用している場合、ほとんどのDB比較ユーティリティは、ユーザー、ロールメンバーシップ、および/または権限を移行するように構成できます。Visual Studioデータベースエディション(以前のData Dude)の一部であるスキーマ比較ツールで実行できることはわかっていますが、レッドゲートツールでも実行できると確信しています。

SQL 2012でVSスキーマ比較ユーティリティがBIDSに相当するものに移行したことについて何か覚えていると思います(新しい名前が何であるかを忘れています)。同期するオブジェクトがたくさんある場合は、少なくとも調べる価値があります。

于 2012-12-07T19:20:09.340 に答える