コメントで述べたように、なりすましを使用すると、サーバー レベルのアクセス許可が剥奪されます。
これには 2 つの方法があります:
悪い手っ取り早い方法:
データベースの推力を ON に設定します。それは仕事を成し遂げるでしょう。しかし、これが何をするのかを完全に理解していない場合は、これを行わないことをお勧めします。
ただし、コードは次のとおりです:
ALTER DATABASE [YourDatabase] SET TRUSTWORTHY ON;
プレ>良いが遅い方法
これははるかに正確であり、厄介なセキュリティの副作用はありません.
あなたがすることは、証明書を使用してストアド プロシージャに署名することです。データベース内のその証明書からユーザーを作成します。そのユーザーに、データベース内のテーブルに対する適切な権限を付与します。また、同じ証明書からログインを作成し、そのログインに一括権限を付与します。
その証明書でストアド プロシージャに署名するため、sp が実行されるたびに、そのユーザーのコンテキストで実行され、その証明書から作成された場所にログインします。
手順は次のとおりです:
<オール> <リ>マスターに証明書を作成
<リ>その証明書からログインを作成します
<リ>そのログインに一括管理権限を付与します
ここで、ユーザー データベースにまったく同じ証明書が必要になるため、いくつか追加の手順を実行する必要があります
<オール> <リ>証明書をディスクにエクスポート
<リ>証明書をユーザー データベースにインポートします
これで最終決定できます
<オール>
コードは次のとおりです:
USE master go CREATE CERTIFICATE BulkInsertCert ENCRYPTION BY PASSWORD = 'NicePassword!0' WITH SUBJECT = 'Gives Bulk Insert Privilegde' go CREATE LOGIN BulkInsert_CertLogin FROM CERTIFICATE BulkInsertCert go GRANT ADMINISTER BULK OPERATIONS TO BulkInsert_CertLogin go BACKUP CERTIFICATE BulkInsertCert TO FILE = '[your directory]\BulkInsertCert.cer' WITH PRIVATE KEY (FILE = '[your directory]\BulkInsertCert.pvk' , ENCRYPTION BY PASSWORD = 'EvenNicerPassword!0', DECRYPTION BY PASSWORD = 'NicePassword!0') go USE [YourDatabase] CREATE CERTIFICATE BulkInsertCert FROM FILE = '[your directory]\BulkInsertCert.cer' WITH PRIVATE KEY (FILE = '[your directory]\BulkInsertCert.pvk', DECRYPTION BY PASSWORD = 'EvenNicerPassword!0', ENCRYPTION BY PASSWORD = 'TheVeryBestPasswordThereIs!0') go --NOW DELETE THE CERTIFICATES FROM DISK CREATE USER BulkInsert_CertUser FOR CERTIFICATE BulkInsertCert go GRANT ALTER, INSERT ON [YourTable] TO BulkInsert_CertUser go ALTER PROCEDURE usp_myproc AS EXEC('INSERT INTO ' + @tablename + ' SELECT col1, col2, col3 FROM OPENROWSET( BULK '''+ @filepath +''', FORMATFILE='''+ @formatfile +''', FIRSTROW=2 )as t' ) -- Sign the test procedure each time you have changed it. ADD SIGNATURE TO usp_myproc BY CERTIFICATE BulkInsertCert WITH PASSWORD = 'TheVeryBestPasswordThereIs!0' go
プレ>最後の注意:
Your directory を、SQL サービス アカウントに書き込み権限があることが確実なパスに置き換えてください!
設定が完了したら、これらのエクスポートされた証明書を必ず削除してください..