অন্যান্য ডাটাবেসগুলিতে অভ্যন্তরীণ সঞ্চিত প্রকল্পগুলির জন্য কোনও কেন্দ্রীয় সিএলআর সঞ্চিত পদ্ধতি / ফাংশন রিসোসিটোরি লাইব্রেরি স্থাপন করছেন?


17

আমি সিস্টেমে সমস্ত ডাটাবেসে ব্যবহার করতে সি # সিএলআর তে যে কোডটি বিকাশ করেছি তা ব্যবহার করতে চাই যাতে প্রতিটি বিশ্বাসযোগ্য হিসাবে সেট করতে না হয় এবং সিএলআর চালু করতে এবং প্রতিটি কোডের মধ্যে একই কোডের গুচ্ছ রাখতে না হয় ।

প্রশাসনিক এবং সুরক্ষা দৃষ্টিকোণ থেকে এটি করার সর্বোত্তম উপায় আছে কি? সিএলআর ফাংশনগুলি স্ট্রিং ব্রেকার, ইমেল বৈধকরণ, ইউআরএল এন / ডিকোড, বেস 64 এবং ইত্যাদি মত খুব বেসিক I আমি প্রতিটি ডাটাবেসে কেবলমাত্র ডিবিও স্কিমাটি ফাংশনগুলি অ্যাক্সেস করতে সক্ষম হতে চাই।

  1. এটি করার কোনও সহজ উপায় আছে?
  2. এছাড়াও আমি স্পষ্ট নই যে সিএলআর dll এমবেড করা আছে এবং যদি আমি ডাটাবেস সরিয়ে রাখি, এটি পাশাপাশি বরাবর ট্যাগ হয়, বা আমাকেও dll স্থানান্তর করতে হবে।

ধন্যবাদ


1
ঠিক আছে, ভাল লাগছে। যতক্ষণ না আমি প্রশ্নটি সম্পর্কে মৃত নীরবতা থেকে ক্রিকট শুনতে পাচ্ছি না। স্ট্যাকওভারফ্লোতে সর্বদা ভাগ্য ছিল
অ্যালেক্স এরউইন

1
dba.se এসও এর চেয়ে কম উন্মত্ত, তবে আমি আত্মবিশ্বাসী যে আপনি এইরকম একটি প্রশ্নের উপর একদিন বা আরও কিছুদিনের মধ্যে ভাল মনোযোগ পাবেন। এতক্ষণ ধৈর্য ধরে আপনি কি খুশি?
জ্যাক ডগলাস

হ্যাঁ, ধৈর্য একটি পুণ্য। আমার এটির একটি মোটামুটি পরিমাণ আছে, এবং নিজেই প্রশ্নটি আমি মনে করি, এমএস সম্বোধন করবে। আপনি যদি কোনও এসকিউএল সার্ভার হোস্ট হন যা কিছু কার্যকর ফাংশন প্রকাশ করতে চায় তবে আপনার সার্ভারটি সিএলআর-এর সাথে পুরোপুরি খোলা না থাকে?
অ্যালেক্স এরউইন

উত্তর:


8

আমাদের সংস্থায় আমাদের সেই সঠিক সেটআপ রয়েছে। আপনি যখন সিএলআর অ্যাসেম্বলি তৈরি করেন তখন আপনি এটি তৈরি করেন এমন ডেটাবেজের মধ্যে অ্যাসেমব্লির একটি বাইনারি উপস্থাপনা সংরক্ষণ করা হয় This এটি আপনাকে এটি আপনার সাথে নিতে সক্ষম করে (এবং এমনকি এটি স্ক্রিপ্টও আউট করে) আপনার যে কোনও সময় ডাটাবেস সরিয়ে নেওয়া উচিত।

কয়েক মাস আগে আমাদের ডেটা সেন্টার প্লাবিত হয়ে গেছে - বেশ কয়েকটি সার্ভারে ভরাট। আমি সেগুলি পুনর্নির্মাণ করার সময় আমি কেবল আগের রাতে নেওয়া ডিবিটির ব্যাকআপগুলি ব্যবহার করি। এখনও অবধি আমাদের কোন সমস্যা হয়নি .. (টাচ কাঠ!)

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

