Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

संदेश 4834 आपको बल्क लोड स्टेटमेंट का उपयोग करने की अनुमति नहीं है

जैसा कि मैंने टिप्पणी में कहा था, जब आप प्रतिरूपण का उपयोग करते हैं तो सर्वर स्तर की अनुमतियां छीन ली जाती हैं।

इसके दो तरीके हैं:

बुरा और त्वरित तरीका:

अपने डेटाबेस को जोर से चालू पर सेट करें। यह काम पूरा हो जाएगा। लेकिन अगर आप पूरी तरह से यह नहीं समझते हैं कि यह क्या करता है, तो मेरी सलाह होगी कि ऐसा न करें।

हालांकि, यहां कोड है:

ALTER DATABASE [YourDatabase] SET TRUSTWORTHY ON;
 

अच्छा लेकिन धीमा तरीका

यह बहुत अधिक सटीक है और इसका कोई बुरा सुरक्षा दुष्प्रभाव नहीं है।

आप क्या करते हैं कि आप प्रमाण पत्र के साथ अपनी संग्रहीत प्रक्रिया पर हस्ताक्षर करते हैं। आप डेटाबेस में उस प्रमाणपत्र से एक उपयोगकर्ता बनाते हैं। आप उस उपयोगकर्ता को डेटाबेस में अपनी टेबल पर उचित अनुमति देते हैं। आप उसी प्रमाणपत्र से एक लॉगिन भी बनाते हैं और उस लॉगिन को बल्क अनुमतियां देते हैं।

क्योंकि आप उस प्रमाणपत्र के साथ संग्रहित खरीद पर हस्ताक्षर करते हैं, हर बार जब एसपी निष्पादित होता है, तो इसे उस उपयोगकर्ता के संदर्भ में निष्पादित किया जाता है और उस प्रमाणपत्र से जहां बनाया गया है वहां लॉगिन करें।

चरण हैं:

  1. मास्टर में प्रमाणपत्र बनाएं

  2. उस प्रमाणपत्र से लॉगिन बनाएं

  3. उस लॉगिन के लिए बल्क व्यवस्थापक अनुमतियां प्रदान करें

अब आपको अपने उपयोगकर्ता डेटाबेस में ठीक उसी प्रमाणपत्र की आवश्यकता है ताकि हमारे पास करने के लिए कुछ अतिरिक्त चरण हों

  1. प्रमाणपत्र को डिस्क पर निर्यात करें

  2. अपने उपयोगकर्ता डेटाबेस में प्रमाणपत्र आयात करें

अब हम अंतिम रूप दे सकते हैं

  1. प्रमाणपत्र से उपयोगकर्ता बनाएं
  2. उस उपयोगकर्ता को टेबल पर अनुमति दें
  3. अपनी संग्रहीत कार्यविधि से एक्ज़ीक्यूट को क्लॉज़ के रूप में निकालें
  4. अपने प्रमाणपत्र के साथ अपनी संग्रहीत कार्यविधि पर हस्ताक्षर करें

यहाँ कोड है:

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

अंतिम नोट:

कृपया अपनी निर्देशिका को उस पथ से बदलें जहाँ आप सुनिश्चित हैं कि sql सेवा खाते को लिखने की अनुमति मिल गई है!

सुनिश्चित करें कि आपने उन निर्यात किए गए प्रमाणपत्रों को सेट अप करने के बाद हटा दिया है..



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दो तिथियों के बीच सप्ताह प्रारंभ तिथि (सोमवार) और समाप्ति तिथि (रविवार) की सूची कैसे प्राप्त करें?

  2. तालिका के पहले दो कॉलम लौटाने के लिए SQL

  3. सीएसवी डेटा के भीतर अल्पविराम

  4. मैं टी-एसक्यूएल में एक्सएमएल कॉलम की विशेषताओं पर कैसे पिवट करूं?

  5. बराबर नहीं <> !=NULL पर ऑपरेटर