web-dev-qa-db-ja.com

SQLログインと権限をサーバー間でコピーする

すべてのログインとそれに関連付けられたデータベースレベルの権限をサーバー間で複製する必要があります。サーバーAにSQL Server 2008 R2を、サーバーBにSQL Server 2012を使用しています。サーバーAからサーバーBにログインを転送するためのいくつかの異なるスクリプトを見つけることができます。ただし、ログインごとにデータベースレベルの権限も転送する必要があります。

ログインの転送について、以下を確認しました。

http://www.sqlsoldier.com/wp/sqlserver/transferring-logins-to-a-database-mirrorhttp://support.Microsoft.com/kb/918992

SQL Soldierソリューションは正常に動作するようです。

サーバーAにある同じデータベースがサーバーBにもあります。あるサーバーから別のサーバーへのログインと権限の転送を自動化/スクリプト化するにはどうすればよいですか?

4
DMill

目的に使用できるストアドプロシージャを持っています。

sp_dbpermissions

実行すると、データベースのすべての権限が3つの結果セットにプルされます。最初はプリンシパルのリスト、2番目はロールメンバーシップ、最後は直接のアクセス許可です(GRANT EXEC ON SPなど)。各結果セットには、前述のアクセス許可を削除するスクリプトと、何よりも、元々は調査ツールとして設計されたので、データを制限する方法はたくさんあります。たとえば、パラメータ@LoginNameは、(データベースプリンシパル名ではなく)指定されたサーバープリンシパル名に一致するプリンシパルのみを返します。さらに目的に応じてAllオプションが返されます@DBNameパラメータ。すべてのデータベース(システムデータベースを含む)の結果を実行するだけでなく、drop&createステートメントの先頭にUSEステートメントを含めます。

そうすれば、特定のログインのすべての権限を生成する必要がある場合は、次のコマンドを実行できます。

EXEC sp_DBPermissions 'All',@LoginName = 'loginame'

注:これにはCREATE LOGINステートメントは含まれません。これを行うには、SQL Soldiersスクリプトを使用するか、sp_SRVPermissionsもあります。

1
Kenneth Fisher

この記事に基づいて、同様の目標を達成する一連のストアドプロシージャを作成しました(フレーバーにはいくつかのPowerShellを使用) Claire-Hsu-SQLログイン

私は自分のブログを持っているわけではない(知っている、わかっている)ので、正確な解決策をあなたと共有することはできません。基本的に、3つのストアドプロシージャを作成しました。 1つはサーバーログイン用、もう1つはデータベース用、もう1つはデータベースオブジェクト権限用です。

ああ、1台のドライブで共有。 ファイルへのリンク 必要なストアドプロシージャです。 DBAデータベースに保存しています。次に、Powershellを使用してログインのリストを取得し、ストアドプロシージャにクエリを実行し、スクリプトをファイルに保存して繰り返します。別のサーバーでスクリプトを実行するように簡単に変更できます。

1
Jonathan Fite