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


14

পোস্টগ্র্রেএসকিউএল-এ অনুমতি নির্ধারণের বিষয়ে আমি কিছুটা বিভ্রান্ত।

আমার এই ভূমিকাগুলি:

                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 admin     | Superuser, Create role, Create DB, Replication | {}
 meltemi   | Create role, Create DB                         | {rails}
 rails     | Create DB, Cannot login                        | {}
 myapp     |                                                | {rails}

এবং ডাটাবেস:

                                    List of databases
        Name         | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
---------------------+--------+----------+-------------+-------------+-------------------
 myapp_production    | rails  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 ...

ব্যবহারকারীর ডাটাবেস যুক্ত এবং রেকর্ড মুছে ফেলার জন্য myappকোন সমস্যা myapp_productionনেই। আমি meltemiএকই ডাটাবেসটি জিজ্ঞাসা করতে সক্ষম হতে চাই । সুতরাং, আমি এমন একটি ভূমিকা তৈরি করেছি railsযা ডাটাবেসের মালিকানাধীন এবং উভয় meltemiএবং myappসদস্যকে তৈরি করে rails। তবে আমি এখনও permission denied for relationত্রুটি পেয়েছি । Meltemiস্কিমাটি দেখতে পারে তবে ডিবিকে জিজ্ঞাসা করতে পারে না।

আমি কেবল লক্ষ্য করেছি ( \dtকমান্ড সহ) যে myappটেবিলগুলির মালিক:

             List of relations
 Schema |       Name        | Type  | Owner 
--------+-------------------+-------+-------
 public | events            | table | myapp
 public | schema_migrations | table | myapp
 ...
 public | users             | table | myapp
 ...

