সেরা অনুশীলন বাস্তবায়নের ভূমিকা পোস্টগ্রিজ করে


21

ভাবেন,

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

Postgres v9.2 এর একটি ইনস্টল সহ একটি সার্ভার রয়েছে। এই ইনস্টলটি একাধিক ডাটাবেস হোস্ট করে, প্রতিটি একেবারে পৃথক "গ্রাহক" হিসাবে পরিবেশন করে। অন্য কথায়, গ্রাহক 1, ডেটাবেস 2 ব্যবহার করা উচিত নয় এবং আরও কিছু কথা। স্বাভাবিক ক্রিয়াকলাপের সময়, ডেটাবেসগুলি কেকপিএইচপি-র একটি মিলের উদাহরণ দিয়ে অ্যাক্সেস করা হয়, সমস্ত পোস্টগ্রিসের মতো একই সার্ভারে সহ-অবস্থিত। যদিও এই স্থাপনার ক্ষেত্রে সম্ভাব্য অপ্টিমাইজেশন থাকতে পারে, তবে আমি বেশিরভাগই পিএসকিএল ভূমিকাতে আগ্রহী।

আমি যা পড়েছি তার উপর ভিত্তি করে, মনে হচ্ছে তিন ধরণের ভূমিকা অর্থবোধ করবে:

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

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

     Role name |                   Attributes                   |     Member of     
    -----------+------------------------------------------------+-------------------
     admin     | Create role, Create DB                         | {user1, user2}
     postgres  | Superuser, Create role, Create DB              | {}
     user1     |                                                | {}
     user2     |                                                | {}

    postgres=# \l
                                 List of databases
       Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
    -----------+----------+----------+---------+-------+-----------------------
     admin     | postgres | UTF8     | en_US   | en_US | =Tc/postgres         +
               |          |          |         |       | postgres=CTc/postgres+
               |          |          |         |       | admin=CTc/postgres
     postgres  | postgres | UTF8     | en_US   | en_US | 
     template0 | postgres | UTF8     | en_US   | en_US | =c/postgres          +
               |          |          |         |       | postgres=CTc/postgres
     template1 | postgres | UTF8     | en_US   | en_US | =c/postgres          +
               |          |          |         |       | postgres=CTc/postgres
     user1     | admin    | UTF8     | en_US   | en_US | =Tc/admin            +
               |          |          |         |       | admin=CTc/admin      +
               |          |          |         |       | user1=CTc/admin
     user2     | admin    | UTF8     | en_US   | en_US | =Tc/admin            +
               |          |          |         |       | admin=CTc/admin      +
               |          |          |         |       | user2=CTc/admin

সাফ মধ্যে বাহ্যিক সংযোগ এবং পাসওয়ার্ড প্রতিরোধ করতে, pg_hba.conf যেমন:

local   all             all                                     md5
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5

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

পাশেই @ ফ্লোরিনএআসভোয়াই তাঁর মন্তব্য। প্রতিটি ডাটাবেসের নিজস্ব মালিক ব্যবহারকারী এবং ক্যোয়ারী ব্যবহারকারী থাকা উচিত নয়? এটি রক্ষণাবেক্ষণের উদ্দেশ্যে নির্দিষ্ট ব্যবহারকারীদের একটি পাসওয়ার্ড ভল্টে রাখা সহজ করে তোলে।
hspaans

উত্তর:


5

আমি জানি এটি একটি পুরানো প্রশ্ন তবে আমি এর সাথে এখনই এর উত্তর দেওয়ার চেষ্টা করব, কারণ আমি এ সম্পর্কিত কিছু গবেষণা করতে পেরেছি।

