আমি এখানে কোনও শালীন গাইড, টিউটোরিয়াল বা ভিডিও সিরিজ কোথায় পাব?
ম্যানুয়ালটিতে আপনি সবকিছু খুঁজে পাবেন । নীচের লিঙ্কগুলি।
মঞ্জুর, বিষয়টি তুচ্ছ এবং কখনও কখনও বিভ্রান্তিকর নয়। এখানে ব্যবহারের ক্ষেত্রে একটি রেসিপি দেওয়া হয়েছে:
প্রণালী
আমি এটি কনফিগার করতে চাই যাতে কেবল 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
কমান্ডের একটি গুরুত্বপূর্ণ দিকটি হারিয়েছিলেন । অন্যথায় নির্দিষ্ট না করা হলে এটি বর্তমান ভূমিকার ক্ষেত্রে প্রযোজ্য:
ডিফল্ট সুবিধাগুলি কেবলমাত্র বর্তমান ডাটাবেসে প্রয়োগ হয়। সুতরাং আপনি ডিবি ক্লাস্টারে অন্য ডেটাবেসগুলিতে গণ্ডগোল করবেন না। ডকুমেন্টেশন:
বর্তমান ডাটাবেসে তৈরি সমস্ত বস্তুর জন্য
আপনি এর জন্য এবং (কেবল এবং নয় ) এর জন্য ডিফল্ট সুবিধাগুলিও সেট করতে চাইতে পারেন , তবে সেগুলি হয়ত প্রয়োজন হয় না।FUNCTIONS
TYPES
TABLES
SEQUENCES
এর জন্য ডিফল্ট সুবিধাগুলি 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
এই ক্ষেত্রে বিশেষাধিকার প্রত্যাহার মনে রাখবেন ।
সংশ্লিষ্ট
public
সিউডোরোলের সাথে। এটি এমন ভূমিকা হিসাবে ভাবা যেতে পারে যে প্রতিটি অন্যান্য ভূমিকা (ব্যবহারকারী, গোষ্ঠী - এগুলি সমস্ত একই) এর সদস্য। উদাহরণস্বরূপ, এটি থেকে সুবিধাগুলি অপসারণ করার চেষ্টা করুনREVOKE CREATE ON SCHEMA hostdb FROM public
। ডাটাবেস স্তরে অধিকার প্রত্যাহার করা, যেমনটি আপনি করেছেন কেবল কিছু ডাটাবেস-স্তরের অনুমতিগুলি অক্ষম করে, স্কিমায় বা টেবিলগুলিতে কোনও প্রভাব ফেলেনি।