ডেটাবেস বনাম শেচেমায় কীভাবে ব্যবহারকারীদের জন্য ডিফল্ট প্রাইভেলিজ পরিচালনা করবেন?


48

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

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

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

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

আমি এখন পর্যন্ত যা চেষ্টা করেছি তা এখানে ( psql'পোস্টগ্রিসের মধ্যে থেকে '):

CREATE DATABASE hostdb;
REVOKE ALL ON DATABASE hostdb FROM public;
\connect hostdb
CREATE SCHEMA hostdb;
CREATE USER hostdb_admin WITH PASSWORD 'youwish';
CREATE USER hostdb_mgr   WITH PASSWORD 'youwish2';
CREATE USER hostdb_usr WITH PASSWORD 'youwish3';

GRANT ALL PRIVILEGES ON DATABASE hostdb TO hostdb_admin;
GRANT CONNECT ON DATABASE hostdb TO hostdb_mgr, hostdb_usr;
ALTER DEFAULT PRIVILEGES IN SCHEMA hostdb GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO hostdb_mgr;
ALTER DEFAULT PRIVILEGES IN SCHEMA hostdb GRANT SELECT ON TABLES TO hostdb_usr;

তবে আমি অভিজাত শব্দার্থ পাচ্ছি না। আমি এটি কনফিগার করতে চাই যাতে কেবল hostdb_adminটেবিলগুলি তৈরি করতে (এবং ড্রপ এবং পরিবর্তন করতে পারে); hostdb_mgrপড়তে সন্নিবেশ, আপডেট এবং ডিফল্টরূপে সব টেবিলের উপর মুছে দিতে পারেন; এবং hostdb_usrকেবলমাত্র সমস্ত টেবিল (এবং দর্শন) পড়তে পারে।

আমি যখন এটি চেষ্টা করেছি তখন আমি দেখতে পেলাম যে আমি hostdbএই ব্যবহারকারীর মতো কোনও হিসাবে সারণী তৈরি করতে সক্ষম হয়েছি ; তবে, প্রতিটি ব্যবহারকারীর জন্য, আমি কেবল সেই ব্যবহারকারীর দ্বারা তৈরি টেবিলগুলি পড়তে বা সংশোধন করতে পারি - যদি না আমি স্পষ্ট ব্যবহার করি GRANT

আমি অনুমান করছি যে এর মধ্যে কিছু অনুপস্থিত CREATE DATABASEএবং এর CREATE SCHEMAপ্রয়োগ করার SCHEMAজন্য কিছু আছে DATABASE?

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

আমি এখানে কোনও শালীন গাইড, টিউটোরিয়াল বা ভিডিও সিরিজ কোথায় পাব?


2
আমি মনে করি (কমপক্ষে একটি অংশ) আপনার সমস্যা publicসিউডোরোলের সাথে। এটি এমন ভূমিকা হিসাবে ভাবা যেতে পারে যে প্রতিটি অন্যান্য ভূমিকা (ব্যবহারকারী, গোষ্ঠী - এগুলি সমস্ত একই) এর সদস্য। উদাহরণস্বরূপ, এটি থেকে সুবিধাগুলি অপসারণ করার চেষ্টা করুন REVOKE CREATE ON SCHEMA hostdb FROM public। ডাটাবেস স্তরে অধিকার প্রত্যাহার করা, যেমনটি আপনি করেছেন কেবল কিছু ডাটাবেস-স্তরের অনুমতিগুলি অক্ষম করে, স্কিমায় বা টেবিলগুলিতে কোনও প্রভাব ফেলেনি।
dezso

