'এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স', ডাটাবেস 'জেডজেজ্জেজ্জ', স্কিমা 'ডিবিও' তে এক্সিকিউটি অনুমতি অস্বীকার করা হয়েছিল


187

একটি ফাংশন সম্পাদন করতে আমার সমস্যা হচ্ছে।

আমি যা করেছি তা এখানে:

  1. এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার করে একটি ফাংশন তৈরি করুন। এটি সফলভাবে তৈরি করা হয়েছিল।
  2. আমি তখন সদ্য নির্মিত ফাংশনটি কার্যকর করার চেষ্টা করেছি এবং আমি যা পাই তা এখানে:

'এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স', ডাটাবেস 'জেডজেজ্জেজ্জ', স্কিমা 'ডিবো' তে এক্সিকিউটি অনুমতি অস্বীকার করা হয়েছিল।


যদি Db_owner ভূমিকা থাকে, ব্যবহারকারী এছাড়াও কার্যকর করতে পারেন (এক্সিকিউটিউট প্রদানের সমান নয় ...)
হ্যাজাক

আমার এসকিউএল বিবৃতিতে একটি সিনট্যাক্স ত্রুটি হওয়ার সময় আমি এই ত্রুটিটি পেয়েছি। মূলত আমি মিশে গিয়ে তৈরি করেছে GOএবং Createমধ্যে GOCreate। অন্যান্য বাক্য গঠন ত্রুটিগুলিও এই ত্রুটিটি বলে মনে হচ্ছে।
গণেশ কামথ - 'কোড উন্মত্ত'

উত্তর:


162

আপনার মনে হচ্ছে যে প্রশ্নাবলীর সঞ্চিত প্রক্রিয়াটির জন্য ব্যবহারকারীকে (বা একটি গোষ্ঠী যা তারা একটি অংশ) নির্বাহের অনুমতি প্রদান করতে হবে।

উদাহরণস্বরূপ, আপনি এইভাবে অ্যাক্সেস মঞ্জুর করতে পারেন :

USE zzzzzzz;
GRANT EXEC ON dbo.xxxxxxx TO PUBLIC

2
হাই, আমি জানি এটি বেশ কিছুক্ষণ আগে হয়েছিল, তবে আমার একটি প্রশ্ন আছে। এই জাতীয় পদক্ষেপের কিছু সুরক্ষা সমস্যা আছে? এটি কি সবার জন্য ব্যবহার করার জন্য এসপ খুলবে?
ভ্যালেন্টাইন ভিনোগ্রাডস্কি

9
হ্যাঁ, এটি ডিবি সংযোগ সহ যে কাউকে সঞ্চিত প্রক্রিয়া চালানোর অনুমতি দেয়। আমি সুরক্ষা সম্পর্কে উদ্বিগ্ন লোকেরা তাদের ডেটাবেজে প্রাসঙ্গিক গোষ্ঠীতে অ্যাক্সেস দেওয়ার জন্য আশা করব ।
রোল্যান্ড শ

7
আপনি GRANT EXEC TO PUBLICডাটাবেসের সমস্ত বস্তুর অ্যাক্সেস মঞ্জুর করতেও ব্যবহার করতে পারেন
sohaiby

2
আমি জনসাধারণের ভূমিকাকে কখনই সম্পাদনের অনুমতি দেব না। আমাদের পরিবেশে যে কোনও উপায়ে জনগণের ভূমিকা অক্ষম করা বাধ্যতামূলক করা হয়েছিল। আমি সবসময় কোনও নির্দিষ্ট ব্যবহারকারীর জন্য নির্বাহের অনুমতি বা এই উদ্দেশ্যে সুস্পষ্টভাবে তৈরি করা একটি ভূমিকার অনুমতি প্রদান করি।
ব্যবহারকারী 1161391

4
সবাই কেন ডেটাবেসে কোনও কিছু কার্যকর করার জন্য পাবলিকের অধিকার দেওয়ার পরামর্শ দিচ্ছেন? এটি ডিফাক্টো নয় একটি বিশেষ মামলা।
শনি থিরু

111

আমি যে সেরা সমাধান পেয়েছি তা হ'ল একটি নতুন ডাটাবেস ভূমিকা তৈরি করা

CREATE ROLE db_executor;

