আমি ভাবছি যে একজন নতুন তৈরি হওয়া ব্যবহারকারীকে একটি ডাটাবেসে সংযোগ করার পরে একটি টেবিল তৈরি করার অনুমতি দেওয়া হচ্ছে কেন? আমার একটি ডাটাবেস রয়েছে project2_core
:
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------+--------------+-----------+-------------+-------------+-------------------------------
postgres | postgres | SQL_ASCII | C | C |
project2_core | atm_project2 | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | project2=CTc/project2
template0 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(5 rows)
এ পর্যন্ত সব ঠিকই. এখন আমি একটি ব্যবহারকারী তৈরি:
postgres=# CREATE ROLE dietrich ENCRYPTED PASSWORD 'md5XXX' LOGIN NOCREATEROLE NOCREATEDB NOSUPERUSER
ঠিক আছে. আমি যখন ডাটাবেসের সাথে সংযোগ স্থাপন করার চেষ্টা করি তখন ব্যবহারকারীকে এটি করার অনুমতি দেওয়া হয় না:
$ psql -h localhost -p 5432 -U dietrich -W project2_core
Password for user dietrich:
psql: FATAL: permission denied for database "project2_core"
DETAIL: User does not have CONNECT privilege.
এটাই আমার প্রত্যাশা ছিল। এখন অদ্ভুত জিনিস শুরু। আমি ব্যবহারকারীকে প্রদান করি CONNECT
:
postgres=# GRANT CONNECT ON DATABASE project2_core TO dietrich;
GRANT
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
---------------+--------------+-----------+-------------+-------------+-------------------------------
postgres | postgres | SQL_ASCII | C | C |
project2_core | atm_project2 | UTF8 | de_DE.UTF-8 | de_DE.UTF-8 | project2=CTc/project2+
| | | | | dietrich=c/project2
template0 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(5 rows)
এবং আরও অনুদান ব্যতীত ব্যবহারকারীকে একটি সারণী তৈরি করার অনুমতি দেওয়া হয়েছে:
$ psql -h localhost -p 5432 -U dietrich -W project2_core
Password for user dietrich:
psql (9.2.3)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
project2_core=> create table adsf ();
CREATE TABLE
project2_core=> \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | adsf | table | dietrich
(1 row)
আমি প্রত্যাশা করতাম যে আমি স্পষ্টভাবে GRANT USAGE
স্কিমা এবং তারপরে GRANT SELECT
টেবিলগুলিতে করার আগে ব্যবহারকারীর কিছু করার অনুমতি নেই ।
আমার ভুল কোথায়? আমি কি ভুল করছি? আমি কীভাবে চাই তা অর্জন করতে পারি (যে কোনও নতুন ব্যবহারকারীকে সুস্পষ্টভাবে তার যথাযথ অধিকার দেওয়ার আগে কোনও কিছু করার অনুমতি দেওয়া হয় না)।
আমি হারিয়েছি, এবং আপনার সাহায্যের প্রশংসা করা হয়েছে :)
সম্পাদনা করুন @ ড্যানিয়েল-ভেরাইটের পরামর্শ অনুসরণ করে, আমি এখন ডেটাবেস তৈরি করার সাথে সাথেই সমস্ত প্রত্যাহার করি। ব্যবহারকারীর ডায়েটারিচকে আর কোনও টেবিল তৈরি করার অনুমতি নেই। ভাল. বাট : এখন, ডাটাবেসের মালিক, প্রকল্প 2 , একটি সারণী তৈরি করার অনুমতি নেই। এমনকি দেয়ার পর GRANT ALL PRIVILEGES ON DATABASE project2_core TO project2
এবং GRANT ALL PRIVILEGES ON SCHEMA public TO project2
, আমি কোনো ত্রুটির সম্মুখীন হয়েছেন ত্রুটি: কোন স্কিমা তৈরি করার জন্য নির্বাচন করা হয়েছে , এবং যখন আমি বিশেষভাবে চেষ্টা CREATE TABLE public.WHATEVER ();
, আমি পেতে ত্রুটি: অনুমতি স্কিমা প্রকাশ্য জন্য অস্বীকৃত । আমি কি ভুল করছি?
REVOKE ALL ON DATABASE project2_core FROM PUBLIC;
। এর কোনও প্রভাব পড়ল না কেন?