@ ডেজো: স্কিমার জন্য ডিফল্ট সুবিধাগুলি সম্পর্কে একটি ভুল ধারণা থাকতে পারে। কেবলমাত্র ডিফল্ট স্কিমা publicসহ সুবিধার সাথে আসে PUBLIC। তা ছাড়া নতুন স্কিমার জন্য কোনও ডিফল্ট সুযোগ নেই । সুতরাং এটি প্রদর্শিত ব্যবহারের ক্ষেত্রে প্রভাব ফেলবে না। আমার উত্তরের অধ্যায়টি দেখুন।
এরউইন ব্র্যান্ডস্টেটর

উত্তর:


86

আমি এখানে কোনও শালীন গাইড, টিউটোরিয়াল বা ভিডিও সিরিজ কোথায় পাব?

ম্যানুয়ালটিতে আপনি সবকিছু খুঁজে পাবেন । নীচের লিঙ্কগুলি।
মঞ্জুর, বিষয়টি তুচ্ছ এবং কখনও কখনও বিভ্রান্তিকর নয়। এখানে ব্যবহারের ক্ষেত্রে একটি রেসিপি দেওয়া হয়েছে:

প্রণালী

আমি এটি কনফিগার করতে চাই যাতে কেবল hostdb_adminটেবিলগুলি তৈরি করতে (এবং ড্রপ এবং পরিবর্তন করতে পারে); পড়তে সন্নিবেশ, আপডেট এবং ডিফল্টরূপে সব টেবিলের উপর মুছে দিতে পারেন; এবং কেবলমাত্র সমস্ত টেবিল (এবং দর্শন) পড়তে পারে।
hostdb_mgr
hostdb_usr

সুপারভাইজার হিসাবে postgres:

CREATE USER schma_admin WITH PASSWORD 'youwish';
-- CREATE USER schma_admin WITH PASSWORD 'youwish' CREATEDB CREATEROLE; -- see below
CREATE USER schma_mgr   WITH PASSWORD 'youwish2';
CREATE USER schma_usr   WITH PASSWORD 'youwish3';

আপনি যদি আরও শক্তিশালী প্রশাসক চান যা ডেটাবেস এবং ভূমিকাগুলি পরিচালনা করতে পারে তবে ভূমিকা বৈশিষ্ট্য CREATEDBএবংCREATEROLE উপরের অংশগুলি যুক্ত করুন ।

প্রতিটি ভূমিকাকে পরবর্তী উচ্চ স্তরে মঞ্জুর করুন, সুতরাং সমস্ত স্তরগুলি সর্বনিম্ন পরবর্তী নিম্ন স্তর (ক্যাসকেডিং) থেকে সুবিধাগুলির সেটকে "উত্তরাধিকারী" করে:

GRANT schma_usr TO schma_mgr;
GRANT schma_mgr TO schma_admin;

CREATE DATABASE hostdb;
REVOKE ALL ON DATABASE hostdb FROM public;  -- see notes below!

GRANT CONNECT ON DATABASE hostdb TO schma_usr;  -- others inherit

\connect hostdb  -- psql syntax

আমি স্কিমাটির নাম দিচ্ছি schma( hostdbযা বিভ্রান্তিকর হবে না)। যে কোনও নাম বাছাই করুন। বৈকল্পিকভাবে করতে schma_adminস্কিমা মালিক:

CREATE SCHEMA schma AUTHORIZATION schma_admin;

SET search_path = schma;  -- see notes

ALTER ROLE schma_admin IN DATABASE hostdb SET search_path = schma; -- not inherited
ALTER ROLE schma_mgr   IN DATABASE hostdb SET search_path = schma;
ALTER ROLE schma_usr   IN DATABASE hostdb SET search_path = schma;

GRANT USAGE  ON SCHEMA schma TO schma_usr;
GRANT CREATE ON SCHEMA schma TO schma_admin;

ALTER DEFAULT PRIVILEGES FOR ROLE schma_admin
GRANT SELECT                           ON TABLES TO schma_usr;  -- only read

ALTER DEFAULT PRIVILEGES FOR ROLE schma_admin
GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLES TO schma_mgr;  -- + write, TRUNCATE optional

