質問: 私たちはSQL Server 2012 / .Net Framework 4.5.1を実行しています 私たちは以下のことをするアプリケーションを持っています: 1. .NetのSqlBulkCopyのインスタンスを使用して、ソースデータベースからすべてのテーブルデータを抽出します。 2. 通常のSQL文を使用して、ターゲット・データベース内のすべてのデータを削除します。 3. .NetのSqlBulkCopyのインスタンスを使用して、ソースデータベースからターゲットデータベースにデータを展開します。 3番目の手順は、SQL接続でActive Directoryアカウントが使用されているが、この目的のために作成されたSQL Serverアカウントを使用しているときに、次のエラーメッセージが表示されて失敗する場合に成功します*。 "[SchemaName]。[TableName]"オブジェクトが見つかりません存在するか、アクセス権がありません。* 興味深いことに、プロセスは約12ダースのテーブルを実行してからこのエラーの原因となります。手動による検証では、a)ターゲット上にテーブルが存在すること、b)問題のユーザーがテーブルから選択できること、c)問題のあるユーザーが手動で標準のINSERT INTO [SchemaName]。[TableName]([列])VALUES([値])形式。そのユーザーのBCPも動作しますが、.NetアプリケーションのSqlBulkCopyを使用すると、同じユーザーが失敗します。 私たちのDBA(かなり熟練した男、実際には私が言うことができる限り)は、2人のユーザーの間でターゲットデータベースのデータベースアクセス権が同一であると言いますが、現実にはそうではないようです。 問題を調べると、ユーザーはdb_ownerまたはdb_ddladminの役割を持つ必要があることがわかります。ユーザーは実際には両方に属します。 とにかく、現地の問題を解決することは二次的関心事です。私のADアカウントで何が必要なのかを知ることができるからです。 **私が本当に知りたいのは、2人のユーザーのアクセス許可の違いを比較するための焼き付け方法があるかどうかです。もしそうでなければ、これは何らかのT-SQLクエリで行うことができますか?** ありがとう、みんなとガール!
回答: ここで私が使用している私のアクセス許可スクリプトです。 Visual Studio、Red Gateなどを使ってスキーマを比較しない限り、一般的に誰もが使用するアプローチです。http://www.csvreader.com/posts/permissions_list.php SqlBulkCopyでデスティネーションテーブルのスキーマを指定していますか?ユーザー所有のスキーマインスタンスを実行している可能性はありますか? また、SqlBulkCopyが選択と挿入が必要なのは私の経験でした。 BCPには、説明したエスカレートされた権限が必要です。これはSqlBulkCopyのもう1つの利点です。