SQL सर्वर 2016 के सामुदायिक तकनीकी पूर्वावलोकन (CTP) रिलीज़ ने हमें कुछ नई सुविधाओं को आज़माने का अवसर दिया है जो आगामी संस्करण में उपलब्ध होंगी।
डायनामिक डेटा मास्किंग
यह सुविधा आपको उन उपयोगकर्ताओं से गोपनीय डेटा की रक्षा करने की अनुमति देती है जो इसे देखने के लिए अधिकृत नहीं हैं, कुछ या सभी कॉलम की सामग्री को अस्पष्ट करके। उदाहरण के लिए, आप सहायता डेस्क के कर्मचारियों को अंतिम चार अंक देखने में सक्षम बनाने के लिए क्रेडिट कार्ड नंबर का कुछ हिस्सा दिखा सकते हैं; आप वेतन कॉलम में रखे गए डेटा को पूरी तरह से अस्पष्ट करना चुन सकते हैं।
यदि आप SQL सर्वर CTP 2.0 का उपयोग कर रहे हैं, तो डायनेमिक डेटा मास्किंग को सक्षम करने के लिए आपको यह कमांड चलाने की आवश्यकता है:
DBCC TRACEON(209,219,-1)
यदि आप सीटीपी के बाद के संस्करण का उपयोग कर रहे हैं तो इस आदेश का उपयोग न करें, क्योंकि यह गतिशील डेटा मास्किंग को अक्षम कर देगा। (यदि आप CTP 2.0 का उपयोग कर रहे हैं और आप नहीं करते हैं इस DBCC कमांड को चलाएँ या आप CTP2.1+ चला रहे हैं और आप करते हैं इस कमांड को चलाने के लिए, कॉलम के लिए डायनेमिक मास्क को परिभाषित करने का प्रयास करते समय आपको "मास्कड' के पास गलत सिंटैक्स" त्रुटि मिलेगी।
निम्न SQL एक तालिका बनाता है जो तीन स्तंभों की सामग्री को अस्पष्ट करने के लिए डायनेमिक डेटा मास्किंग का उपयोग करता है। CreditCard
. की सामग्री स्तंभ आंशिक रूप से उजागर होते हैं। Phone
में क्या दिखाई देता है कॉलम को डायनेमिक डेटा मास्क पर छोड़ दिया जाता है। स्ट्रिंग कॉलम के लिए डिफ़ॉल्ट "xxxx" है। संख्यात्मक कॉलम के लिए डिफ़ॉल्ट "0" है। Email
कॉलम एक गतिशील डेटा मास्क का उपयोग करता है जो विशेष रूप से उस कॉलम की सामग्री के लिए तैयार किया गया है।
CREATE TABLE Customer (ID int IDENTITY PRIMARY KEY, Name varchar(100) NOT NULL, CreditCard varchar(9) MASKED WITH (FUNCTION = 'partial(0,"xxxxx",4)') NULL, Phone varchar(12) MASKED WITH (FUNCTION = 'default()') NULL, Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL); INSERT INTO Customer VALUES('A Name', '111222333', '01937 860000', 'someone@somedomain')
isql
. का उपयोग करना प्रोग्राम हमारे SQL सर्वर ODBC ड्राइवर वितरण में शामिल है, हम एक SQL सर्वर खाते से लॉग इन करते हैं जो एक नकाबपोश कॉलम की सामग्री को देखने के लिए अधिकृत नहीं है:
$ /usr/local/easysoft/unixODBC/bin/isql.sh -v SQLSERVER_2016 myuser mypassword +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select * from customer +----+-------+-----------+-------+---------------+ | ID | Name | CreditCard| Phone | Email | +----+-------+-----------+-------+---------------+ | 1 | A Name| xxxxx2333 | xxxx | [email protected] | +----+-------+-----------+-------+---------------+
फिर हम उस खाते से लॉग इन करते हैं जिसके पास पर्याप्त विशेषाधिकार हैं:
$ /usr/local/easysoft/unixODBC/bin/isql.sh -v SQLSERVER_2016 sa mypassword +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select * from customer +----+-------+-----------+--------------+------------------------+ | ID | Name | CreditCard| Phone | Email | +----+-------+-----------+--------------+------------------------+ | 1 | A Name| 111222333 | 01937 860000 | [email protected] | +----+-------+-----------+--------------+------------------------+
JSON सपोर्ट
जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) एक टेक्स्ट प्रारूप है जो डेटा के आदान-प्रदान की सुविधा प्रदान करता है। जैसे-जैसे अधिक एप्लिकेशन डेवलपर JSON को अपने पसंदीदा डेटा प्रारूप के रूप में अपनाते हैं, JSON के अनुकूल डेटाबेस की आवश्यकता बढ़ रही है। परिणामस्वरूप, कई NoSQL डेटाबेस ने JSON को अपने प्राथमिक डेटा प्रारूप के रूप में चुना है। ऐसा ही एक डेटाबेस है MongoDB।
हमारी परीक्षण मशीनों पर, हमने SQL सर्वर और MongoDB के बीच डेटा का आदान-प्रदान करने के लिए SQL Server 2016 के JSON समर्थन का उपयोग किया।
हमने पहले JSON प्रारूप में बनाए गए ग्राहक डेटा को निर्यात करने के लिए हमारे SQL सर्वर ODBC ड्राइवर के वितरण में शामिल बल्क कॉपी प्रोग्राम (बीसीपी) का उपयोग किया था। (बीसीपी कमांड SQL सर्वर से "sa" के रूप में जुड़ता है और इसलिए नकाबपोश कॉलम में डेटा उजागर होता है।)
$ cd /usr/local/easysoft/sqlserver/bcp $ ./bcp "select * from customer for json auto" queryout customer.json -U sa -c Password: Starting copy... 1 row successfully bulk-copied to host file. Total received: 1 Clock Time (ms.) Total : 12129 Average : 0.082 rows per second $ more customer.json [{"ID":1,"Name":"A Name","CreditCard":"111222333","Phone":"01937 860000", "Email":"someone@somedomain"}]
फिर हमने JSON डेटा को MongoDB में इंपोर्ट किया:
$ cd /opt/mongodb-linux-x86_64-ubuntu1404-3.0.7/bin $ ./mongoimport --db=SQLServer --collection=Customer --file=customer.json --jsonArray $ connected to: localhost imported 1 document
$ ./mongo MongoDB shell version: 3.0.7 connecting to: test > use SQLServer switched to db SQLServer > db.Customer.find() { "_id" : ObjectId("56334017f6df768ab87f2e8c"), "ID" : 1, "Name" : "A Name", "CreditCard" : "111222333", "Phone" : "01937 860000", "Email" : "someone@somedomain" } >
पंक्ति-स्तरीय सुरक्षा
अपनी पंक्ति-स्तरीय सुरक्षा सुविधा के साथ, SQL सर्वर 2016 SQL सर्वर लॉगिन के आधार पर पंक्ति डेटा तक पहुँच को प्रतिबंधित करने में सक्षम है। पंक्ति-स्तर सुरक्षा SQL सर्वर उपयोगकर्ताओं के लिए पारदर्शी है, वे इस बात से अनजान हैं कि जिन पंक्तियों को देखने के लिए वे अधिकृत नहीं हैं, उन्हें उनके क्वेरी परिणामों से फ़िल्टर किया जा रहा है।
हमारे SQL सर्वर ODBC ड्राइवर के साथ इस सुविधा को आज़माने के लिए, हमने Microsoft के पंक्ति-स्तरीय सुरक्षा उदाहरण को पुन:प्रस्तुत किया। हमने इसे एक डेटाबेस में किया था जिसमें "Sales1" और "Sales2" नाम के SQL सर्वर उपयोगकर्ता थे, जिनके पास SELECT
है विशेषाधिकार।
हमने कुछ बिक्री डेटा के साथ एक तालिका बनाई और पॉप्युलेट की। SalesRep
कॉलम प्रासंगिक बिक्री प्रतिनिधि का उपयोगकर्ता नाम संग्रहीत करता है।
CREATE TABLE Sales ( OrderID int, SalesRep sysname, Product varchar(10), Qty int ); INSERT Sales VALUES (1, 'Sales1', 'Valve', 5), (2, 'Sales1', 'Wheel', 2), (3, 'Sales1', 'Valve', 4), (4, 'Sales2', 'Bracket', 2), (5, 'Sales2', 'Wheel', 5), (6, 'Sales2', 'Seat', 5);
पंक्ति-स्तरीय सुरक्षा को तालिका-मूल्यवान फ़ंक्शन के साथ कार्यान्वित किया जाता है जो या तो एकल पंक्ति लौटाता है, यदि उपयोगकर्ता के पास उपयुक्त पहुंच है, या कोई परिणाम नहीं है। निम्नलिखित उदाहरण में, तालिका मान फ़ंक्शन एक पंक्ति देता है यदि SalesRep
कॉलम वही है जो उपयोगकर्ता क्वेरी को निष्पादित कर रहा है।
CREATE SCHEMA Security; CREATE FUNCTION Security.fn_securitypredicate(@SalesRep AS sysname) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS fn_securitypredicate_result WHERE @SalesRep = USER_NAME(); CREATE SECURITY POLICY SalesFilter ADD FILTER PREDICATE Security.fn_securitypredicate(SalesRep) ON dbo.Sales WITH (STATE = ON);
हमने डेटाबेस से Sales2 उपयोगकर्ता के रूप में कनेक्ट करने के लिए SQL सर्वर ODBC ड्राइवर का उपयोग किया। पंक्ति-स्तरीय सुरक्षा सुनिश्चित करती है कि यह उपयोगकर्ता केवल उपयोगकर्ता Sales2 द्वारा की गई बिक्री देख सकता है।
$ /usr/local/easysoft/unixODBC/bin/isql.sh -v SQLSERVER_2016 Sales2 mypassword +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select * from Sales +------------+----------+-----------+-------+ | OrderID | SalesRep | Product | Qty | +------------+----------+-----------+-------+ | 4 | Sales2 | Bracket | 2 | | 5 | Sales2 | Wheel | 5 | | 6 | Sales2 | Seat | 5 | +------------+----------+-----------+-------+ SQL> select * from Sales where OrderID = 1 +------------+----------+-----------+-------+ | OrderID | SalesRep | Product | Qty | +------------+----------+-----------+-------+ | | | | | +------------+----------+-----------+-------+
इन-डेटाबेस R
Microsoft द्वारा R प्रोग्रामिंग भाषा के लिए सॉफ़्टवेयर और सेवाओं के प्रदाता, रेवोल्यूशन एनालिटिक्स की खरीद के साथ, वे R को SQL सर्वर के साथ एकीकृत करने में सक्षम हैं। SQL सर्वर 2016 R को शामिल करने वाला डेटाबेस का पहला संस्करण होगा, जिससे SQL सर्वर डेटाबेस इंजन के अंदर R कोड चलाया जा सकेगा।
यदि आपके पास SQL सर्वर का पुराना संस्करण है, तो ODBC का उपयोग करके SQL सर्वर से डेटा को R में निकालने का विकल्प है। RODBC पैकेज ने R के लिए एक ODBC इंटरफ़ेस प्रदान किया। हमने अपने SQL सर्वर ड्राइवर के वितरण में शामिल unixODBC ड्राइवर प्रबंधक के विरुद्ध RODBC का निर्माण किया और फिर R से कुछ SQL सर्वर डेटा पुनर्प्राप्त किया:
# export ODBC_LIBS=/usr/local/easysoft/unixODBC/lib # export ODBC_INCLUDE=/usr/local/easysoft/unixODBC/include # R CMD INSTALL RODBC_1.3-12.tar.gz $ R > library("RODBC") > ch <- odbcConnect("SQLSERVER_2016") > sqlQuery(ch, paste("SELECT * from Customer")) ID Name CreditCard Phone Email 1 1 A Name 111222333 01937 860000 someone@somedomain