PL/SQL দিয়ে সিকিউরিটি এনফোর্সমেন্ট বিভিন্ন উপায়ে করা যায়, যার মধ্যে রয়েছে User Privileges, Definer and Invoker Rights, Data Encryption, Access Control, এবং Exception Handling। সঠিক সিকিউরিটি প্রয়োগ করতে PL/SQL কোডে বিভিন্ন সুরক্ষা ব্যবস্থা রাখা জরুরি, বিশেষ করে ডেটাবেস অ্যাপ্লিকেশনগুলিতে। নিচে এই সিকিউরিটি বিষয়গুলো বিস্তারিত আলোচনা করা হয়েছে।
১. Definer Rights এবং Invoker Rights
PL/SQL কোডে Definer Rights এবং Invoker Rights দুটি মৌলিক ধারণা রয়েছে যা সিকিউরিটি নিয়ন্ত্রণে ব্যবহৃত হয়। এগুলি মূলত প্রোগ্রাম ইউনিট (যেমন Procedure, Function, Trigger) এর অধিকার এবং সেগুলির কার্যকরিতা নির্ধারণ করে।
Definer Rights:
- Definer Rights হল সেই অধিকার যা একটি প্রোগ্রাম ইউনিটের মালিক (যিনি কোডটি লিখেছেন) দ্বারা নিয়ন্ত্রিত। যখন আপনি একটি procedure বা function ডিফাইন করেন এবং সেটি Definer Rights হিসেবে তৈরি হয়, তখন সেই প্রোগ্রামটি যে ব্যবহারকারী দ্বারা ডাকা হয় তার সিস্টেম/ডাটাবেস প্রিভিলেজগুলো irrelevant হয়ে যায়। বরং, কোডটির কার্যকরিতা নির্ধারণ হবে ওই প্রোগ্রামটির মালিকের অধিকার অনুসারে।
Invoker Rights:
- Invoker Rights হল সেই অধিকার যেখানে একটি প্রোগ্রাম ইউনিটের কার্যকরিতা নির্ধারণ হয় যে ব্যবহারকারী সেই প্রোগ্রামটি কার্যকর করছে তার অধিকার অনুযায়ী। অর্থাৎ, Invoker Rights প্রোগ্রামটি ব্যবহারকারী যে অধিকার ব্যবহার করে, তা তার নিজস্ব অধিকার অনুযায়ী চলে।
Definer vs. Invoker Example:
CREATE OR REPLACE PROCEDURE secure_proc
AS
BEGIN
-- This code runs with the rights of the definer (the user who owns the procedure)
SELECT * FROM sensitive_table;
END secure_proc;
/
-- Using Invoker Rights
CREATE OR REPLACE PROCEDURE secure_proc_invoker
AUTHID CURRENT_USER -- This makes the procedure use the rights of the invoker
AS
BEGIN
-- This code runs with the rights of the user calling the procedure
SELECT * FROM sensitive_table;
END secure_proc_invoker;
/
- Definer Rights:
secure_procprocedure টি ডিফাইন করা হয়েছে, এবং এটি কাজ করবে মালিকের অধিকার দিয়ে। - Invoker Rights:
secure_proc_invokerprocedure তেAUTHID CURRENT_USERব্যবহৃত হয়েছে, যার মাধ্যমে কোডটি যে ব্যবহারকারী দ্বারা চালানো হচ্ছে তার অধিকার অনুসারে কাজ করবে।
২. User Privileges এবং Authorization
সিকিউরিটি এনফোর্সমেন্টে User Privileges গুরুত্বপূর্ণ ভূমিকা পালন করে। PL/SQL কোডে User Privileges নিয়ন্ত্রণ করার মাধ্যমে আপনি সিস্টেমের নিরাপত্তা নিশ্চিত করতে পারেন।
Types of Privileges:
- System Privileges: এটি ব্যবহারকারীদের অ্যাক্সেস এবং ক্ষমতা নিয়ন্ত্রণ করে যেমন
CREATE,DROP,ALTER,SELECT,INSERT, ইত্যাদি। - Object Privileges: একটি নির্দিষ্ট অবজেক্ট (যেমন টেবিল, ভিউ, সিকোয়েন্স) এর উপর বিশেষ অধিকার। যেমন
SELECT,INSERT,UPDATE,DELETEইত্যাদি। - Roles: বিভিন্ন প্রিভিলেজের গ্রুপ। উদাহরণস্বরূপ,
DBAরোলটি ব্যবহারকারীদের সব ধরনের অধিকার দেয়, কিন্তু অন্য রোল শুধুমাত্র নির্দিষ্ট অধিকার দেয়।
Granting and Revoking Privileges:
-- Granting privileges to a user
GRANT SELECT, INSERT ON employees TO user1;
-- Revoking privileges from a user
REVOKE SELECT, INSERT ON employees FROM user1;
৩. Data Encryption
ডেটার সুরক্ষা নিশ্চিত করতে Data Encryption একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। PL/SQL-এ ডেটা এনক্রিপশনের জন্য বিভিন্ন পদ্ধতি ব্যবহার করা যায়, যেমন Oracle Advanced Security ফিচারের সাহায্যে ডেটা এনক্রিপশন।
- Transparent Data Encryption (TDE): TDE ব্যবহার করলে আপনি ডেটাবেসের পুরো ফাইল এনক্রিপ্ট করতে পারেন, যাতে ডেটা অ্যাক্সেস করতে হলে এনক্রিপশন কী প্রয়োজন হয়।
- Application-Level Encryption: এটির মাধ্যমে নির্দিষ্ট ফিল্ডের ডেটা এনক্রিপ্ট করা হয় যা অ্যাপ্লিকেশন লেভেলে অ্যাক্সেস করা হয়।
Example (Simple Encryption):
-- Encrypting data before inserting
INSERT INTO employees (employee_name, employee_ssn)
VALUES (ENCODE('John Doe', 'AES'), ENCODE('123-45-6789', 'AES'));
-- Decrypting data before displaying
SELECT DECODE(employee_name, 'AES') FROM employees;
৪. Access Control
PL/SQL-এ Access Control হল একটি গুরুত্বপূর্ণ সিকিউরিটি ফিচার যা ডেটাবেস অ্যাক্সেস নিয়ন্ত্রণ করে। Roles এবং Privileges এর মাধ্যমে ব্যবহারকারীদের নির্দিষ্ট ডেটাবেস অপারেশন করতে দেওয়া হয়।
Example:
-- Create Role
CREATE ROLE manager_role;
-- Grant Privileges to Role
GRANT SELECT, INSERT, UPDATE ON employees TO manager_role;
-- Assign Role to User
GRANT manager_role TO john;
এভাবে, আপনি নির্দিষ্ট Role এবং Privileges অ্যাসাইন করে অ্যাক্সেস কন্ট্রোল করতে পারেন।
৫. Exception Handling and Error Management
PL/SQL কোডে Exception Handling খুবই গুরুত্বপূর্ণ। ভুল কোড, ডেটা ইনপুট বা অন্যান্য ভুল পরিস্থিতি গুলি ডেটাবেস অ্যাপ্লিকেশন এর সিকিউরিটি নিয়ে ঝুঁকি তৈরি করতে পারে। RAISE_APPLICATION_ERROR বা অন্যান্য exception handling ফিচার ব্যবহার করে আপনি সঠিকভাবে ত্রুটি পরিচালনা করতে পারেন।
Example:
BEGIN
-- Code that may raise an error
UPDATE employees SET salary = -1000 WHERE employee_id = 1001;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, 'Salary cannot be negative');
END;
এখানে, যদি কোনো ভুল (যেমন, নেতিবাচক স্যালারি) ঘটলে তা RAISE_APPLICATION_ERROR ব্যবহার করে কাস্টম ত্রুটি বার্তা প্রদর্শিত হবে।
৬. Auditing and Logging
PL/SQL কোডে Auditing এবং Logging ফিচার ব্যবহার করে আপনি সমস্ত ডেটাবেস অ্যাক্সেস এবং পরিবর্তন লগ করতে পারেন, যা সিকিউরিটির একটি গুরুত্বপূর্ণ অংশ।
- DBMS_FGA (Fine Grained Auditing): নির্দিষ্ট টেবিল বা কলামে অ্যাক্সেস ট্র্যাক করার জন্য ব্যবহৃত হয়।
- DBMS_AUDIT: অডিটিং এর মাধ্যমে ডেটাবেস অ্যাক্সেস এবং ডেটা পরিবর্তন লগ করা হয়।
Example:
-- Enabling Fine Grained Auditing
BEGIN
DBMS_FGA.add_policy(
object_schema => 'HR',
object_name => 'employees',
policy_name => 'audit_salary_changes',
audit_condition => 'salary < 50000',
audit_column => 'salary');
END;
/
এই কোডের মাধ্যমে আপনি Fine Grained Auditing চালু করতে পারেন, যা নির্দিষ্ট শর্তে (যেমন, স্যালারি ৫০,০০০ এর নিচে) ডেটাবেসে পরিবর্তন হওয়া রেকর্ডগুলো ট্র্যাক করবে।
সারাংশ:
PL/SQL দিয়ে সিকিউরিটি এনফোর্সমেন্টের জন্য আপনি বিভিন্ন সিকিউরিটি পদ্ধতি ব্যবহার করতে পারেন, যেমন:
- Definer Rights এবং Invoker Rights এর মধ্যে পার্থক্য বুঝে নিরাপত্তা নিশ্চিত করা।
- User Privileges এবং Roles এর মাধ্যমে অ্যাক্সেস কন্ট্রোল করা।
- Data Encryption ব্যবহার করে ডেটা সুরক্ষা নিশ্চিত করা।
- Access Control এবং Auditing এর মাধ্যমে সিস্টেমের উপর কড়া নজর রাখা।
- Exception Handling এর মাধ্যমে ভুল বা অপ্রত্যাশিত ডেটা সুরক্ষিতভাবে পরিচালনা করা।
এই সিকিউরিটি ব্যবস্থা ব্যবহার করে PL/SQL কোডে সুরক্ষা এনফোর্স করা সম্ভব।