সেক্ষেত্রে সমস্যাটি হুবহু অনুমতি আদেশের বিষয়ে নয়, তবে কার্যকর করার আদেশের।
পুনরায় সারিতে, পোস্টগ্রিসএসকিউএল এর জন্য:
1- সারণীগুলিতে প্রবেশ করা ভিউগুলি সারণীর অনুমতিটিকে ওভাররাইড করবে
2- ভিউ অ্যাক্সেসিং ফাংশনগুলি, যাচাই করার আগে, সমস্ত ক্রিয়াকলাপের মূল্যায়ন করা দরকার - সুতরাং ভিউটিতে অ্যাক্সেস করার আগে অবশ্যই ফাংশনগুলি সম্পাদন করতে হবে, এমনকি ভিউতে নির্বাচনের অনুমতি না থাকলেও ...
কীভাবে আমরা তা প্রমাণ করতে পারি?
পোস্টগ্র্যাস্কল-এ, ব্যবহারকারীর এই অনুমতি না থাকলেও ভিউগুলি আপনাকে একটি টেবিলের মধ্যে নির্বাচন করার জন্য অনুমতি দিতে সক্ষম হয়।
উদাহরণ স্বরূপ:
create view view2 as select * from table1;
revoke all on table1 from user1;
grant select on view2 to user1;
ব্যবহারকারী 1 হিসাবে লগ ইন করুন:
select * from table1 (permission denied)
select * from view2 (sucess - the query executes)
ক্ষেত্রে, ব্যবহারকারী সারণী নির্বাচন করার অনুমতি না পেয়েও ভিউ 2 নির্বাচন করতে সক্ষম হবে having
কিন্তু যদি আমরা একই কাজটি একটি ফাংশন দিয়ে করি ? আচরণ একরকম নয় । 1 আসার আগে 5 সেকেন্ড অপেক্ষা করার জন্য একটি ফাংশন তৈরি করা যাক (যাতে আমরা যখন ভিউ কল করি তখন পোস্টগ্র্যাসকিএল যদি ফাংশনটি চালাচ্ছে তবে আমরা ডিবাগ করতে পারি)
CREATE OR REPLACE FUNCTION something() RETURNS integer
AS 'select 1 from pg_sleep(5);'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT; --this function will delay 5 seconds
create view view1 as select * from something();
revoke all on function something() from user1;
grant select on view1 to user1;
ব্যবহারকারী 1 হিসাবে লগ ইন করুন:
select * from something(); (permission denied for something)
select * from view1 (permission denied for something )
ভিউতে নির্বাচন করার অনুমতিটি ফাংশনটির অনুমতিটিকে ওভাররাইড করে না এবং সবচেয়ে খারাপ এমনকি যদি আমরা ভিউ 1 থেকে অনুমতিগুলি প্রত্যাহার করি তবে বার্তাটি এখনও দেখায় যে পোস্টগ্রেস্কল ফাংশনটির কারণে আমাদের জিজ্ঞাসাটি বন্ধ করে দিয়েছে, ভিউয়ের অনুমতি যাই হোক না কেন .. (প্রশ্নে ঠিক কী হচ্ছে)
তবে ফাংশনটি কি সত্যই প্রথম পরীক্ষা করা হচ্ছে? আমরা যদি ফাংশনে 'সমস্ত' অনুমতিগুলি দিয়ে থাকি তবে দেখার অনুমতিটি বাতিল করে ...
grant all on function something to user1;
revoke all on view1 from user1;
select * from view1;
Delayed 5 seconds... (the function executed!)
Permission denied for select on view1
আপনি যেমন পোস্টগ্রেস্কেল দেখতে পাচ্ছেন 5 সেকেন্ড আগে এই বলেছিলেন যে " ভিউ (কিছু)" ফাংশন কার্যকর হয়েছে তা দেখিয়ে আমাদের ভিউ আউটপুট করার অনুমতি নেই । সুতরাং ভিউ চেক করার আগে ফাংশন ডেটা রিটার্ন উপস্থিত থাকতে হবে।
সুতরাং এখন এই পরীক্ষাগুলির সাথে, আমরা এখন জানি যে পোস্টগ্রিএসকিউএলকে আমাদের ক্যোয়ারী চালিয়ে যাওয়ার আগে প্রথমে সমস্ত ফাংশনগুলি মূল্যায়ন করার প্রয়োজন ছিল, ঠিক যেমনটি এনভলিউড হওয়া সমস্ত ফাংশনগুলি সম্পূর্ণ না হওয়া অবধি কোয়েরিটির অস্তিত্ব নেই, সুতরাং পোষ্টগ্রিসক্লিতে ভিউটি সমাধান করা যায় না আমাদের এটি নির্বাচন করার অনুমতি আছে কিনা তা জানুন।
আমি মনে করি এটি "অনুমতি আদেশ" এর শর্তে আপনার প্রশ্নের উত্তর দেয়, তবে কেন পোস্টগ্র্যাস্কলকে চালিয়ে যাওয়ার আগে সমস্ত কার্যকারিতা মূল্যায়ন করা দরকার, তা আর একটি প্রশ্ন ...