প্রাথমিক কী কীভাবে প্রকাশ করা হবে না


53

আমার শিক্ষায় আমাকে বলা হয়েছে যে ব্যবহারকারীর কাছে প্রকৃত প্রাথমিক কীগুলি (কেবলমাত্র ডিবি কী নয়, সমস্ত প্রাথমিক অ্যাকসেসর) প্রকাশ করা ত্রুটিযুক্ত ধারণা।

আমি সবসময় এটিকে একটি সুরক্ষা সমস্যা বলে মনে করতাম (কারণ কোনও আক্রমণকারী তাদের নিজস্ব না হয়ে স্টাফগুলি পড়ার চেষ্টা করতে পারে)।

এখন আমাকে যাচাই করতে হবে যে যেভাবেই ব্যবহারকারীর অ্যাক্সেসের অনুমতি রয়েছে কিনা, এর পিছনে কি আলাদা কারণ আছে?

এছাড়াও, যেহেতু আমার ব্যবহারকারীদের ডেটা অ্যাক্সেস করতে হবে আমার মাঝে বাইরের বিশ্বের জন্য একটি সার্বজনিক কী থাকা দরকার। এখন যে পাবলিক কীতে প্রাইমারি কী-তে একই সমস্যা রয়েছে তাই না?


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

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

ক্রিয়াকলাপ খুব সূক্ষ্ম দানাদার তাই এটি কিছু ধারক বস্তুর সাথে একত্রে থাকে, এটিকে "টাস্ক" বলতে দেয়।

তিনটি ব্যবহারের কেস:

  1. ব্যবহারকারী এটিকে কিছু টাস্কে ব্যবহারকারী বি প্রেরণ করতে চায় তাই তিনি সেখানে কিছু ক্রিয়াকলাপ করার জন্য তাকে একটি লিঙ্ক (এইচটিটিপি) প্রেরণ করেন।
  2. ব্যবহারকারী বিকে ভবনের বাইরে যেতে হবে তাই তিনি তার মোবাইল ডিভাইসে টাস্কটি খুলুন।
  3. অ্যাকাউন্টিং গ্রাহককে টাস্কের জন্য চার্জ করতে চায় তবে তৃতীয় পক্ষের অ্যাকাউন্টিং সিস্টেম ব্যবহার করে যা কোনও কোড দ্বারা স্বয়ংক্রিয়ভাবে টাস্ক / ক্রিয়াকলাপ লোড করে যা অ্যাপ্লিকেশনটির আরএসটি - এপিআই উল্লেখ করে

প্রতিটি ব্যবহারকারীর ক্ষেত্রে টাস্ক এবং ক্রিয়াকলাপের জন্য এজেন্টের কিছু ঠিকানাযোগ্য সনাক্তকারীর প্রয়োজন (বা সহজ হয়ে যায়) easier


3
সম্পর্কিত: কোনও সার্গেট কী কী কোনও ব্যবহারকারীর সামনে প্রকাশ করা উচিত? "আপনাকে যে কোনও সনাক্তকারী যা ব্যবহারকারী / গ্রাহকদের পরিবর্তিত হওয়া প্রয়োজন, তাদের কাছে উন্মুক্ত করা দরকার এবং একটি ডাটাবেসে একটি সারিটির পরিচয় পরিবর্তন করা এবং সেই পরিবর্তনটি সমস্ত বিদেশী কীতে প্রচার করা কেবল তথ্য ভাঙ্গতে বলছে ..."
gnat

@ গ্যান্যাট এর ON UPDATE CASCADEজন্য তৈরি করা হয়েছিল ( মাইএসকিএল নির্দিষ্ট?), যদিও সমস্যাটি যদি সুরক্ষা হয় তবে অ্যাক্সেস চেকিং ব্যাকএন্ডে থাকা উচিত এবং কোনওভাবেই ব্যবহারকারীকে বিশ্বাস করা উচিত নয়
ইজকাটা

2
@ ইজকাটা হ্যাঁ, আপনি যখন অন্য কোনও ডেটাস্টোরের উল্লেখ করেন (লডাপে ইউজারআইডি একটি সাধারণ উদাহরণ হিসাবে), বা আপনাকে ব্যাকআপ থেকে কিছু তথ্য উদ্ধার করতে হবে except gnat একটি ভাল পয়েন্ট আছে।
অ্যাঞ্জেলো ফুকস

