質問: 私は、データベースのアクセス方法をストアドプロシージャの使用のみに制限したいと考えています。 `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' ``` そのようなアプローチではエラーが発生します。 > ユーザーにはこの操作を実行する権限がありません。 > > 私は同じユーザーの下でそれを実行しています。私は何が必要なのですか?
回答: 説明されているエラーは、sp_addrolemember()を試行した後、アカウントおよびセキュリティ設定を変更するために必要な特権を持たない現在のユーザーに関連しています。 SqlBulkCopyを実行する場合、書き込み権限が必要ですが、db_datawriterロールはこれらを提供する便利な方法ですが、代替案を検討することもできます。たとえば、現在のアカウントのセキュリティ権限を(一時的にのみ)増やすのではなく、この特定のデータベース/テーブルに関連付けられたセキュリティ設定を変更できます。 データベースオブジェクトなどの「セキュリティオブジェクト」のセキュリティ設定を変更するには管理者権限も必要ですが、データベースの所有権に関連付けられている可能性があります。したがって、アカウントを変更する権限はありません。