পোস্টগ্রিএসকিউএল-এ ব্যাকআপের জন্য আমি কীভাবে পঠনযোগ্য ব্যবহারকারী তৈরি করতে পারি?


15

এটা কি সত্য যে PostgreSQL এ কেবল পঠন ব্যাকআপ ব্যবহারকারী তৈরি করা অসম্ভব?

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

নীচে আমি যা চেষ্টা করেছি তা কিন্তু এটি আমাকে ফলাফলগুলি দেয় না। আমি যখন pg_dumpকোনও প্রদত্ত টেবিলে করি তখন Permission denied for relation...:

GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup; 
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO backup; 
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES TO backup;

কোন সাহায্যের ব্যাপকভাবে প্রশংসা হবে!


উত্তর:


9

না, এটি সহজ (এখন যাইহোক)।

  1. নতুন ব্যবহারকারীর সাথে সংযোগের অনুমতি দিন

    GRANT CONNECT ON DATABASE mydb TO myReadolyUser;
  2. সমস্ত বর্তমান ডাটাবেস অবজেক্টে অনুমতি প্রদান করুন । এটি স্কিমা-নির্দিষ্ট and

    GRANT SELECT ON ALL TABLES IN SCHEMA mySchema TO myReadonlyUser;

    থেকে ডক্স , ALL TABLESসবকিছু আপনি চাই চাই অন্তর্ভুক্ত করা হয়েছে।

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

  3. তারপরে এখনও তৈরি হয়নি এমন বস্তুর জন্য ভবিষ্যতের সুযোগসুবিধা ALTER DEFAULT PRIVLEGESপ্রদান করা । SELECT

    ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema
    GRANT SELECT ON TABLES TO myReadonlyUser;

আমি লক্ষ্য করেছি যে, যখন চলমান ALTER DEFAULT PRIVILEGES ... myReadonlyUser, 2 অতিরিক্ত লাইন ডাম্প যোগ করা হয়: ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM root;। এর মতো শোনার অর্থ মূলটি নতুন টেবিলগুলিতে কিছু করতে সক্ষম হবে না। এটা কি সত্য?
dthor

এছাড়াও, যদি আপনার টেবিলগুলিতে bigintআপনার কেবলমাত্র GRANT SELECT ON ALL SEQUENCES
পঠন

6

সহজ এবং দুর্দান্ত উপায় হ'ল কেবল পঠনের অনুমতি নিয়ে একটি সুপারউসার তৈরি করা।

  • psqlপোস্টগ্রিজ বা অন্যান্য সুপারভাইজার হিসাবে লগইন করুন ।
  • নতুন সুপারভাইজার ভূমিকাটি তৈরি করুন এবং কেবল এটি পড়ার জন্য সেট করুন:

    CREATE USER backadm SUPERUSER  password '<PASS>';
    ALTER USER backadm set default_transaction_read_only = on;
    • <PASS>আপনার চয়নন পাসওয়ার্ড দ্বারা প্রতিস্থাপন করুন ।
    • আপনি চয়ন backadmব্যবহারকারী নাম ব্যবহার করে প্রতিস্থাপন করতে পারেন । (আমি করা backadmজন্য Backup Administrator)।
    • পাসওয়ার্ডের জন্য একক উদ্ধৃতি ভুলবেন না।

আপনি এখন এই ভূমিকাটি ব্যাকআপ নিতে ব্যবহার করতে পারেন।


6
Ewww। ব্যাকআপ করার জন্য একটি সুপারভাইজার? তিনি বিশেষভাবে কেবল পড়ার জন্য বলেছিলেন। এই ব্যবহারকারীর ডেটাবেসটিতে সীমাহীন অ্যাক্সেস থাকা এক SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITEবা ALTER USER backadm set default_transaction_read_only = off;দূরে।
ইভান ক্যারল

কেবলমাত্র লেনদেনগুলি পঠনযোগ্য তা বিবেচনা না করেই এই ব্যবহারকারী এখনও সারণী / স্কিমা / ডাটাবেসগুলি ফেলে দিতে সক্ষম হবেন।
ইগর মুখিন

4

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

SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE

পড়ুন 'PostgreSQL অধিকার ম্যানেজিং' উপস্থাপনা postgres সংযুক্ত উইকি আরো বিস্তারিত পদ্ধতি, একটা প্রশ্ন পোস্ট করা অনুরূপ জন্য।


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

3

ইভান ক্যারোলের সমাধানটি ব্যাক আপ করার পরে আমি এই ত্রুটিটি দেখতে পেয়েছি:

ত্রুটি: সম্পর্কের টেবিলের জন্য অনুমতি অস্বীকার করা হয়েছে

অন্য একটি অনুমতি অনুপস্থিত:

GRANT SELECT ON ALL SEQUENCES IN SCHEMA mySchema TO myReadonlyUser

এই অনুমতিটি যুক্ত করা আমাকে আমার কেবলমাত্র পঠনযোগ্য ব্যবহারকারীর সাথে ব্যাক আপ করতে সক্ষম করে।


2

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


ব্লগ পোস্টের সাথে কেবল লিঙ্ক করার পরিবর্তে, ব্লগ পোস্টটি লিঙ্ক- রটে ভুগলে সে ক্ষেত্রে আপনার উত্তরে কিছু বিবরণ যুক্ত করা উচিত (দেখুন en.wikedia.org/wiki/Link_rot )
ম্যাক্স ভার্নন

ব্লগপোস্টের মূল ধারণাটি হ'ল ALTER USER set default_transaction_read_only = on;এটি ব্যবহারকারীকে পরিবর্তন করতে বাধা দেয় না।
নীল রঙের

Ewww। ব্যাকআপ করার জন্য একটি সুপারভাইজার? তিনি বিশেষভাবে কেবল পড়ার জন্য বলেছিলেন। সেই ব্যবহারকারী হ'ল ট্রান্সএ্যাকশন রিড লিখন বা অ্যাল্টার ইউজার ব্যাকডেম সেট ডিফল্ট_ট্রান্সঅ্যাকশন_ড্রেইন = অফ; ডাটাবেসে সীমাবদ্ধ অ্যাক্সেস থেকে দূরে থাকুন।
ইভান ক্যারল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.