जैसा कि मैंने टिप्पणी में कहा था, जब आप प्रतिरूपण का उपयोग करते हैं तो सर्वर स्तर की अनुमतियां छीन ली जाती हैं।
इसके दो तरीके हैं:
बुरा और त्वरित तरीका:
अपने डेटाबेस को जोर से चालू पर सेट करें। यह काम पूरा हो जाएगा। लेकिन अगर आप पूरी तरह से यह नहीं समझते हैं कि यह क्या करता है, तो मेरी सलाह होगी कि ऐसा न करें।
हालांकि, यहां कोड है:
ALTER DATABASE [YourDatabase] SET TRUSTWORTHY ON;
अच्छा लेकिन धीमा तरीका
यह बहुत अधिक सटीक है और इसका कोई बुरा सुरक्षा दुष्प्रभाव नहीं है।
आप क्या करते हैं कि आप प्रमाण पत्र के साथ अपनी संग्रहीत प्रक्रिया पर हस्ताक्षर करते हैं। आप डेटाबेस में उस प्रमाणपत्र से एक उपयोगकर्ता बनाते हैं। आप उस उपयोगकर्ता को डेटाबेस में अपनी टेबल पर उचित अनुमति देते हैं। आप उसी प्रमाणपत्र से एक लॉगिन भी बनाते हैं और उस लॉगिन को बल्क अनुमतियां देते हैं।
क्योंकि आप उस प्रमाणपत्र के साथ संग्रहित खरीद पर हस्ताक्षर करते हैं, हर बार जब एसपी निष्पादित होता है, तो इसे उस उपयोगकर्ता के संदर्भ में निष्पादित किया जाता है और उस प्रमाणपत्र से जहां बनाया गया है वहां लॉगिन करें।
चरण हैं:
-
मास्टर में प्रमाणपत्र बनाएं
-
उस प्रमाणपत्र से लॉगिन बनाएं
-
उस लॉगिन के लिए बल्क व्यवस्थापक अनुमतियां प्रदान करें
अब आपको अपने उपयोगकर्ता डेटाबेस में ठीक उसी प्रमाणपत्र की आवश्यकता है ताकि हमारे पास करने के लिए कुछ अतिरिक्त चरण हों
-
प्रमाणपत्र को डिस्क पर निर्यात करें
-
अपने उपयोगकर्ता डेटाबेस में प्रमाणपत्र आयात करें
अब हम अंतिम रूप दे सकते हैं
- प्रमाणपत्र से उपयोगकर्ता बनाएं
- उस उपयोगकर्ता को टेबल पर अनुमति दें
- अपनी संग्रहीत कार्यविधि से एक्ज़ीक्यूट को क्लॉज़ के रूप में निकालें
- अपने प्रमाणपत्र के साथ अपनी संग्रहीत कार्यविधि पर हस्ताक्षर करें
यहाँ कोड है:
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 सेवा खाते को लिखने की अनुमति मिल गई है!
सुनिश्चित करें कि आपने उन निर्यात किए गए प्रमाणपत्रों को सेट अप करने के बाद हटा दिया है..