কোনও ব্যবহারকারীর জন্য সমস্ত সারণীতে অ্যাক্সেস মঞ্জুরি


151

আমি পোস্টগ্র্রেসে নতুন এবং আমাদের মাইএসকিউএল ডেটাবেসগুলি স্থানান্তরিত করার চেষ্টা করছি। মাইএসকিউএল আমি প্রদান করতে পারেন SELECT, UPDATE, INSERT, এবং DELETEএকটি কম সুবিধাপ্রাপ্ত ব্যবহারকারী সুযোগ সুবিধা ও একটি নির্দিষ্ট ডাটাবেসের মধ্যে সমস্ত টেবিল প্রয়োগ করতে ঐ অনুদান সক্ষম করুন। পোস্টগ্রিসে অবশ্যই আমি কিছু মিস করছি কারণ দেখে মনে হচ্ছে যে একবারে প্রতিটি টেবিলের জন্য আমাকে এই সুযোগগুলি দিতে হবে। অনেকগুলি ডাটাবেস এবং ডাটাবেস প্রতি শত শত টেবিল যা কেবলমাত্র মাটি থেকে নামার জন্য একটি কঠিন কাজ বলে মনে হচ্ছে। তদ্ব্যতীত, একবার কোনও ডাটাবেস চালু হয়ে গেলে, সারণী যুক্ত করা প্রায়শই পর্যাপ্ত হয় যে আমি একেবারে প্রয়োজনীয় না হলে প্রত্যেকবার অনুমতি দিতে চাই না।

এটি কীভাবে সফল হয়?

উত্তর:


175

প্রথমত, কোয়েরি চালাতে আপনাকে ডাটাবেসের সাথে সংযোগ করতে সক্ষম হতে হবে। এটি দ্বারা অর্জন করা যেতে পারে

REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;

GRANT CONNECT
ON DATABASE database_name 
TO user_name;

REVOKEপ্রয়োজনীয় কারণ

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

আপনি যদি সত্যই আপনার ব্যবহারকারীকে ডিএমএল বিবৃতিতে সীমাবদ্ধ রাখতে চান তবে আপনার আরও কিছু করার দরকার আছে:

REVOKE ALL
ON ALL TABLES IN SCHEMA public 
FROM PUBLIC;

GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA public 
TO user_name;

এগুলি ধরে নেওয়া হয় যে আপনার কেবলমাত্র একটি স্কিমা থাকবে (যা ডিফল্টরূপে 'পাবলিক' নাম দেওয়া হয়েছে)।

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

ALTER DEFAULT PRIVILEGES 
    FOR ROLE some_role   -- Alternatively "FOR USER"
    IN SCHEMA public
    GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO user_name;

এখানে, some_roleএমন একটি ভূমিকা রয়েছে যা সারণীগুলি তৈরি করে, আর সেই সুযোগটি user_nameযিনি সুযোগ পান। এটি সংজ্ঞায়িত করে আপনাকে some_roleএটির সদস্য হিসাবে অথবা লগ ইন করতে হবে।

এবং, অবশেষে, সিকোয়েন্সগুলির জন্য আপনাকে একই কাজটি করতে হবে (এটি নির্দেশ করার জন্য প্লাইডফ্যানকে ধন্যবাদ) - এখানে এটি USAGEআপনার প্রয়োজন বিশেষত্ব ।


1
ধন্যবাদ, FOR some_roleপরে তৈরি হওয়া আমার টেবিলগুলির জন্য এটি তৈরি করতে আমি যে মূল অংশটি অনুপস্থিত ছিল তা ছিল। তবে আমার হিসাবে লগ ইন করতে হবে না some_role, আমি ডিফল্ট অ্যাডমিন postgresব্যবহারকারী হিসাবে ক্যোয়ারী চালিয়ে দিলে এটিও কাজ করে ।
জাস্টামার্টিন

54

ধরে নিই যে আপনি তাদের সমস্ত সুযোগসুবিধা দিতে চান - এটি করুন:

grant all privileges on database dbname to dbuser;

dbnameআপনার ডাটাবেসের নাম কোথায় এবং dbuserব্যবহারকারীর নাম।


44
এই নিম্নলিখিত বিশেষাধিকার যোগ হবে ডাটাবেসের : CREATE, CONNECT, TEMPORARY। টেবিলগুলিতে কোনও সুযোগ সুবিধা নেই।
dezso

13
সমস্ত টেবিলের জন্য অনুরূপ আদেশ হবেGRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dbuser;
দোলান অ্যান্টুচি

5
আমি এটি GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO dbuser;
পাওলো

18

ডাটাবেসের মধ্যে সমস্ত টেবিলগুলিতে সমস্ত সুযোগ-সুবিধাগুলি মঞ্জুর করে অর্জন করা হয়

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema_name> TO <username>;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA <schema_name> TO <username>;

15

পোস্টগ্র্রেএসকিউএল-এ খুব নতুন থাকায় আমি এখানে কিছু ভুল করছি may তবে এটি আমার জন্য সমস্যার প্রথম অংশটি সমাধান করেছে - সমস্ত বিদ্যমান টেবিলগুলিতে সুবিধা নির্ধারণ করে setting

নতুন টেবিলগুলিতে আমার ব্যবহারকারীর জন্য সঠিকভাবে অনুমতি স্থাপনের জন্য, যেগুলি তৈরি করা হয়েছে আমাকে ব্যবহারকারীর জন্য ডিফল্ট অনুমতিগুলি সেট করতে হবে:

ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, INSERT, UPDATE, DELETE ON tables TO user_name;

ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, USAGE ON sequences TO user_name;

2
--Create User

CREATE USER my_user_test WITH LOGIN NOSUPERUSER NOCREATEDB  NOCREATEROLE    INHERIT NOREPLICATION   CONNECTION LIMIT -1 PASSWORD 'xxxxxxx';

-- Grant connect to my data base

GRANT CONNECT ON DATABASE my_db_test TO my_user_test;

-- Grant usage the schema

GRANT USAGE ON SCHEMA my_sch_test TO my_user_test ;

-- Grant all table for SELECT, INSERT, UPDATE, DELETE

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA my_sch_test TO my_user_test;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.