কম্পিউটার টিউটোরিয়াল

SQL Server 2016-এ রো-লেভেল সিকিউরিটি দিয়ে ডেটা প্রোটেকশন বাড়ান

Microsoft® SQL Server®-এ সিকিউরিটিতে ফোকাস করেছে, এবং প্রায় সব রিলিজে হয় বিদ্যমান ফিচারগুলোর এনহ্যান্সমেন্ট থাকে অথবা নতুন সিকিউরিটি ফিচার চালু করা হয়। SQL Server 2016-এ, Microsoft অনেক নতুন সিকিউরিটি ফিচার চালু করেছে যা ব্যবহারকারীদের তাদের ডেটা রক্ষা করতে সাহায্য করে, যার মধ্যে রয়েছে রো-লেভেল সিকিউরিটি, Always Encrypted, এবং ডাইনামিক ডেটা মাস্কিং।

ভূমিকা

আমার পূর্বের ব্লগে, আমি SQL Server 2016-এ ডাইনামিক ডেটা মাস্কিং নিয়ে লিখেছিলাম। এই ব্লগে, আমি রো-লেভেল সিকিউরিটি (RLS) ফিচারটি পরিচয় করাচ্ছি, যা আপনাকে কন্ট্রোল করতে দেয় কোনো ব্যবহারকারীদের একটি টেবিলের সারিগুলোতে অ্যাক্সেস থাকবে। RLS আপনাকে কুয়েরি এক্সিকিউট করছেন এমন ব্যবহারকারীর বৈশিষ্ট্যের ভিত্তিতে ডেটা রেস্ট্রিকশন ইমপ্লিমেন্ট করতে দেয়। RLS আপনাকে সহজে এবং সম্পূর্ণ ট্রান্সপারেন্সি সহ বিভিন্ন ব্যবহারকারীদের জন্য ডেটা অ্যাক্সেস কন্ট্রোল করতে সাহায্য করে।

RLS-এর প্রয়োজনীয়তা

কখনো কখনো আমাদের শুধু নির্বাচিত ব্যবহারকারীদের জন্য নির্বাচিত ডেটা রিটার্ন করার প্রয়োজন হয়। অতীতে, আমরা এটি ভিউ তৈরি করে এবং সেই ভিউগুলোর উপর ব্যবহারকারীদের সিলেক্ট পারমিশন দিয়ে করতাম। যাইহোক, ডেটার পরিমাণ এবং ব্যবহারকারীদের সংখ্যা বাড়ার সাথে সাথে সেই পদ্ধতিটি অনম্যানেজেবল হয়ে যেত। তাই Microsoft নতুন পরিস্থিতিতে সিকিউরিটি রিকোয়ারমেন্ট পূরণের জন্য RLS চালু করল।

RLS একটি টেবিলের সারিগুলোর অ্যাক্সেসের ওপর ফাইন-গ্রেইন্ড কন্ট্রোল সক্ষম করে, যা আপনাকে সহজে কন্ট্রোল করতে দেয় কোনো ব্যবহারকারী কোনো ডেটা অ্যাক্সেস করতে পারবে, অ্যাপ্লিকেশনের জন্য সম্পূর্ণ ট্রান্সপারেন্সি রক্ষা করে।

এই ফিচারের সাথে, সারিগুলো কুয়েরির এক্সিকিউশন কনটেক্সটের ভিত্তিতে ফিল্টার করা হয়, বর্তমান ব্যবহারকারীর অ্যাক্সেস রাইটের ভিত্তিতে নয়। আপনি সিকিউর লজিক রুল তৈরি করতে পারেন যেগুলো নির্ধারণ করবে কোনো ব্যবহারকারী কোন সারিগুলো দেখতে পাবে এবং যেকোনো সারি (বা ডেটা) রেস্ট্রিক্ট করতে পারবেন একটি ফ্লেক্সিবল এবং রবাস্ট সিকিউরিটি পলিসি ডিজাইন করে একটি টেবিলের জন্য, নিচের ছবিতে দেখানোatcher:

SQL Server 2016-এ রো-লেভেল সিকিউরিটি দিয়ে ডেটা প্রোটেকশন বাড়ান

ইমেজ সোর্স: https://sqlwithmanoj.com/2015/07/13/implementing-row-level-security-rls-with-sql-server-2016/

