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


12

আমি পিএসকিএলে নিম্নলিখিত এসকিউএল চালিয়েছি:

CREATE USER bspu LOGIN;

CREATE DATABASE bsp OWNER bspu;

GRANT ALL PRIVILEGES ON DATABASE bsp TO bspu;

\c bsp

CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  client_id VARCHAR(20) NOT NULL,
  api_key VARCHAR(100) NOT NULL,
  api_secret VARCHAR(100) NOT NULL,
  auth_token VARCHAR(128) NOT NULL
);

আমি যখন লগইন করি bspuএবং usersটেবিলটি জিজ্ঞাসা করার চেষ্টা করি তখন ত্রুটিটি পাই:

permission denied for relation users

আমি দৌড়ানোর চেষ্টা করেছি:

ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO bspu;

তবে তাতে কোনও লাভ হয় না। আমি কি ভুল করছি? কেন ডাটাবেসের মালিকের নিজস্ব ডাটাবেস অনুসন্ধানের অনুমতি নেই?

সম্পাদনা: আমি bspuআপাতত সুপারভাইজারে আপগ্রেড করেছি , তাই আমি কাজ চালিয়ে যেতে পারি। আরও নির্দেশিকা প্রশংসা।


\dt "users"শো আউটপুট কি করে ?
বিএম

@ বিএমএ শুধুমাত্র আমার প্রধান প্রধান তালিকাভুক্ত করা হয়।
যদি __ নাম__ না হয়

আপনি কি ব্যবহারকারী হিসাবে প্রাথমিক কমান্ড চালানো? SELECT session_user, current_userআপনার স্ক্রিপ্টের শীর্ষে আপনি কী পাবেন ? এবং আপনার পোস্টগ্রিজ সংস্করণটি কী?
এরউইন ব্র্যান্ডসটেটার

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

উত্তর:


22

DEFAULT PRIVILEGESবিদ্যমান বস্তুর জন্য অনুমতি পরিবর্তন করবেন না । এগুলি সদ্য নির্মিত বস্তুর জন্য এবং কেবলমাত্র তাদের নিজস্ব বিশেষ ভূমিকার জন্য এটি ডিফল্ট বিশেষাধিকার। চলমান অবস্থায় আপনি যদি ভূমিকাটি সংজ্ঞায়িত না করেন তবে এটি বর্তমান ভূমিকার সাথে ডিফল্ট হয় ( বিবৃতি কার্যকর করার সময়) ।ALTER DEFAULT PRIVILEGESALTER DEFAULT PRIVILEGES

এছাড়াও, যেহেতু আপনি একটি serialকলাম ব্যবহার করছেন যা একটি তৈরি করে SEQUENCE, আপনি পাশাপাশি সিকোয়েন্সগুলির জন্য ডিফল্ট অধিকারও সেট করতে চাইবেন।

কমান্ডটি চালানোর আগে আপনি যে ব্যবহারকারীর সাহায্যে অবজেক্ট তৈরি করেছেন তা চালান CREATE:

ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON TABLES TO bspu;
ALTER DEFAULT PRIVILEGES [ FOR ROLE my_create_role] GRANT ALL ON SEQUENCES TO bspu;

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

জন্য বিদ্যমান বস্তু আপনার কাছে এই "ব্যাচ" ফর্ম আগ্রহী হতে পারেন GRANTকমান্ড :

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO bspu;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO bspu;

এসও সম্পর্কিত এই সম্পর্কিত প্রশ্নের অধীনে আরও:


1
উল্লিখিত বাগটি এখনও পিজএডমিন ৪ এ অব্যাহত রয়েছে, দেখুন redmine.postgresql.org/issues/4685 , যা redmine.postgresql.org/issues/4256 এর
dpprdan

-1
This is working for me after some research. psql (9.6.12)

-- login to postgres database server as postgres user.
ssh <user>>@hostname.<domain>>.com
sudo su postgres
id
psql
postgres=# create user sentry_read with login password 'sentry_read';
postgres=# du+
postgres=# \l+
-- **very important: make sure we should connect required database before we grant to user.**
postgres=# \c sentry
postgres=# \dt
sentry=# \dp SENTRY_VERSION
sentry=# select * from "SENTRY_VERSION";
sentry=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO sentry_read;
postgres=# \q

[user@hostname ~]$ psql -U sentry_read -d sentry -h hostname.<domain>>.com -W
sentry=> select * from "SENTRY_VERSION";
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.