0

データベースへの可能なアクセス方法を、ストアド プロシージャのみを使用するように制限したいと考えています。以外はすべて正常に動作しますSystem.Data.SqlClient.SqlBulkCopy。大量のデータをインポートするために、1 つのクラスでのみ使用しています。

この問題を回避することは可能ですか?

呼び出す前に権利を付与し、SqlBulkCopy後に削除しようとしました:

EXEC [db_mod].[sys].[sp_addrolemember] N'db_datawriter', N'my_user'
EXEC [db_mod].[sys].[sp_droprolemember] N'db_datawriter', N'my_user'

しかし、そのようなアプローチではエラーが発生します:

ユーザーには、このアクションを実行する権限がありません。

同じユーザーで実行しています。必要なものを許可するにはどうすればよいですか?

4

1 に答える 1

3

説明されているエラーは、sp_addrolemember() の試行に続いて発生し、現在のユーザーがアカウントとセキュリティの設定を変更するために必要な権限を持っていないことに関連しています。

SqlBulkCopy の実行に関しては、書き込み権限が必要であり、これらを提供するには db_datawriter ロールが便利な方法ですが、別の方法を検討することもできます。たとえば、現在のアカウントのセキュリティ権限を (一時的にのみ) 増やすのではなく、この特定のデータベース/テーブルに関連付けられているセキュリティ設定を変更できます。

データベース オブジェクトなどの「保護可能なもの」のセキュリティ設定を変更するには、いくつかの管理者権限も必要ですが、これらはデータベースの所有権に関連付けられている可能性があるため、アカウントを変更する権限がない場合でも使用できる場合があります。

于 2009-10-24T23:51:48.173 に答える