RLS-এর বৈশিষ্ট্যগুলো

RLS-এর নিচের বৈশিষ্ট্যগুলো রয়েছে:

  • ফাইন-গ্রেইন্ড অ্যাক্সেস রোল (নির্দিষ্ট সারিগুলোর রিড এবং রাইট অ্যাক্সেস দুটোই কন্ট্রোল করে)
  • অ্যাপ্লিকেশন ট্রান্সপারেন্সি (কোনো অ্যাপ্লিকেশন চেঞ্জ প্রয়োজন নেই)
  • ডাটাবেসের ভিতরে অ্যাক্সেস সেন্ট্রালাইজ করুন
  • ইমপ্লিমেন্ট এবং মেইনটেইন করা সহজ

RLS কীভাবে কাজ করে

RLS ইমপ্লিমেন্ট করতে, আপনাকে নিচের এলিমেন্টগুলো বিবেচনা করতে হবে:

  • প্রেডিকেট ফাংশন
  • সিকিউরিটি প্রেডিকেটস
  • সিকিউরিটি পলিসি

নিচের সেকশনগুলো এই আইটেমগুলো বর্ণনা করে।

প্রেডিকেট ফাংশন

একটি প্রেডিকেট ফাংশন হলো একটি ইন-লাইন টেবিল-ভ্যালুড ফাংশন যা চেক করে কুয়েরি এক্সিকিউট করছেন এমন ব্যবহারকারীর पास ডেটা অ্যাক্সেস আছে কিনা সেখানে ডিফাইন করা লজিকের ভিত্তিতে। এই ফাংশন প্রতিটি সারির জন্য 1 রিটার্ন করে যা ব্যবহারকারী অ্যাক্সেস করতে পারমিটেড।

সিকিউরিটি প্রেডিকেটস

সিকিউরিটি প্রেডিকেট প্রেডিকেট ফাংশনকে টেবিলের সাথে বাঁধতে সাহায্য করে। RLS দুটি টাইপের সিকিউরিটি প্রেডিকেট সাপোর্ট করে: ফিল্টার প্রেডিকেট এবং ব্লক প্রেডিকেট। ফিল্টার প্রেডিকেট ডেটা সাইলেন্টলি ফিল্টার করে কোনো এরর না দিয়ে নিচের অপারেশনগুলোর জন্য প্রেডিকেট ফাংশনে ডিফাইন করা লজিক অনুযায়ী।

  • SELECT
  • UPDATE
  • DELETE

ব্লক প্রেডিকেট স্পষ্টভাবে এরর উত্থাপন করে এবং ব্যবহারকারীকে নিচের অপারেশনগুলো ব্যবহার করতে বাধা দেয় সেই ডেটার ওপর যা প্রেডিকেট ফাংশন লজিক লঙ্ঘন করে:

  • AFTER INSERT
  • AFTER UPDATE
  • BEFORE UPDATE
  • BEFORE DELETE

সিকিউরিটি পলিসি

একটি সিকিউরিটি পলিসি অবজেক্ট RLS-এর জন্য তৈরি হয় প্রেডিকেট ফাংশনকে রেফারেন্স করে এমন সব সিকিউরিটি প্রেডিকেটগুলোক গ্রুপ করতে।

ব্যবহারের ক্ষেত্রসমূহ

RLS কীভাবে ব্যবহার করা যায় তার কিছু ডিজাইন উদাহরণ:

  • একটি হাসপাতাল একটি সিকিউরিটি পলিসি তৈরি করতে পারে যা নার্সদের শুধু তাদের রোগীদের ডেটা সারিগুলো দেখতে দেয়।
  • একটি ব্যাংক একটি পলিসি তৈরি করতে পারে ফিনানশিয়াল ডেটা সারিগুলোর অ্যাক্সেস রেস্ট্রিক্ট করতে একটি কর্মচারীর বিজনেস ডিভিশন বা কোম্পানিতে ভূমিকার ভিত্তিতে।
  • একটি মাল্টি-টেনান্ট অ্যাপ্লিকেশন একটি পলিসি তৈরি করতে পারে প্রতিটি টেনান্টের ডেটা সারিগুলোর লজিক্যাল сеপারেশন এনফোর্স করতে অন্য সব টেনান্টের সারিগুলোর থেকে। যেহেতু অনেক টেনান্টের ডেটা একটি টেবিলে সংরক্ষিত থাকে, প্রক্রিয়াটি আরও কার্যকর। প্রতিটি টেনান্ট শুধু তার নিজস্ব ডেটা সারিগুলো দেখতে পারে।

