Data Control Language (DCL) হলো স্ট্রাকচারড কুয়েরি ল্যাঙ্গুয়েজ (SQL) এর একটি সাবসেট। ডেটাবেস অ্যাডমিনিস্ট্রেটররা DCL ব্যবহার করে রিলেশনাল ডেটাবেসে সিকিউরিটি অ্যাক্সেস কনফিগার করে। এটি Data Definition Language (DDL)-কে কমপ্লিমেন্ট করে, যা ডেটাবেস অবজেক্ট যোগ ও ডিলিট করে, এবং Data Manipulation Language (DML)-কে, যা ডেটাবেসের কন্টেন্ট রিট্রিভ, ইনসার্ট এবং মডিফাই করে।
DCL হলো SQL সাবসেটগুলোর মধ্যে সবচেয়ে সহজ, কারণ এতে শুধু তিনটি কমান্ড রয়েছে: GRANT, REVOKE, এবং DENY। মিলে যhetenে, এই তিনটি কমান্ড অ্যাডমিনিস্ট্রেটরদের দানাদার নমনীলতা দেয় ডেটাবেস পারমিশন সেট এবং রিমুভ করতে গ্রানুলার ফ্যাশনে।
GRANT কমান্ড দিয়ে পারমিশন যোগ করা
GRANT কমান্ড একটি ডেটাবেস ইউজারের নতুন পারমিশন যোগ করে। এর সিন্ট্যাক্স খুব সহজ, নিচে সংজ্ঞা দেওয়া হলো:
GRANT [privilege] ON [object] TO [user] [WITH GRANT OPTION]
এখানে এই কমান্ডের সাথে আপনি যেসব প্যারামিটার দিতে পারেন তার রানডাউন:
- Privilege — হতে পারে ALL কিওয়ার্ড (বিবিধ পারমিশন দেওয়ার জন্য) বা একটি নির্দিষ্ট ডেটাবেস পারমিশন বা পারমিশন সেট। উদাহরণ: CREATE DATABASE, SELECT, INSERT, UPDATE, DELETE, EXECUTE এবং CREATE VIEW।
- Object — যেকোনো ডেটাবেস অবজেক্ট হতে পারে। বৈধ প্রিভিলেজ অপশন ডেটাবেস অবজেক্টের টাইপ অনুযায়ী ভিন্ন হয়। সাধারণত অবজেক্ট হবে ডেটাবেস, ফাংশন, স্টোরড প্রসিডিউর, টেবিল বা ভিউ।
- User — যেকোনো ডেটাবেস ইউজার হতে পারে। আপনি এই ক্লজে ইউজারের বদলে রোলও বসাতে পারেন যদি রোল-ভিত্তিক ডেটাবেস সিকিউরিটি ব্যবহার করতে চান।
- ঐচ্ছিক WITH GRANT OPTION ক্লজ GRANT কমান্ডের শেষে যুক্ত করলে, আপনি শুধু নির্দিষ্ট ইউজারকে SQL স্টেটমেন্টে ডিফাইন করা পারমিশনই দেবেন না, বরং তাকে অনুমতিও দিবেন সে পারমিশন অন্য ডেটাবেস ইউজারদের আরও দেওয়ার জন্য। এই কারণেই এই ক্লজ সাবধানতার সাথে ব্যবহার করুন।
উদাহরণস্বরূপ, ধরুন আপনি ইউজার Joe-কে HR নামক ডেটাবেসের employee টেবিল থেকে তথ্য রিট্রিভ করার ক্ষমতা দিতে চান। নিচের SQL কমান্ডটি ব্যবহার করুন:
GRANT SELECT ON HR.employees TO Joe
Joe employees টেবিল থেকে তথ্য রিট্রিভ করতে পারবে। কিন্তু সে অন্য ইউজারদের সে টেবিল থেকে তথ্য রিট্রিভ করার পারমিশন দিতে পারবে না, কারণ DCL স্ক্রিপ্টে WITH GRANT OPTION ক্লজটি ছিল না।
ডেটাবেস অ্যাক্সেস প্রত্যাহার করা (REVOKE)
REVOKE কমান্ড একটি ইউজারের ডেটাবেস অ্যাক্সেস রিমুভ করে যা তাকে পূর্বে দেওয়া হয়েছিল। এই কমান্ডের সিন্ট্যাক্স নিচে দেওয়া হলো:
REVOKE [GRANT OPTION FOR] [permission] ON [object] FROM [user] [CASCADE]
REVOKE কমান্ডের প্যারামিটারগুলো:
- Permission — চিহ্নিত ইউজার থেকে কোন ডেটাবেস পারমিশন রিমুভ করতে হবে সেটি নির্দেশ করে। কমান্ডটি পূর্বে দেওয়া GRANT এবং DENY assertion দুটোই রিভোক করে চিহ্নিত পারমিশনের জন্য।
- Object — যেকোনো ডেটাবেস অবজেক্ট হতে পারে। বৈধ প্রিভিলেজ অপশন অবজেক্টের টাইপ অনুযায়ী ভিন্ন হয়। সাধারণত অবজেক্ট হবে ডেটাবেস, ফাংশন, স্টোরড প্রসিডিউর, টেবিল, বা ভিউ।
- User — যেকোনো ডেটাবেস ইউজার হতে পারে। রোল-ভিত্তিক সিকিউরিটির জন্য ইউজারের বদলে রোলও বসানো যায়।
- GRANT OPTION FOR ক্লজ নির্দিষ্ট ইউজারের নির্দিষ্ট পারমিশন অন্যদের দেয়ার ক্ষমতা রিমুভ করে। আপনি যদি REVOKE স্টেটমেন্টে GRANT OPTION FOR ক্লজ অন্তর্ভুক্ত করেন, তবে প্রাইমারি পারমিশন রিভোক হয় না। এই ক্লজ শুধু গ্র্যান্টিং অ্যাবিলিটি রিভোক করে।
- CASCADE অপশনও নির্দিষ্ট ইউজার যে কারো পারমিশন দিয়েছিল সেগুলো থেকে ও নির্দিষ্ট পারমিশন রিভোক করে।
নিচের কমান্ডটি Joe-কে পূর্বের উদাহরণে দেওয়া পারমিশন রিভোক করবে:
REVOKE SELECT ON HR.employees FROM Joe
ডেটাবেস অ্যাক্সেস স্পষ্টভাবে অস্বীকার করা (DENY)
DENY কমান্ড স্পষ্টভাবে একটি ইউজারকে একটি নির্দিষ্ট পারমিশন পাওয়া থেকে বাধা দেয়। এই ফিচারটি হেল্পফুল যখন একটি ইউজার একটি রোল বা গ্রুপের সদস্য যাকে একটি পারমিশন দেওয়া আছে, এবং আপনি সেই নির্দিষ্ট ইউজারকে সেই পারমিশন ইনহেরিট করতে থেকে বাধা দিতে চান এক্সসেপশন তৈরি করে। এই কমান্ডের সিন্ট্যাক্স নিচে:
DENY [permission] ON [object] TO [user]
DENY কমান্ডের প্যারামিটারগুলো GRANT কমান্ডের সাথে একই। উদাহরণস্বরূপ, আপনি যদি নিশ্চিত করতে চান যে Matthew কখনো employees টেবিল থেকে তথ্য ডিলিট করার ক্ষমতা পাবে না, তবে নিচের কমান্ডটি ইস্যু করুন:
DENY DELETE ON HR.employees TO Matthew