কোনও টেবিল-মূল্যবান ফাংশনে অনুমতি কীভাবে দেওয়া যায়


21

আমি কি এটা ঠিক করছি ...?

আমার একটি ফাংশন আছে যা অর্থ ফেরত দেয় ...

CREATE FUNCTION functionName( @a_principal money, @a_from_date
  datetime, @a_to_date datetime, @a_rate float )  RETURNS money AS BEGIN

  DECLARE @v_dint money   set @v_dint = computation_here
     set @v_dint = round(@v_dint, 2)

  RETURN @v_dint    
END 
GO 
Grant execute on functionName to another_user 
Go

আমি কেবল ভাবছি কি এটি আইটিভিএফ এ রূপান্তর করা সম্ভব?

আমি এটি করার চেষ্টা করেছি কিন্তু আমি একটি ত্রুটি পেয়েছি:

CREATE FUNCTION functionName ( @a_principal money, @a_from_date
  datetime, @a_to_date datetime, @a_rate float )  
RETURNS TABLE AS 
RETURN SELECT returnMoney = computation_here  
GO  
Grant execute on functionName to another_user  Go

ত্রুটি:

এমএসজি 4606, স্তর 16, রাজ্য 1, লাইন 2 মঞ্জুরিপ্রাপ্ত বা প্রত্যাহার করা অধিকার এক্সিকিউটি অবজেক্টের সাথে সামঞ্জস্যপূর্ণ নয়।

এই ফাংশনটি এইভাবে ব্যবহৃত হয়:

update table_name set interest = functionName(col1,col2...) where...

আগাম ধন্যবাদ!


আপনি এখন কোনও টেবিল ফিরিয়ে দিচ্ছেন, অনুদানের পরিবর্তে গ্রান্ট স্টেটমেন্টটি গ্রান্ট নির্বাচন করা দরকার।
মাইক

উত্তর:


33

স্কেলার ফাংশনগুলির জন্য EXECUTEঅনুমতি প্রয়োজন , তবে আপনি যখন কোনও সারণী মূল্যবান ফাংশনে রূপান্তর করেন তখন অনুমতিগুলি প্রয়োজনীয় পরিবর্তন করতে হবে SELECT

আপনার এখনই করা উচিত GRANT SELECT ON functionName TO another_user;

বিওএল থেকে :

মালিক ব্যতীত অন্য ব্যবহারকারীদের কোনও লেনদেন-এসকিউএল বিবৃতিতে এটি ব্যবহার করার আগে তাদের কোনও ফাংশনে (যদি ফাংশনটি স্কেলার-মূল্যবান হয়) অবশ্যই তার এক্সিকিউটি অনুমতি দিতে হবে। যদি ফাংশনটি সারণী-মূল্যবান হয় তবে ব্যবহারকারীর রেফারেন্স দেওয়ার আগে তাকে অবশ্যই ফাংশনে SELECT অনুমতি থাকতে হবে।


আরডিএফোজের অন্য উত্তরে মন্তব্য অনুসারে, যদি ব্যবহারকারীর নামটিতে বিশেষ অক্ষর থাকে (যেমন একটি ব্যাকস্ল্যাশ যেমন DOMAINNAME \ ব্যবহারকারীর নাম হিসাবে) থাকে তবে আপনাকে ব্যবহারকারীর নামটি বর্গাকার বন্ধনীতে স্থাপন করতে হবে, যেমন:grant select on functionName to [DOMAINNAME\username];
youcantryreachingme

0

এটি থাকা দরকার GRANT SELECT ON functionName TO [another_user]- বন্ধনী সহ।


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

-4

আমি ব্যবহার করার চেষ্টা করেছি:

GRANT SELECT ON functionName TO another_user

তবে এটি কাজ করে না, তারপরে, আমি EXECUTEপরিবর্তে ব্যবহার করেছিলাম SELECTএবং এটি এখন কাজ করে


আপনি কীভাবে এটি পরিচালনা করেছিলেন সে সম্পর্কে আমি আগ্রহী, কারণ grant executeকোনও এসকিউএল ফাংশনে চেষ্টা করার চেষ্টা সর্বদা ত্রুটি ঘটায়।
ইয়ান কেম্প

3
এটি সম্ভবত কোনও টেবিল-মূল্যবান ফাংশন ছিল না, এ কারণেই এটি কাজ করেছিল।
দিয়েগো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.