আপনি "এক্সপোজ" দিয়ে যা বোঝাতে চেয়েছেন তার উপর কী বিশদ বিবরণ দিতে পারেন? একটি বাস্তব উদাহরণ সাহায্য করতে পারে। :-)
কোডকাস্টার

"এক্সপোজ" এর অর্থ এটি ব্যবহারকারীর কাছে প্রদর্শন করা। (ব্যবহারকারীর দ্বারা আমি বেশিরভাগই একজন মানুষ, তবে প্রশ্নটি মেশিনগুলির জন্যও বৈধ বলে মনে হয়)
অ্যাঞ্জেলো ফুকস

উত্তর:


38

এছাড়াও, যেহেতু আমার ব্যবহারকারীদের ডেটা অ্যাক্সেস করতে হবে আমার মাঝে বাইরের বিশ্বের জন্য একটি সার্বজনিক কী থাকা দরকার।

যথাযথভাবে। রাষ্ট্রবিহীন এইচটিটিপি নিন, যিনি অন্যথায় জানেন না যে এটিতে কী উত্সের অনুরোধ করা উচিত: এটি 218306URL এ আপনার প্রশ্নের আইডি প্রকাশ করে। সম্ভবত আপনি সত্যিই ভাবছেন যে কোনও উন্মুক্ত শনাক্তকারী অনুমানযোগ্য হতে পারে কিনা ?

কেবলমাত্র সেই জায়গাগুলিতে যেখানে আমি তার নেতিবাচক উত্তর শুনেছি, যুক্তিটি ব্যবহার করেছে: "তবে তারা URL- এ আইডি পরিবর্তন করতে পারে!" । সুতরাং তারা যথাযথ অনুমোদনের পরিবর্তে জিইউইডিগুলি ব্যবহার করেছিল।

আমি এমন একটি পরিস্থিতি কল্পনা করতে পারি যেখানে আপনি চান না যে আপনি আপনার শনাক্তকারীদের পূর্বাভাসযোগ্য হোন: উত্স সংগ্রহ আপনার যদি এমন কোনও সাইট থাকে যা সর্বজনীনভাবে নির্দিষ্ট কিছু সংস্থান হোস্ট করে অন্যের পক্ষে এটি আকর্ষণীয় হতে পারে এবং আপনি সেগুলি হোস্ট করেন /images/n.jpgবা /videos/n.mp4যেখানে nকেবল একটি ইনক্রিমিং নম্বর রয়েছে, আপনার ওয়েবসাইট থেকে এবং ট্র্যাফিকের দিকে তাকানো যে কেউ আপনার সমস্ত সংস্থান সংগ্রহ করতে পারে।

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


2
অদম্য url (যেমন একটি ক্রিপ্টোগ্রাফিক র্যান্ডম 128 বিট টোকেনযুক্ত) যথাযথ অনুমোদনের একধরনের।
কোডসইনচাওস

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

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

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

1
কিছুই না, আমার বক্তব্য ঠিক আপনি কি তখন "এক্সপোজ" দিয়ে যা বোঝাতে চেয়েছেন তা সম্ভবত ব্যাখ্যা করতে পারেন?
কোডকাস্টার

29

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

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


4
+1 তবে আপনি এখানে যা বর্ণনা করছেন তা আসলে একটি সারোগেট কী। প্রতিটি টেবিলের একটি সরোগেট কী নেই এবং এটি সার্গেটটি করলেও এটি "প্রাথমিক" কী হতে পারে না।
nvogel

2
+1 আমি ভেবেছিলাম অ্যাকাউন্ট নম্বরটি সারোগেট কী হবে তবে আমি এটি পড়েছি এবং আপনি 100% সঠিক
মাইকেল ডুরান্ট

2
ব্যবহারকারীদের কাছে এটি প্রকাশ করা +1 অন্তর্নিহিত প্রয়োজনীয়তা যুক্ত করে (উদাঃ স্থির থাকুন)
ম্যাট

1
দুর্দান্ত উত্তর। আমার এই শর্টহ্যান্ডের উপায়টি হ'ল সরোগেট কীগুলি দরকারী কারণ কেউ তাদের সম্পর্কে চিন্তা করে না এবং তাই কেউ যদি সেগুলি পরিবর্তন করে বা সেগুলি পরিবর্তন না করে তবে কেয়ার করে না। আপনি যদি তাদের প্রকাশ করেন তবে লোকেরা তাদের যত্ন নেওয়া শুরু করবে।
জিমি জেমস