এবং তারপরে সেই ভূমিকা কার্যকর করার অনুমতি প্রদান করুন।

GRANT EXECUTE TO db_executor;

এখন যখন আপনি ব্যবহারকারীর বৈশিষ্ট্যগুলিতে যান এবং ব্যবহারকারী ম্যাপিংয়ে যান এবং যেখানে আপনি নতুন ভূমিকা যুক্ত করেছেন সেই ডাটাবেস নির্বাচন করুন, এখন নতুন ভূমিকাটি ডাটাবেস ভূমিকা সদস্যতার জন্য প্রদর্শিত হবে: বিভাগ

আরও তথ্যের জন্য সম্পূর্ণ নিবন্ধ পড়ুন


8
এই উত্তরটি সর্বোত্তম যদি আপনার জনসাধারণ বা db_owner ব্যবহার না করে কোনও নির্দিষ্ট ব্যবহারকারী লগইনে সমস্ত এসপিদের জন্য এক্সিকিউটি প্রদান করতে হয়। এখানে সবচেয়ে বিচক্ষণ এবং দরকারী উত্তরের মতো বলে মনে হচ্ছে।
jcollum

1
কোনও কারণে এটি এসকিউএল সার্ভার ২০১২ এ আমার পক্ষে একমাত্র উত্তর। এটি কেবল তখনই কাজ করে যদি কোনও ভূমিকার মাধ্যমে অনুমতি উত্তরাধিকার সূত্রে প্রাপ্ত হয়।
কিথ

1
এই উত্তর হওয়া উচিত। এটি আমার জন্য কবজির মতো কাজ করেছিল। অনেক ধন্যবাদ!
শাহবাজ

তারপরে এটিকে অ্যাকাউন্টে যুক্ত করুনEXEC sp_addrolemember @rolename = N'db_executor', @membername = N'processAPI'
Ωমেগামান

72

স্কেল সার্ভার ম্যানেজমেন্ট স্টুডিওতে:

শুধু যাও security->schema->dbo

ডাবো ক্লিক করুন ডিবিও, তারপরে ক্লিক করুন permission tab->(blue font)view database permissionএবং প্রয়োজনীয় ক্ষেত্রগুলির জন্য স্ক্রোল করতে দ্বিধা বোধ করুন যেমন "execute".ব্যবহার grantবা denyনিয়ন্ত্রণগুলি চয়ন করতে নিজেকে সহায়তা করুন । আশা করি এটি সাহায্য করবে :)


52

আপনার এই জাতীয় কিছু চালানো দরকার

GRANT Execute ON [dbo].fnc_whatEver TO [domain\user]

4
এটি আমার প্রয়োজন ছিল, তবে আমাকে এর [domain\user]চেয়ে বেশি করতে হয়েছিল'domain\user'
পল স্টিফেনসন

45

আপনি যদি ব্যবহারকারী বা ভূমিকাকে অনুমতি দেওয়ার চেষ্টা করছেন তবে এটি কাজ করবে।

মাইক্রোসফ্ট এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ব্যবহার:

  1. যান: ডাটাবেসগুলি
  2. Dbo.my_database এ ডান ক্লিক করুন
  3. নির্বাচন করুন: সম্পত্তি
  4. বাম দিকের প্যানেলে, ক্লিক করুন: অনুমতিগুলি
  5. ব্যবহারকারী বা ভূমিকা এবং নাম প্যানেলে নির্বাচন করুন
  6. এই সম্পাদন অনুমতি ও চেকমার্ক মধ্যে: গ্রান্ট, গ্রান্ট আছে বা অস্বীকার করুন

দুর্ভাগ্যক্রমে, ব্যবহারকারী ইতিমধ্যে অনুমতিগুলি কার্যকর করেছে! যে কারণে এটি এত বিভ্রান্তিকর ....
ডগলাস গ্যাসকেল

ধন্যবাদ কেম এটি নিখুঁতভাবে কাজ করছে যখন আমি গ্রান্ট চেকমার্ক করি
রোশ

16

এই জাতীয় অনুমতি দেওয়া বিপজ্জনক হতে পারে, বিশেষত যদি আপনার ওয়েব অ্যাপ্লিকেশন একই ব্যবহারকারীর নামটি ব্যবহার করে।