সিএলআর এটিতে থাকা ডাটাবেসের বাইরে এক্সেস রিসোর্সের মতো কাজ করার চেষ্টা করছে তবে আপনি যখন এটি তৈরি করবেন তখন আপনি এসেম্বলিতে অনুমতি সেট করতে পারেন এমন অ্যাক্সেসের সমস্যা থাকতে পারে। নীচের লিঙ্কটিতে অনুমতি সম্পর্কিত অনেক বেশি তথ্য রয়েছে যা আমি এখানে ব্যাখ্যা করতে পারি যদিও:

http://msdn.microsoft.com/en-us/library/ms345101.aspx

আমি এই আপনি সাহায্য করে আশা করি।


6

সমাবেশের বাইনারিটি ডাটাবেজে একটি ব্লব হিসাবে সংরক্ষণ করা হয়, তাই এটি যেখানেই ডাটাবেস যায় সেখানে বহন করে। CLR শুধুমাত্র সক্ষমিত রয়েছে উদাহরণস্বরূপ - সেখানে যে জন্য কোন ডাটাবেসের-নির্দিষ্ট সেটিংস রয়েছে।

যে কোনও ইভেন্টে আপনি কেন এটি চেষ্টা করছেন?

(আমি বিতর্কিত হওয়ার চেষ্টা করছি না; আমি কেবল জড়িত উদ্দেশ্যগুলি শুনতে চাই, কারণ সম্ভবত আপনার চাহিদা মেটাতে সমস্যাটি অন্যভাবে সমাধান করা যেতে পারে))


ভাগ করে নেওয়ার ডাটাবেসে অ্যাসেম্বলি রাখার ব্যতীত সহজেই এটি করার কোনও উপায় নেই।

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

  • যখন আপনি প্রতিলিপি বা ক্লাস্টারিংয়ের মতো বৈশিষ্ট্যগুলি ব্যবহার করার প্রয়োজন শুরু করেন, এই নির্ভরতা সম্ভাব্যভাবে মোতায়েনের ক্ষেত্রে বিপুল পরিমাণে জটিলতা যোগ করতে পারে তবে সমস্যা সমাধান, এবং ব্যর্থকরণ পদ্ধতিতেও।

  • এই আর্কিটেকচারটি সিস্টেমের সাথে অপরিচিত লোকদের কাছে অনেক কম স্পষ্ট (যেমন এটি স্ব-আবিষ্কারযোগ্য, এবং স্ব-ডকুমেন্টিং কম)।

  • যদি আপনার বিভিন্ন ডেটাবেজে বিভিন্ন সুরক্ষা বা ভিন্নতার সাথে জড়িত এমন কোনও কিছুর প্রয়োজন হয় তবে আপনি আঘাতের জগতে রয়েছেন।

  • যদি এই ডেটাবেসগুলি গ্রাহকদের কাছে স্থাপন করা হয় (শব্দগুলি সেগুলি হবে না বলে মনে হয় তবে আমি এটি সম্পূর্ণতার জন্য বলব), এটি স্থাপন পদ্ধতি, রক্ষণাবেক্ষণ এবং সমস্যা সমাধানের ক্ষেত্রে জটিলতা যুক্ত করে।

  • যেহেতু সমস্ত ডাটাবেসগুলি এই কোডটি ভাগ করে দেবে, যদি কোনও বাগ প্রবর্তিত হয় (বা স্থির!), এটি সম্ভবত ডাটাবেসের উপর নির্ভরশীল সমস্ত অ্যাপ্লিকেশনকে ভেঙে ফেলতে পারে । বিস্তৃত ইউনিট টেস্টিং একটি পরম আবশ্যক হবে।

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

আপনি যা করতে পারতেন তা হ'ল উত্সের অনুলিপি হ্রাস করার জন্য এই ডাটাবেসের জন্য স্থাপনার পদ্ধতির অন্যান্য অংশগুলি সংশোধন করা। উদাহরণস্বরূপ, উত্স নিয়ন্ত্রণে সিএলআর কোডের সাধারণ অবস্থান থেকে অ্যাসেম্বলি তৈরি এবং স্থাপন করুন। অথবা, একটি স্ক্রিপ্ট তৈরি করুন যা একই অ্যাসেমব্লিকে ডেটাবেজে স্থাপন করে। যতটা সম্ভব জিনিসগুলির এই অংশটি স্বয়ংক্রিয় করুন এবং এটি কোনও বড় বিষয় হবে না।

