আমি বিশ্বাস করি যে প্রামাণ্য উত্তরটি আমি পেয়েছি, যা এই নিবন্ধে সরবরাহিত সারণী দ্বারা ব্যাপকভাবে সহায়তা করেছে: http://msdn.microsoft.com/en-us/library/ms178569.aspx । এটি দেখে মনে হবে যে ক্রিয়েট ডেটাবেস হ'ল এএনএসআই এসকিউএল সম্মতিযুক্ত অনুমতি, যখন কোনও ডেটাবেস একটি এমএসএসকিউএল মালিকানাধীন সার্ভার অনুমতি। তবে দু'জন এক নয়। আসলে, দুজনের মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে এবং আমি এটি চেষ্টা করে খুঁজে পেয়েছি।
এগুলি উভয়েরই অনুমতি, তবে তৈরি ডেটাবেস কেবলমাত্র বর্তমানে ব্যবহৃত ডাটাবেসের সুরক্ষা প্রসঙ্গে পরামর্শ করে, যখন কোনও ডেটাবেস এসকিউএল সার্ভারে লগইনগুলির তালিকা দেখতে পারে। এটি প্রয়োগ করা হয়েছে বলে মনে হয় কারণ কোনও এএনএসআই এসকিউএল সার্ভারের সাধারণ প্রত্যাশাটি হ'ল কিছু প্রধান সিস্টেম ডাটাবেসে অনুমতি দেওয়া হয়, সেই ডাটাবেসের ব্যবহারকারীদের অনুমতি দেওয়া হয়। তারপরে নতুন ডাটাবেসের ডিফল্ট আচরণ হ'ল মাস্টারকে পরামর্শ নিতে হবে যে এটির কী অনুমতি নিতে হবে। (এসকিউএল 101, আমি জানি, তবে এটি এখানে সত্যই উদাহরণস্বরূপ)
সুতরাং, যখন আপনি ক্রিয়েট ডেটাবেসকে মঞ্জুরি দিন, আপনার কাছে অবশ্যই এই অনুমতিটি দেওয়ার জন্য মাস্টারে একজন ব্যবহারকারী থাকতে হবে। যদি আপনি এটি চেষ্টা করে থাকেন তবে এটি কাজ করে (মাস্টারে একটি ব্যবহারকারী তৈরি করুন, এটি ডেটাবেস তৈরি করতে অনুমতি দিন, তবে আপনি ডাটাবেসগুলি তৈরি করতে পারেন)। যাইহোক, কোনও ডাটাবেস তৈরি (বা ভূমিকা ডিবিক্রিটরকে প্রদান করে) মঞ্জুর করে, আপনাকে মাস্টারটিতে আক্ষরিক ব্যবহারকারীর প্রয়োজন হবে না।
দুটি অনুমতিগুলির মধ্যে পার্থক্যটি আরও চিত্রিত করার জন্য, কোনও ব্যবহারকারীকে মাস্টার বনাম অন্য ডাটাবেসে ক্রিয়েট ডেটাবেস প্রদান করে পৃথক পৃথক বার্তাগুলি পর্যবেক্ষণ করুন, তারপরে ধুয়ে ফেলুন এবং অনুমতিটির জন্য কোনও ডেটাবেস তৈরি করুন repeat
use master; GRANT CREATE DATABASE to TestUser
এমএসজি 15151, স্তর 16, রাজ্য 1, লাইন 1 ব্যবহারকারী 'টেস্ট ইউজার' খুঁজে পাচ্ছে না, কারণ এটি বিদ্যমান নেই বা আপনার অনুমতি নেই।
এই ত্রুটিটি ঘটে কারণ ব্যবহারকারী টেস্ট ইউজার এখনও মাস্টার ডাটাবেসে নেই। এটি একটি ডাটাবেস-স্তরের অনুমতি - নির্বাচিত ডাটাবেসের বাইরে গিয়ে লগইন বা ব্যবহারকারীদের সন্ধান করার কোনও প্রসঙ্গ নেই। মনে রাখবেন আপনি যদি মাস্টারটিতে প্রথমে ব্যবহারকারী তৈরি করেন তবে এই কমান্ডটি সফল হয় এবং আপনি ডাটাবেসগুলি তৈরি করতে পারেন ঠিক তেমন কোনও ডেটাবেস আপনাকে দেওয়া হয়েছিল।
use master; GRANT CREATE ANY DATABASE to TestUser
কমান্ড (গুলি) সফলভাবে সম্পন্ন হয়েছে।
এটি সফল হয় কারণ মাইক্রোসফ্ট এসকিউএল সার্ভারের অনুমতি হিসাবে, বর্তমানে ব্যবহৃত ডাটাবেসের কেবলমাত্র ব্যবহারকারীরা নয়, কোনও ডেটাবেস এসকিউএল উদাহরণের জন্য লগইনগুলির তালিকার সাথে পরামর্শ করতে পারে।
use test; GRANT CREATE DATABASE to TestUser
এমএসজি 15151, স্তর 16, রাজ্য 1, লাইন 1 ব্যবহারকারী 'টেস্ট ইউজার' খুঁজে পাচ্ছে না, কারণ এটি বিদ্যমান নেই বা আপনার অনুমতি নেই।
এটি প্রথম উদাহরণের জন্য আমার ব্যাখ্যাটির ধারাবাহিকতা প্রদর্শন করে। নীচের ক্যোয়ারী এবং এর ফলাফল ত্রুটি বার্তা নোট করুন। আপনি যদি প্রথম এই ডাটাবেসে ব্যবহারকারী তৈরি করেন তবে আপনি এই ত্রুটি বার্তাটি পাবেন না (শেষ প্রশ্নটি দেখুন)।
use test; GRANT CREATE ANY DATABASE to TestUser
এমএসজি 4621, স্তর 16, রাজ্য 10, লাইন 1 সার্ভার স্কোপে অনুমতিগুলি কেবল তখনই দেওয়া যেতে পারে যখন বর্তমান ডাটাবেসটি মাস্টার হয়
দ্বিতীয় ক্যোয়ারীতে দেখানো হয়েছে, যে কোনও ডেটাবেস লগইনগুলির তালিকাটিতে পরামর্শ করে, যেখানে আমি ইতিমধ্যে এই লগইনটির নামটি তৈরি করেছি। সুতরাং এসকিউএল সার্ভার ব্যবহারকারীর অস্তিত্ব স্বীকার করার পরেও এটি ত্রুটিযুক্ত হয়েছে কারণ আমি মাস্টার ব্যতীত অন্য কোথাও একটি সার্ভার-স্তরের অনুমতি দেওয়ার চেষ্টা করছি, যা এমএসএসকিউএলে অনুমোদিত নয়।
use test; create user TestUser; grant create database to TestUser
স্রেফ ডেটাবেসের অনুমতি কেবলমাত্র মাস্টার ডাটাবেসে দেওয়া যেতে পারে। এমএসজি 0, স্তর 11, রাজ্য 0, লাইন 0 বর্তমান কমান্ডটিতে একটি গুরুতর ত্রুটি ঘটেছে। ফলাফল, যদি থাকে, বাতিল করা উচিত।
এখন যেহেতু আবেদনকারীর জন্য ক্রিয়েট ডেটাবেসের একজন ব্যবহারকারী রয়েছেন, আমাকে জেনেরিক ত্রুটি বার্তা দেওয়া হয়েছে যে আপনি কোথাও সার্ভার-স্তরের অনুমতি দিতে পারবেন না তবে মাস্টার, কারণ এসকিউএল সার্ভার এই অনুমতিগুলি সংরক্ষণ করে।
ভাল, এটা মজা ছিল।