এখন ওয়েব ব্যবহারকারীর (এবং পুরো ওয়ার্ল্ড ওয়াইড ওয়েব) আপনার ডেটাবেসের মধ্যে অবজেক্ট তৈরি এবং ফেলে দেওয়ার অনুমতিও রয়েছে। এসকিউএল ইঞ্জেকশন ভাবেন!

আমি নীচে প্রদত্ত বস্তুর নির্দিষ্ট ব্যবহারকারীর জন্য শুধুমাত্র এক্সিকিউট সুবিধাগুলি দেওয়ার পরামর্শ দিচ্ছি:

grant execute on storedProcedureNameNoquotes to myusernameNoquotes

এখন ব্যবহারকারী myusernameNoquotes আপনার মূল্যবান ডেটাতে অপ্রয়োজনীয় অনুমতি ছাড়াই সঞ্চিত প্রসেসরনামনামকোয়েটস পদ্ধতিটি কার্যকর করতে পারে।



3

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

USE [StableEmployee]
GO
GRANT EXEC ON dbo.GetAllEmployees TO PUBLIC

/ ****** অবজেক্ট: স্টোরেডপ্রসেসার [ডিবিও] [

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[GetAllEmployees]
as
Begin
Select EmployeeId, Name, Gender, City, DepartmentId
From tblEmployee

End

2

আপনি প্রত্যেককে মৃত্যুদন্ড কার্যকর করার অনুমতি দিতে পারেন:

GRANT Execute on [dbo].your_object to [public]

"পাবলিক" হ'ল ডিফল্ট ডাটাবেসের ভূমিকা যা সমস্ত ব্যবহারকারী সদস্য হন।


1

আমি একই সমস্যার মুখোমুখি হয়েছি এবং ডেটাবেস ব্যবহারকারীকেও db_owner অনুমতি দেওয়ার হিসাবে সমাধান করেছি।


11
আমি মনে করি না এটি একটি ভাল সমাধান ... কারণ আমি আমার ওয়েব অ্যাপ্লিকেশনটিকে এই অনুমতিটি দিতে পারি না .. আমি জানি না কে
মিনা গ্যাব্রিয়েল

7
প্রস্তাবিত নয়, কারণ এটি অত্যন্ত সুরক্ষিত। আপনার সম্পূর্ণ db_owner ব্যবহারের পরিবর্তে যথাযথ ভূমিকা তৈরি করা উচিত যা পুরো ডাটাবেসের উপর সম্পূর্ণ নিয়ন্ত্রণ রাখে
ইয়েতিশ

1

আপনি যদি কোনও নির্দিষ্ট ডাটাবেসের জন্য এই ব্যবহারকারীকে বিশেষ করে তোলেন, তবে সম্ভবত আপনি বৈশিষ্ট্যের "ইউজার ম্যাপিং" এ এটি db_owner হিসাবে সেট করেন না


1

আপনি সুরক্ষার সুবিধার্থে ডিজাইন করা সার্ভারের ভূমিকাগুলি সংশোধন করা ভাল better আপনার ব্যবহারকারীর সাথে সিসাদমিন সার্ভারের ভূমিকা যুক্ত করুন। আরও ভাল সুরক্ষার জন্য আপনার কাস্টম সার্ভারের ভূমিকা থাকতে পারে। তবে এই পদ্ধতির ফলে আপনি আপাতত যা চান তা আপনাকে দেবে।

  1. অবজেক্ট এক্সপ্লোরার -> সার্ভার -> সুরক্ষা -> লগইন
  2. আপনার কাঙ্ক্ষিত ব্যবহারকারীর উপর রাইট ক্লিক করুন
  3. বাম হাতের সার্ভার রোলগুলিতে যান
  4. সিসাদমিন চেক করা হয়েছে তা নিশ্চিত করুন
  5. ঠিক আছে চাপুন এবং আপনার এসকিউএল সার্ভারটি পুনরায় চালু করুন

শুভকামনা

এখানে চিত্র বর্ণনা লিখুন



0

কোনও ব্যবহারকারীর জন্য প্রকাশ্য নয় এমন অনুমতি কীভাবে দেওয়া যায় তা এখানে রয়েছে

সরাসরি জিজ্ঞাসা:

Use MyDatabase Grant execute on [dbo].[My-procedures-name] to [IIS APPPOOL\my-iis-pool] Go

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