আপনি যা করতে চেষ্টা করছেন তা ডাটাবেস স্তরে মাল্টি-টেন্যান্সি বলে । এটি দুটি উপায়ে অর্জন করা যেতে পারে:

  1. একক ডাটাবেস ক্লাস্টারে, কিছুটা ওপি কীভাবে বর্ণনা করেছে, তবে আমার ব্যক্তিগত পছন্দটি এটি হবে:

    • পোস্টগ্রিজ ব্যবহারকারী পিয়ার প্রমাণীকরণ ব্যবহার করে এবং পাসওয়ার্ড সংযোগের অনুমতি নেই। আমার মতে MD5 প্রমাণীকরণ একটি খারাপ অভ্যাস। আপনি যদি ডাটাবেস ধারাবাহিকতা বা এই ধরণের জিনিসগুলির সাথে কোনও ধরণের সমস্যায় পড়েন তবে পোস্টগ্র্রেসকে পিয়ার অ্যাথ ব্যবহার করতে দিলে আপনি লগইন করতে সক্ষম হবেন।
    • প্রতিটি গ্রাহকের নিজস্ব স্কিমা পাওয়া উচিত ডেটাবেস নয়। এর একাধিক কারণ রয়েছে:
      • পুরো ডাটাবেসটির মালিকানা অনেক সুবিধা দেয়।
      • কেবলমাত্র সুনির্দিষ্ট সারণীর মালিকানা বিকাশকারীদের জন্য সমস্যা আনবে এবং সর্বদা প্রশাসকদের অনুমতি এবং স্টাফ যুক্ত করার অনুরোধ জানায়।
      • এর মতো, একটি সাধারণ সেটআপে, তাদের প্রত্যেকে টেবিল, ভিউ, ট্রিগার ইত্যাদিসহ তাদের স্কিমার ভিতরে জিনিস তৈরি করতে অ্যাক্সেস পাবেন
      • এঁরা সকলেই ব্যবহারকারীর নাম বাদে একই সংযোগের স্ট্রিং ব্যবহার করেন। পোস্টগ্রিসে, ডিফল্টরূপে, আপনার ব্যবহারকারীর নামের সাথে যদি আপনার একটি স্কিমা থাকে, তবে এটি স্বয়ংক্রিয়ভাবে আপনার অনুসন্ধান_পথে is
    • আমি সুরক্ষা ব্যবস্থা হিসাবে প্রতিটি স্কিমা অ্যাক্সেস করতে সক্ষম এমন প্রশাসক ব্যবহারকারী না থাকার জন্য নির্বাচন করব। আপনার নিজের ব্যবহারকারীর সাথে প্রতিটি স্কিমা ডাম্প করে বা পোস্টগ্রেএসকিউএল এর পিআইটিআর কৌশলটি ব্যবহার করে আপনার ব্যাকআপগুলি করা উচিত। আপনাকে এখনও নতুন স্কিমা তৈরি করতে পোস্টগ্রিজ ব্যবহারকারী ব্যবহার করতে হবে, আমি তার জন্য একটি সুডোর নিয়ম এবং একটি স্ক্রিপ্ট চাই।
    • অনেকগুলি সুরক্ষার ভাল অনুশীলনগুলি তাই ডিফল্ট স্কিমা বাদ দেওয়ার পরামর্শ দেয় - আমরা সেখানে যাই।
    • এই সমাধানটি অত্যন্ত উপযুক্ত যদি প্রতিটি গ্রাহকের জন্য ডিবি ছোট হয় এবং আপনি প্রচুর গ্রাহক পেয়ে থাকেন।
    • যদি আপনার আবেদনটি বহু-প্রজাস্বত্ব পরিচালনা করে, তবে এটি সমস্ত গ্রাহকদের জন্য একটি একক সংযোগ পুল ব্যবহার করতে পারে। অবশ্যই এটি উপরোক্ত সুরক্ষা বর্ধনের অনেকগুলি অপসারণ করে তবে পারফরম্যান্স সুবিধাগুলি থাকতে পারে, বিশেষত যখন আপনার বিপুল সংখ্যক গ্রাহক থাকে (যদি আপনার কাছে 500-1000 আলাদা ডেটাসোর্স থাকে এবং আপনি সংযোগ পুলিং ব্যবহার করেন তবে এটি যথেষ্ট অপ্রতিরোধ্য হবে)।
  2. প্রতিটি গ্রাহক তাদের নিজস্ব ডাটাবেস ক্লাস্টার পান। এটি আমার পছন্দের সমাধানটি বিশেষত কারণ আমি সাধারণত প্রতিটি গ্রাহকের প্রতি বড় ডেটাবেসযুক্ত অ্যাপ্লিকেশনগুলির সাথে কাজ করি।

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

আপনি উপরের সংমিশ্রণটিও ব্যবহার করতে পারেন এবং রাউটার হিসাবে পিজিবাউসার ব্যবহার করতে পারেন।

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