আমি সম্মত হই যে আমি যা প্রস্তাব করছি তা একটি ট্রেডঅফ, কারণ এখনও কিছু অনুলিপি থাকবে, তবে এটি নির্ধারিত মান অনুসরণ না করে এমন একটি স্থাপত্য বাস্তবায়নের সাথে জড়িত নেতিবাচক সাথে ভারসাম্যপূর্ণ হতে হবে। আপনার পরিবেশের জন্য সঠিক কি তা কেবল আপনিই স্থির করতে পারেন।


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

1

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

এছাড়াও, enabled/ disabledসেটিং CLR Integration(মাধ্যমে sp_configure) হয় সিস্টেম-ব্যাপী। পার্শ্ব নোট হিসাবে, সেটিংটি কেবল ব্যবহারকারী-তৈরি সিএলআর কার্যকারিতার জন্য; সাধারণ অর্থে সিএলআর সর্বদা নির্দিষ্ট বিল্ট-ইন কার্যকারিতা হিসাবে নির্ভর করে কারণ এটি নির্ভর করে।

এটি বলেছিল, এখানে অন্য দুটি উত্তর বৈধ পয়েন্টগুলি তৈরি করার সময়, সেই পয়েন্টগুলি এসকিউএলসিআর-নির্দিষ্ট নয় এবং এসকিউএলসিআর কোডের সাথে সুনির্দিষ্ট এই সিদ্ধান্ত নেওয়ার কারণগুলির কোনও উল্লেখ নেই। আপনি প্রতিটি পৃথক ডাটাবেসে কোড স্থাপন করে কিনা তা বিবেচনার জন্য মেমরির সমস্যাগুলি রয়েছে (ধরে নেওয়া যায় যে আপনার কাছে অনেকগুলি ডাটাবেস রয়েছে), সম্ভাব্য সংস্থান সংক্রান্ত বিতর্ক সমস্যা, সম্ভাব্য সুরক্ষা-সম্পর্কিত সমস্যা ইত্যাদি etc.

পৃথক ডাটাবেস বনাম একটি কেন্দ্রীভূত ডাটাবেস মধ্যে সিদ্ধান্ত নেওয়ার সময় আমি বিশেষত এসকিউএলসিআর কোডের জন্য মনে রাখার মতো বিষয়গুলির একটি বিস্তৃত তালিকা হওয়া উচিত provided এখানে তালিকাটির সদৃশ হওয়ার পরিবর্তে দয়া করে নীচের উত্তরটি দেখুন (ডিবিএ.এসইতেও এখানে):

পারফরম্যান্স দৃষ্টিকোণ থেকে সিএলআর ফাংশন কীভাবে ব্যবহার করতে হবে (প্রতিটি ডিবিতে পুনরাবৃত্তি হয় বা সাধারণ কার্যকারিতা থাকে)?

এছাড়াও, সম্পর্কিত নোটে, আমি প্রশ্ন করব যে কোনও ডাটাবেস কেন সেট করা হচ্ছে TRUSTWORTHY ON। প্রশ্নে উল্লিখিত কার্যকারিতা (যেমন "স্ট্রিং ব্রেকার, ইমেল বৈধকরণ, ইউআরএল এন / ডিকোড, বেস 64, ইত্যাদি") একটি SAFEসমাবেশের মধ্যেই সমস্ত সম্ভব । একেবারে প্রয়োজনীয় না হলে আপনার EXTERNAL_ACCESSবা UNSAFEপার্সেশন_সেট মানগুলি ব্যবহার করা উচিত নয় । এবং যদি এটি কয়েকটি সংখ্যক ক্রিয়াকলাপের জন্য প্রয়োজনীয় হয়, তবে সেগুলি একটি পৃথক অ্যাসেমব্লিতে হওয়া উচিত যাতে কেবল SAFEকোড থাকে যাতে কোনও স্কেলার ফাংশন যা ডেটা অ্যাক্সেস না করে এবং চিহ্নিত হিসাবে চিহ্নিত IsDeterministic = trueরয়েছে তার কার্যকারিতা সুবিধাটি ব্যবহার করতে সক্ষম হবে সমান্তরাল পরিকল্পনা অংশগ্রহণ করতে সক্ষম।

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