tl; dr: কারণ ভবিষ্যত। যদি বাহ্যিক কিছু যদি কোনও চাবির উপর নির্ভর করতে আসে তবে পরে বাস্তবায়ন পরিবর্তিত হলে জিনিসগুলি অগোছালো হয়ে যায়; তাই জিনিসগুলি আরও সহজ করার জন্য এগুলি কমবেশি লুকিয়ে রাখুন।
অ্যাডাম টোলি

27

কারণ প্রাথমিক কীগুলি একটি বাস্তবায়ন বিশদ।

আপনি যদি ডেটাবেসগুলিতে স্থানান্তর করেন, সন্নিবেশকরণের ক্রম, পুরানো রেকর্ডগুলি অপসারণের ... আপনার কয়েকটি ভিন্ন কারণে আপনার প্রাথমিক কীগুলি পরিবর্তিত হতে পারে। আপনি যদি ডাটাবেস প্ল্যাটফর্মগুলি স্থানান্তর করেন তবে আপনার আর প্রকৃত প্রাথমিক কী থাকতে পারে না। ডেটা অ্যাক্সেস লেয়ারের উপরে পিকে এক্সপোজার করা একটি ফাঁসী বিমূর্ততা, এতে সংযুক্ত সমস্ত দম্পতির উদ্বেগ রয়েছে।


3
কোনও প্রাথমিক স্তরটি কীভাবে কোনও প্রাথমিক কী ছাড়াই ডেটা স্তর থেকে পুনরুদ্ধার করতে বা আপডেট করতে চায় এমন কোনও সংস্থানটি অনন্যভাবে সনাক্ত করতে পারে?
কোডকাস্টার

2
@ কোডকাস্টার - কোনও কোনও অনন্য সূচকযুক্ত ডেটা সেট দ্বারা, বা কোনও অ-সর্বজনীন প্রাথমিক কী দ্বারা যা ডেটা অ্যাক্সেস স্তর দ্বারা সরবরাহিত বস্তুর অংশ হিসাবে ফিরে আসে।
টেলাস্টিন

1
@ কোডকাস্টার - একটি টোকেন তৈরির প্রচুর উপায় রয়েছে যা কলব্যাকটিকে কী অপারেশন চলছে তা নির্দিষ্ট করার অনুমতি দেয় এবং অবশ্যই তারা সকলেই প্রাথমিক কী পাস করে না।
টেলাস্টিন

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

1
@ কোডকাস্টার - না, মাঝারি স্তরটি আসলে এটির কাজ করে এবং ইউআই থেকে ডেটা অ্যাক্সেসের কোনও কিছুরই বিমূর্ততা দেয়। বিশ্বে প্রচুর পরিমাণে খারাপ স্থপতি রয়েছে, তবে প্রোগ্রাম ডিজাইনের সেরা অনুশীলনগুলির অনেকগুলি একটি কারণে উপস্থিত রয়েছে। কিছু অ্যাপ্লিকেশন সেই ফাঁসযুক্ত বিমূর্ততার ঝুঁকি নিতে পারে এবং কিছু না পারে।
টেলাস্টিন

10

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

আপনার ডাটাবেসগুলির প্রাথমিক কীটি প্রকাশ করা উচিত নয় তবে পরিবর্তে একটি সার্গেট কী ব্যবহার করা উচিত

  1. আপনি যদি চান যে আপনার ব্যবহারকারীরা মনে রাখতে (কমপক্ষে কিছুটা) বা কোনও এন্ট্রির সনাক্তকারী সনাক্ত করতে সক্ষম হন। ( গ্রেস্টোন 28 উত্তর )
  2. আপনি যদি পরিকল্পনা করতে চান এবং বিবেচনা করুন যে আপনি সম্ভবত সিস্টেমগুলি (ডেটাবেস বা অন্যথায়) পরিবর্তন করতে পারেন যা সম্ভবত আপনার পিকে পরিবর্তন করবে change ( টেলাস্টিনস উত্তর )
  3. আপনি যদি নিশ্চিত করতে চান যে আপনার ব্যবহারকারীদের ডেটা অ্যাক্সেসের একটি অবিচ্ছিন্ন উপায় রয়েছে যা আপনার সংস্থা মালিকানা বদল করে এবং ডেটা পুরোপুরি একটি ভিন্ন সিস্টেমে স্থানান্তরিত করে তবুও পরিবর্তিত হয় না। ( মাইকেল ডরান্টস উত্তর )
  4. যদি আপনার পিকে অনুমানযোগ্য হয় (অনুক্রমের মতো) আপনার সিস্টেমটি রিসোর্স কাটার সমস্যায় ভুগতে পারে। ( কোডকাস্টারস উত্তর ) এটি কেবল তখনই প্রযোজ্য যদি আপনার সিস্টেমে এমন তথ্য থাকে যা ফসল কাটার উপযুক্ত এবং এটি যে কেউ বা কমপক্ষে কারও দ্বারা অ্যাক্সেসযোগ্য যার ফসল সংগ্রহের আগ্রহ রয়েছে।