ALTER DEFAULT PRIVILEGES FOR ROLE schma_admin
GRANT USAGE, SELECT, UPDATE ON SEQUENCES TO schma_mgr;  -- SELECT, UPDATE are optional 

জন্য and drop and alterনিচের নোট দেখুন।

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

ভিউগুলি বিশেষ। এক জনের জন্য:

... (তবে নোট যাতে ALL TABLESদর্শন এবং বিদেশী সারণী অন্তর্ভুক্ত বলে মনে করা হয়)।

এবং আপডেটযোগ্য ভিউগুলির জন্য :

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

ট্রিগারগুলিও বিশেষ। আপনি TRIGGERটেবিলের উপর বিশেষাধিকার প্রয়োজন , এবং:

তবে আমরা ইতিমধ্যে এই প্রশ্নের পরিধিটি প্রসারিত করছি ...

গুরুত্বপূর্ণ নোট

মালিকানা

আপনি যদি schma_admin(একা) টেবিলগুলি ড্রপ এবং পরিবর্তন করতে দিতে চান তবে ভূমিকাটি সমস্ত অবজেক্টের নিজস্ব করুনডকুমেন্টেশন:

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

ALTER TABLE some_tbl OWNER TO schma_admin;

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

পূর্ব বিদ্যমান বস্তু

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

যদি আপনি এমন কোনও ভূমিকায় অবজেক্ট তৈরি করেন DEFAULT PRIVILEGESযা সুপারভাইজারের মতো সেট করে না postgres। মালিকানা reassign schma_adminএবং ম্যানুয়ালি বিশেষাধিকার সেট - বা সেট DEFAULT PRIVILEGESজন্য postgresপাশাপাশি: (যখন ডান ডিবি সংযুক্ত!)

ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT ...  -- etc.

ডিফল্ট সুবিধা

আপনি ALTER DEFAULT PRIVILEGESকমান্ডের একটি গুরুত্বপূর্ণ দিকটি হারিয়েছিলেন । অন্যথায় নির্দিষ্ট না করা হলে এটি বর্তমান ভূমিকার ক্ষেত্রে প্রযোজ্য:

ডিফল্ট সুবিধাগুলি কেবলমাত্র বর্তমান ডাটাবেসে প্রয়োগ হয়। সুতরাং আপনি ডিবি ক্লাস্টারে অন্য ডেটাবেসগুলিতে গণ্ডগোল করবেন না। ডকুমেন্টেশন:

বর্তমান ডাটাবেসে তৈরি সমস্ত বস্তুর জন্য

আপনি এর জন্য এবং (কেবল এবং নয় ) এর জন্য ডিফল্ট সুবিধাগুলিও সেট করতে চাইতে পারেন , তবে সেগুলি হয়ত প্রয়োজন হয় না।FUNCTIONSTYPESTABLESSEQUENCES

এর জন্য ডিফল্ট সুবিধাগুলি PUBLIC

মঞ্জুরিপ্রাপ্ত ডিফল্ট সুবিধাগুলি কারও কারও কাছে অতিরিক্ত PUBLICএবং অতিরিক্ত বিবেচিত। ডকুমেন্টেশন:

পোস্টগ্র্রেএসকিউএল কিছু ধরণের অবজেক্টগুলিতে ডিফল্ট সুযোগ দেয় PUBLICটেবিল, কলাম, স্কিমা বা টেবিল স্পেসগুলিতে ডিফল্টরূপে কোনও সুযোগ-সুবিধা দেওয়া হয় না PUBLICঅন্যান্য ধরণের জন্য, মঞ্জুরিপ্রাপ্ত ডিফল্ট সুযোগগুলি PUBLICনিম্নরূপ: CONNECTএবং CREATE TEMP TABLEডাটাবেসের জন্য; EXECUTEকার্যাবলী জন্য অধিকার; এবং USAGE ভাষার জন্য বিশেষাধিকার।