টেবিলগুলি একটি ওআরএম (রেলের 'অ্যাক্টিভেকর্ড মাইগ্রেশন) এর মাধ্যমে তৈরি করা হয়েছিল।

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

কোন সাহায্যের জন্য ধন্যবাদ। দুঃখিত, আমি জানি এটি একটি খুব প্রাথমিক প্রশ্ন তবে আমি নিজেই উত্তরটি সন্ধান করতে পারিনি।

উত্তর:


4

আমি এই সম্পর্কে লিখেছিলাম সার্ভারফল্টের অন্য ব্যবহারকারীর পোস্টগ্র্যাস্কিল ডাটাবেসে অধিকার প্রদানের উত্তর সম্পর্কে ।

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

সুতরাং আপনার ক্ষেত্রে, নতুন railsনামটি বলার জন্য পেয়ে যায় myapp_users, তারপরে আপনি একটি নতুন লগইন ভূমিকা (ব্যবহারকারী) railsএবং নামটি তৈরি করেন GRANT myapp_users TO rails। এখন আপনি একটি GRANT myapp_users TO meltemi। নতুন railsঅ্যাকাউন্ট এবং meltemiব্যবহারকারী উভয়েরই এখন পুরানো railsঅ্যাকাউন্টের অধিকার রয়েছে have

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


ঠিক আছে, আপনার লিঙ্কিত পোস্টটি পড়ুন; খুব উপকারী! এখন, আমি যদি জিনিসগুলি ঠিকঠাক বুঝতে পারি তবে আমার ধারণা আপনি উপরের myappপরিবর্তে ব্যবহার করতে চেয়েছিলেন rails? কারণ myappটেবিলগুলির মালিক (আমি কখনই এটি নির্দিষ্ট করেছিলাম না, স্থানান্তর থাকতে হবে)। যাই হোক, এটা জ্ঞান যদি আমি নতুন নামকরণ করা sorta হবে myappথেকে myapp_groupএবং তারপর একটি নতুন ব্যবহারকারী তৈরি myappযা পাগল অ্যাপ্লিকেশন ডিবি সাথে সংযোগ স্থাপনের জন্য ব্যবহার করেন। করুন myappএবং বিদ্যমান meltemi, উভয় সদস্যদের myapp_groupভূমিকা। তবে আমি যখন পরবর্তী মাইগ্রেশন চালাই তখন কী হয়। এটিকে myappআবারও নতুন করে সমস্যা তৈরির মালিকানা দেওয়া হবে না ?!?
মেলতেমি

1
আপনার অবশ্যই বুঝতে হবে পোস্টগ্র্রেএসকিউএলটির কেবল roles(সংস্করণ 8.1) রয়েছে। পদগুলি userএবং grouphistoricতিহাসিক কারণে এবং সামঞ্জস্যের জন্য রাখা হয়। লগইন সুবিধা ছাড়াই মূলত একটি "গ্রুপ" একটি ভূমিকা। অন্য একজন "ব্যবহারকারী" হলেও আপনি মঞ্জুরি myappদিতে meltemiপারেন myappএখানে ম্যানুয়ালটি পড়ে শুরু করুন
এরউইন ব্র্যান্ডসটেটার

আমি পোস্টগ্র্রেসে rolesবনাম groupsবনাম usersবিভাজন বুঝতে পারি , কমপক্ষে আমার মনে হয় আমি এটি করি। উপরের ভুল (এবং বিভ্রান্তিকর) পরিভাষাটি ব্যবহার করে দুঃখিত Sorry তবে আমি এখনও বুঝতে পারি না যে কীভাবে আমার ডাটাবেস সেট আপ করবেন যাতে একটি লগইন ভূমিকা OWNS ডাটাবেস এবং দুটি লগইন ভূমিকা myappএবং meltemiউভয়েরই সম্পূর্ণ অ্যাক্সেস থাকতে পারে। এই ভূমিকাগুলির মধ্যে একটি রিল স্থানান্তরmyapp চলবে যা অনিবার্যভাবে ?, নতুন সারণী তৈরি করবে যা আবার লগইন ব্যবহারকারীর মালিকানাধীন রয়েছে । আমার কি কেবল একটি 'সদস্য' তৈরি করা এবং এটি দিয়ে করা উচিত? তবে এটাকে শুধু ক্লডগি মনে হচ্ছে ... না?!? myappmeltemimyapp
মেলতেমি

1
@Meltemi: আপনি সব বিশেষাধিকার যে দান করতে চান তাহলে myappকরতে ঝুলিতে meltemi, তাহলে সেই করতে ডান জিনিস হবে। আপনি যদি meltemiকেবল সুবিধাগুলির একটি উপসেট পেতে চান তবে তা হবে না। তারপরে বিশেষাধিকারের সেটটি ধরে রাখতে একটি গ্রুপ ভূমিকা তৈরি করুন এবং এটি মঞ্জুর করুন meltemi। আপনি সম্ভবত এই সম্পর্কিত সম্পর্কিত প্রশ্নে আগ্রহী হবেন । আমি ব্যাখ্যা দিয়ে উত্তর দিয়েছিDEFAULT PRIVILEGES
এরউইন ব্র্যান্ডসেটেটার

@ মেলতেমি হ্যাঁ, যথারীতি রেলগুলি স্থানান্তরিত করে ছবিটিকে জটিল করে তোলে। রেলগুলি সত্যই আপনাকে মাইগ্রেশন চালাতে একটি পৃথক ব্যবহারকারী অ্যাকাউন্ট নির্দিষ্ট করতে দেওয়া উচিত । আপনি সম্ভবত SET ROLEআপনার স্থানান্তর শুরুতে এবং একটি RESET ROLEশেষের দিকে একটি কমান্ড যুক্ত করতে পারেন , তবে আমি সম্পূর্ণভাবে সুসংগতভাবে চালাতে রেলসকে বিশ্বাস করব না। এরউইনের ডান; এক্ষেত্রে সর্বোত্তম কাজটি হবে GRANTব্যবহারকারী রেলের পক্ষে দ্বিতীয় ব্যবহারকারীকে দ্বিতীয় হিসাবে একটি গ্রুপ হিসাবে ব্যবহার করে অন্য ব্যবহারকারীকে মালিকানা দেয় ownership
ক্রেগ রিঞ্জার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.