দ্রষ্টব্য: আপনার তৈরি কীটি মানবীয় বোধগম্য ( স্ক্যান্ডাভেলস উত্তর ) হওয়া উচিত।

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


8

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

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


7
প্রশ্নটি হল: "প্রাথমিক কীগুলি প্রকাশ করা কি খারাপ?" । আপনার উত্তর: "ব্যবহারকারীরা তাদের নিজস্ব সনাক্তকারী থাকতে চাইতে পারেন" । আমি সম্পর্ক পাই না। আমি প্রকাশ করি InvoiceNumber, যার একটি অর্থ রয়েছে এবং এটি গ্রাহক দ্বারা পরিবর্তনযোগ্য, তবে আমি প্রকাশও করি InvoiceID, যা আমার কোডটি চালানটি স্বতন্ত্রভাবে সনাক্ত করতে ব্যবহার করে। ইউজার-কীটি স্টোরেজ-কী হতে দেবে না (এবং প্রায়শই আপনি চান না)। এই প্রশ্নটি উত্তরোত্তর সম্পর্কে।
কোডকাস্টার

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

1
@ কোডকাস্টার এই প্রশ্নটি আসলে "আপনি কেন তাদের একই হতে চান না" সম্পর্কে?
অ্যাঞ্জেলো ফুকস

সেক্ষেত্রে টেলাস্টিনস এর উত্তর দেখুন
কোডকাস্টার

2

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

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

আপনার প্রশ্নে অন্তর্ভুক্ত সমস্যা / ভুল বোঝাবুঝি প্রাথমিক কী শব্দটির অনুপযুক্ত ব্যবহারের কারণে । বেশ কয়েকটি "প্রার্থী" কীগুলির মধ্যে একটি প্রাথমিক কী কেবল একটি (একটি ডাটাবেস টেবিলের বেশ কয়েকটি সম্ভাব্য শনাক্তকারী)। প্রাথমিক কীটির জন্য অন্য যে কোনও মূল মৌলিকভাবে আলাদা সম্পত্তি প্রয়োজন হয় না তাই প্রাথমিক কীগুলিতে বিশেষভাবে প্রযোজ্য এবং অন্যান্য কীগুলিতে নয় এমন অভিযোগ ও নকশার নীতিগুলি সর্বদা সন্দেহজনক এবং প্রায়শই ভুল হয়।

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


1
এটা নির্ভর করে ... কিসের উপর? কখন জানতে হবে এবং কখন তা প্রয়োগ করা যায় না তা জানতে জেনেরিক ধারণার পিছনে কী কারণ রয়েছে তা আমি জানতে চাই।
অ্যাঞ্জেলো ফুকস

1
হাই গ্রাহক, দয়া করে আমাকে আপনার আইডি দিন যাতে আমি আপনাকে সহায়তা করতে পারি। অবশ্যই, এর gfds789gxb3456bgfx789fgh98076hytd6734nhg5678nghf875nhgf456। হুম, তোমার সামাজিক অবস্থা কেমন? ... সারোগেট আইডি
মাইকেল ডুরান্ট

@ মিশেল, উত্তর আপডেট হয়েছে। এটি কি একটি পরিচিত, সহজ এবং স্থিতিশীল কী?
এনভিজেল

1

কোডকাস্টারের গ্রাইস্টোন 28 এর উত্তরের মন্তব্য থেকে এটি। এটি আপনি যা বলছেন তার উদাহরণ:

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

আপনার অ্যাপ্লিকেশনটির ইনভিয়েডআইডি ডিপ্লাই করার কী উদ্দেশ্য রয়েছে?

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


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