বোল্ড জোর আমার। সাধারণত উপরের এক কমান্ডটি সমস্ত কিছুর জন্য যথেষ্ট:

REVOKE ALL ON DATABASE hostdb FROM public;

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

\connect template1
REVOKE ALL ON SCHEMA public FROM public;

সুবিধা TEMP

যেহেতু আমরা এ hostdbথেকে সমস্ত সুযোগ-সুবিধাগুলি বাতিল করে দিয়েছি PUBLIC, নিয়মিত ব্যবহারকারীরা অস্থায়ী টেবিল তৈরি করতে পারবেন না যতক্ষণ না আমরা স্পষ্টভাবে এটির অনুমতি না দিই। আপনি এটি যুক্ত করতে বা নাও চাইতে পারেন:

GRANT TEMP ON DATABASE hostdb TO schma_mgr;

search_path

সেট করতে ভুলবেন না search_path। যদি আপনি কেবল ক্লাস্টারে একটি ডাটাবেস পেয়ে থাকেন তবে আপনি কেবলমাত্র বিশ্বব্যাপী ডিফল্ট সেট করতে পারবেন postgresql.conf। অন্য (সম্ভবত আরও বেশি) এটিকে ডাটাবেসের সম্পত্তি হিসাবে সেট করুন, বা কেবল জড়িত ভূমিকা বা উভয়ের সংমিশ্রণের জন্য। বিবরণ:

আপনি schma, publicযদি এটির পাশাপাশি পাবলিক স্কিমা ব্যবহার করেন বা এমনকি (কম সম্ভাব্য) ব্যবহার করতে চান তবে আপনি এটি সেট করতে চাইতে পারেন $user, schma, public...

একটি বিকল্প হ'ল ডিফল্ট স্কিমা "পাবলিক" ব্যবহার করা যা search_pathআপনি এটি পরিবর্তন না করলে ডিফল্ট সেটিংসের সাথে কাজ করা উচিত । PUBLICএই ক্ষেত্রে বিশেষাধিকার প্রত্যাহার মনে রাখবেন ।

সংশ্লিষ্ট


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

@ ডেনিসমাতাফোনভ: সুপারউজারদের সমস্ত সুবিধা স্বয়ংক্রিয়ভাবে রয়েছে। আমি আপনাকে আপনার মামলার সুনির্দিষ্ট বিবরণ দিয়ে একটি নতুন প্রশ্ন শুরু করার পরামর্শ দিচ্ছি। মন্তব্য জায়গা নয়। আপনি সবসময় প্রসঙ্গে প্রাসঙ্গিক প্রশ্ন / উত্তরগুলির সাথে লিঙ্ক করতে পারেন।
এরউইন ব্র্যান্ডসটেটার

হ্যাঁ, সুপারউসারদের সমস্ত অ্যাক্সেস রয়েছে তবে আপনি তাদের ডিফল্ট সুবিধাগুলি সাধারণ করতে পারবেন না। স্কিমাতে কোনও ভূমিকার জন্য ডিফল্ট সুবিধাগুলি নির্ধারণ করা সত্যিই চমৎকার হবে এবং স্কিমায় সারণী তৈরি করার সাথে সাথে সেই সমস্ত খেলোয়াড় ভূমিকার সমস্ত সদস্যদের জন্য প্রয়োগ করতে হবে। উদাহরণস্বরূপ, "ইঞ্জিনিয়ারিং টিমের যে কেউ এই স্কিমাতে তৈরি যে কোনও টেবিলগুলি প্রতিবেদক দলের যে কেউ দ্বারা পঠনযোগ্য হবে তা নিশ্চিত করুন" say সংক্ষেপে, আমি চাই একটি টেবিল তৈরির ভূমিকার সদস্যরা এটির ডিফল্ট সুবিধাগুলির উত্তরাধিকারী হয়।
সংযুক্তিবিদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.