RLS ইমপ্লিমেন্ট করুন

নিচে RLS ইমপ্লিমেন্ট করার একটি উদাহরণ দেওয়া হলো:

স্টেপ ১: নিচের কোড চালান একটি ডাটাবেস RowFilter তৈরি করতে এবং টেস্ট করার জন্য দুটি ব্যবহারকারী:

CREATE DATABASE RowFilter; GO USE RowFilter; GO CREATE USER userBrian WITHOUT LOGIN; CREATE USER userJames WITHOUT LOGIN; GO 

স্টেপ ২: নিচের কোড চালান একটি টেবিল উদাহরণসহ তৈরি করতে এবং নতুন ব্যবহারকারীদের SELECT প্রিভিলেজ দিতে:

CREATE TABLE dbo.SalesFigures ( [userCode] NVARCHAR(10), [sales] MONEY) GO INSERT INTO dbo.SalesFigures VALUES ('userBrian',100), ('userJames',250), ('userBrian',350) GO GRANT SELECT ON dbo.SalesFigures TO userBrian GRANT SELECT ON dbo.SalesFigures TO userJames GO 

স্টেপ ৩: নিচের কোড চালান একটি ফিল্টার প্রেডিকেট ফাংশন যোগ করতে:

CREATE FUNCTION dbo.rowLevelPredicate (@userCode as sysname) RETURNS TABLE WITH SCHEMABINDING AS RETURN SELECT 1 AS rowLevelPredicateResult WHERE @userCode = USER_NAME(); GO 

স্টেপ ৪: নিচের কোড চালান dbo.Sales Figures টেবিলে একটি ফিল্টার প্রেডিকেট যোগ করতে:

CREATE SECURITY POLICY UserFilter ADD FILTER PREDICATE dbo.rowLevelPredicate(userCode) ON dbo.SalesFigures WITH (STATE = ON); GO 

স্টেপ ৫: স্টেপ ২-এ যোগ করা একটি ব্যবহারকারীর সাথে ফলাফল টেস্ট করতে নিচের কোড চালান:

EXECUTE AS USER = 'userBrian'; SELECT * FROM dbo.SalesFigures; REVERT; GO 

এই কোডটি দুটি সারি রিটার্ন করে, নিচে দেখানোatcher:

SQL Server 2016-এ রো-লেভেল সিকিউরিটি দিয়ে ডেটা প্রোটেকশন বাড়ান (https://bd.wsxdn.com/UploadFiles_8203/202207/2022070812111051.png)

EXECUTE AS USER = 'userJames'; SELECT * FROM dbo.SalesFigures; REVERT; GO 

এই কোডটি এক সারি রিটার্ন করে, নিচে দেখানোatcher:

SQL Server 2016-এ রো-লেভেল সিকিউরিটি দিয়ে ডেটা প্রোটেকশন বাড়ান (https://bd.wsxdn.com/UploadFiles_8203/202207/2022070812111024.png)

পারমিশনসমূহ

সিকিউরিটি পলিসি তৈরি, অ্যাল্টার, বা ড্রপ করার জন্য ALTER ANY SECURITY POLICY পারমিশন প্রয়োজন।

একটি সিকিউরিটি পলিসি তৈরি বা ড্রপ করার জন্য স্কিমার ওপর ALTER পারমিশন প্রয়োজন।

অতিরিক্তভাবে, প্রতিটি প্রেডিকেটের জন্য নিচের পারমিশনগুলো প্রয়োজন, যেগুলো যোগ করা হয়:

  • প্রেডিকেট হিসেবে ব্যবহৃত ফাংশন ওপর SELECT এবং REFERENCES পারমিশন।
  • পলিসির সাথে বাঁধা টার্গেট টেবিল ওপর REFERENCES পারমিশন।
  • টার্গেট টেবিলের যেকোনো কলাম থেকে যা আর্গুমেন্ট হিসেবে ব্যবহৃত হয়, সেগুলোর ওপর REFERENCES পারমিশন।

সিকিউরিটি পলিসি সব ব্যবহারকারীদের ওপর প্রযোজ্য, ডাটাবেস মালিক (DBO) ব্যবহারকারীদের সহ। DBO ব্যবহারকারীরা সিকিউরিটি পলিসি অ্যাল্টার বা ড্রপ করতে পারে। যাইহোক, সিকিউরিটি পলিসিতে তাদের পরিবর্তনগুলো অডিট করা যেতে পারে। sysadmin বা db_owner মতো হাই-প্রিভিলেজড ব্যবহারকারীদের ক্ষেত্রে, আপনাকে সমস্যা সমাধান বা ডেটা ভ্যালিডেট করতে সব সারি দেখতে হবে, তাই আপনাকে সিকিউরিটি পলিসি এমনভাবে লিখতে হবে যাতে সেটি সেটা অনুমতি দেয়।

যদি একটি সিকিউরিটি পলিসি SCHEMABINDING = OFF দিয়ে তৈরি করা হয়, তবে ব্যবহারকারীদের প্রেডিকেট ফাংশন ওপর SELECT বা EXECUTE পারমিশন থাকতে হবে এবং টার্গেট টেবিল কুয়েরি করার জন্য প্রেডিকেট ফাংশনের ভিতরে ব্যবহৃত যেকোনো অতিরিক্ত টেবিল, ভিউ, বা ফাংশন। যদি একটি সিকিউরিটি পলিসি SCHEMABINDING = ON দিয়ে তৈরি করা হয়, যা ডিফল্ট, তবে ব্যবহারকারীরা টার্গেট টেবিল কুয়েরি করার সময় এই পারমিশন চেকগুলো বাইপাস হয়।

SQL Server 2016 RLS মডিফাই করুন

SQL Server RLS একটি পলিসির জন্য ডিজেবল করতে নিচের অ্যাকশন নিন:

  • সিকিউরিটি পলিসি UseFilter অ্যাল্টার করুন State = off দিয়ে।

ফিল্টার এবং সিকিউরিটি পলিসি ড্রপ করতে নিচের অ্যাকশনগুলো নিন:

  • সিকিউরিটি পলিসি UseFilter ড্রপ করুন।
  • ফাংশন dbo.rowlevelPredicate ড্রপ করুন।

সেরা অনুশীলন

Microsoft এই সেরা অনুশীলনগুলো সুপারিশ করে:

  • আমরা অত্যন্ত সুপারিশ করি যে আপনি RLS অবজেক্টগুলোর (প্রেডিকেট ফাংশন এবং সিকিউরিটি পলিসি) জন্য একটি আলাদা স্কিমা তৈরি করুন।
  • ALTER ANY SECURITY POLICY পারমিশন উচ্চ-প্রিভিলেজড ব্যবহারকারীদের জন্য (যেমন একটি সিকিউরিটি পলিসি ম্যানেজার)। সিকিউরিটি পলিসি ম্যানেজার তাদের রক্ষা করা টেবিলগুলোর ওপর SELECT পারমিশন প্রয়োজন নেই।
  • প্রেডিকেট ফাংশনে টাইপ কনভার্সন এড়িয়ে চলুন পটেনশিয়াল রানটাইম এরর এড়াতে।
  • প্রেডিকেট ফাংশনে রিকার্সন এড়িয়ে চলুন যেন সম্ভব হোক পারফরম্যান্স ডিগ্রেডেশন এড়াতে। কুয়েরি অপ্টিমাইজার ডায়রেক্ট রিকার্সন ডিটেক্ট করার চেষ্টা করে। যাইহোক, ইন্ডায়রেক্ট রিকার্সন (যেমন যখন একটি দ্বিতীয় ফাংশন প্রেডিকেট ফাংশনকে কল করে) খুঁজে বের করার গ্যারান্টি নেই।
  • প্রেডিকেট ফাংশনে অতিরিক্ত টেবিল জয়েন এড়িয়ে চলুন পারফরম্যান্স সর্বাধিক করার জন্য।

RLS-এ লিমিটেশন এবং রেস্ট্রিকশন

RLS-এ প্রযোজ্য কিছু লিমিটেশন নিচে দেওয়া হলো:

  • প্রেডিকেট ফাংশন অবশ্যই SCHEMABINDING দিয়ে তৈরি করা উচিত। যদি একটি ফাংশন SCHEMABINDING ছাড়া তৈরি করা হয়, এবং আপনি এটি একটি সিকিউরিটি পলিসির সাথে বাঁধতে চান, তবে এটি একটি এরর থ্রো করে।
  • ইনডেক্সড ভিউ এমন একটি টেবিলের ওপর তৈরি করা যাবে না যার ওপর RLS ইমপ্লিমেন্টেড আছে।
  • ইন-মেমরি টেবিল RLS-এর জন্য সাপোর্টেড নয়।
  • ফুল-টেক্সট ইনডেক্স সাপোর্টেড নয়।

উপসংহার

SQL Server 2016-এ RLS ফিচারের সাথে, আপনি ডাটাবেস লেভেলে রেকর্ডের জন্য সিকিউরিটি প্রদান করতে পারেন অ্যাপ্লিকেশন লেভেলে কোনো পরিবর্তন না করে। আপনি প্রেডিকেট ফাংশন এবং নতুন সিকিউরিটি পলিসি ফিচার ব্যবহার করে আপনার বিদ্যমান কোডের পাশাপাশি RLS ইমপ্লিমেন্ট করতে পারেন, আপনার ডাটাবেসের ডেটা ম্যানিপুলেশন ল্যাঙ্গুয়েজ (DML) কোড পরিবর্তন করার প্রয়োজন ছাড়াই।

Feedback ট্যাব ব্যবহার করে মন্তব্য করুন বা প্রশ্ন জিজ্ঞেস করুন।

বিশেষজ্ঞ প্রশাসন, পরিচালনা, এবং কনফিগারেশন দিয়ে আপনার পরিবেশ অপ্টিমাইজ করুন

Rackspace-এর অ্যাপ্লিকেশন সার্ভিসেস (RAS) এক্সপার্টরা অ্যাপ্লিকেশনের একটি ব্যাপক পোর্টফোলিওতে নিচের প্রফেশনাল এবং ম্যানেজড সার্ভিসগুলো প্রদান করে:

  • ই-কমার্স এবং ডিজিটাল এক্সপেরিয়েন্স প্ল্যাটফর্ম
  • এন্টারপ্রাইজ রিসোর্স প্ল্যানিং (ERP)
  • বিজনেস ইন্টেলিজেন্স
  • Salesforce কাস্টমার রিলেশনশিপ ম্যানেজমেন্ট (CRM)
  • ডাটাবেস
  • ইমেল হোস্টিং এবং প্রোডাক্টিভিটি

আমরা প্রদান করি:

  • পক্ষপাতরহিত ειδষ্টতা: আমরা আপনার মডার্নাইজেশনের যাত্রা সহজ করি এবং গাইড করি, যেস 능력이 সরাসরি মান প্রদান করে সেগুলোর ওপর ফোকাস করি।
  • Fanatical Experience™: আমরা একটি প্রক্রিয়া-প্রথম, টেকনোলজি-দ্বিতীয়® পদ্ধতিকে ডেডিকেটেড টেকনিক্যাল সাপোর্টের সাথে কম্বাইন করি কমপ্রিহেনসিভ সমাধান প্রদানের জন্য।
  • অনন্য পোর্টফোলিও: আমরা ব্যাপক ক্লাউড অভিজ্ঞতা প্রয়োগ করি আপনাকে সঠিক টেকনোলজি সঠিক ক্লাউডে বেছে নেওয়া এবং ডিপ্লয় করার সাহায্য করার জন্য।
  • এজাইল ডেলিভারি: আমরা আপনার যাত্রায় আপনি যেখানে আছেন সেখানে আপনাকে মিট করি এবং আমাদের সাফল্যকে আপনার সাফল্যের সাথে আলাইন করি।

আরম্ভ করতে এখন চ্যাট করুন।

  1. SQL Server Query Store মাস্টার করুন: কোয়েরি পারফরম্যান্স ক্যাপচার, বিশ্লেষণ ও সমাধান

  2. স্ট্রেচ ডেটাবেস: দক্ষ ডেটা ম্যানেজমেন্টের একটি সহজ গাইড

  3. SQL Server 2019: আধুনিক অ্যানালিটিক্সের জন্য ইউনিফাইড ডেটা প্ল্যাটফর্ম

  4. সহজ মাইগ্রেশন: MS Access ডেটা SQL Server 2014-এ স্থানান্তর করুন