@ অ্যাঞ্জেলোনিশ্চিটজার - যদি ব্যবহারকারী স্বতন্ত্রভাবে গ্রাহকের নাম এবং নম্বর দ্বারা একটি চালান সনাক্ত করতে পারেন তবে ব্যবহারকারীর ইনভয়েসিড পিকে প্রয়োজন হয় না, তবে ডাটাবেস এবং অন্তর্নিহিত কোড ব্যবহার করতে পারে can তারা পারস্পরিক একচেটিয়া ফাংশন।
JeffO

আমার উদাহরণের 1 - 3 কেস দেখুন। সেগুলির কোনওটিতেই গ্রাহক নাম ব্যবহারকারীর জন্য সেই বস্তুকে সম্বোধন করার কার্যকর উপায় নয় (এটি মানুষ বা মেশিনই হোক)। ইনভয়েসআইডি পিকে হয়।
অ্যাঞ্জেলো ফুকস

1

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

ধারাবাহিকতা এবং পঠনযোগ্যতার স্বার্থে আমি সিস্টেমের সমস্ত সত্তার পক্ষে তাদের শনাক্তকরণের জন্য সঠিক একই ধরণ এবং নাম ব্যবহার করা ভাল বলে অনুভব করি। সাধারণত এই শনাক্তকারীকে <type> getId()কিছু বিমূর্ত বেস শ্রেণিতে প্রকাশ করা হবে।

একই কারণে সিস্টেমের প্রতিটি পরিষেবা (উদাহরণস্বরূপ চালান পরিষেবা) তাদের সনাক্তকারী দ্বারা সত্তা অ্যাক্সেসের জন্য অভিন্ন পদ্ধতি সরবরাহ করা উচিত। সাধারণত এই পদ্ধতিটি ( findById(<type> id)) জেনেরিক সার্ভিস ইন্টারফেস বা বেস ক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়।

এই সনাক্তকারীকে সত্তার প্রাথমিক কী হতে হবে না তবে এটি এক হতে পারে। কেবল একটি বিষয় নিশ্চিত করতে হবে যে মূল প্রজন্মের কৌশলটি যথাযথভাবে অনন্য শনাক্তকারী তৈরি করে (সর্বজনীনভাবে অনন্য নয় তবে কমপক্ষে সিস্টেমের মধ্যেই)।

যদি সিস্টেমটি পরে অন্য ডেটাবেসে স্থানান্তরিত হয় (আমার অভিজ্ঞতায় বড় হয়) তবে কৌশলটি যতক্ষণ না মূল কৌশলটির সাথে সামঞ্জস্য হয় ততক্ষণ সনাক্তকারী তৈরি করার জন্য আলাদা কৌশল (প্রাথমিক কীগুলির উপর ভিত্তি করে নয়) ব্যবহার করা সমস্যা নয়।


আপনি কি উত্তর দিতে পারেন যে আপনার উত্তরে অন্য জবাব দেওয়া হয়নি?
অ্যাঞ্জেলো ফুকস

2
আমার উত্তরে আমি আপনার সারসংক্ষেপের কমপক্ষে ২ এবং ৩ পয়েন্টের সাথে একমত নই। আমি মনে করি না যে এটি পিকেগুলি অবজেক্ট আইডেন্টিফায়ার হিসাবে ব্যবহার না করার বৈধ কারণ are
মিটন

0

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

মূলত, এটি ব্যবহারকারী বা হ্যাকারদের কাছে প্রকাশ করার মতো খারাপ কিছুই নেই। কারণ আমি এমন কোনও আক্রমণ সম্পর্কে জানি না যা উদাহরণস্বরূপ প্রাথমিক কী ব্যবহার করে।

তবে সুরক্ষায়, আমাদের অনেকগুলি নীতি রয়েছে (যা আমরা গ্রহণ করি এবং স্বীকার করি না) এবং সেগুলি আমাদের মেনে চলা দরকার:

  1. ইজারা সুবিধার নীতি
  2. অস্পষ্টতার মাধ্যমে সুরক্ষা

এবং কিছু অন্যান্য নীতি। তারা মূলত যা বলে তা হ'ল:

আপনার যদি আপনার ডেটা প্রকাশের দরকার না হয় তবে আপনি কেন একেবারেই করবেন?


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

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