it-swarm.asia

تم رفض الإذن بالعلاقة

حاولت تشغيل أمر بسيط مزود:

select * from site_adzone;

وحصلت على هذا الخطأ

ERROR:  permission denied for relation site_adzone

ماذا يمكن أن تكون المشكلة هنا؟

حاولت أيضا أن تفعل اختيار للجداول الأخرى وحصلت على نفس المشكلة. حاولت أيضًا القيام بذلك:

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

لكنني حصلت على هذا الرد من وحدة التحكم

WARNING:  no privileges were granted for "jerry"

هل لديك فكرة ما يمكن أن يكون الخطأ؟

269
Boban

منحة على قاعدة البيانات ليست ما تحتاجه. منح على الجداول مباشرة.

يتم استخدام منح الامتيازات في قاعدة البيانات في الغالب لمنح أو إلغاء امتيازات الاتصال. يسمح لك هذا بتحديد من يمكنه فعل الأشياء في قاعدة البيانات إذا كان لديهم أذونات أخرى كافية.

تريد بدلا من ذلك:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

هذا سيعتني بهذه القضية.

319
Chris Travers

نشر إجابة Ron E للحصول على امتيازات المنحة في جميع الجداول لأنها قد تكون مفيدة للآخرين.

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
199
sag

الاتصال بقاعدة البيانات الصحيحة أولاً ، ثم قم بتشغيل:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
53
user2757813
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;
21
Klanjabrik

لمنح أذونات لكافة الجداول الموجودة في المخطط ، استخدم:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>

لتحديد الأذونات الافتراضية التي سيتم تطبيقها على الجداول المستقبلية ، استخدم:

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;

مثلا.

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;

إذا كنت تستخدم أعمدة SERIAL أو BIGSERIAL ، فمن المحتمل أنك تريد أن تفعل الشيء نفسه بالنسبة SEQUENCES ، وإلا فسوف تفشل INSERT الخاص بك ( Postgres 10 IDENTITY لا تعاني من هذه المشكلة ، وتوصي باستخدامها في أنواع SERIAL ) ، أي.

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;

راجع أيضًا إجابتي على أذونات PostgreSQL لتطبيق الويب للحصول على مزيد من التفاصيل والبرنامج النصي القابل لإعادة الاستخدام.

المرجع:

GRANT

تغيير خصوصية الإمتيازات

16
isapir

الخطوة الأولى و المهمة هي الاتصال بـ db:

psql -d yourDBName

2 خطوة ، منح الامتيازات

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;
11
zond

يحدث هذا بشكل متكرر عند إنشاء جدول أثناء نشر المستخدم ثم محاولة الوصول إليه كمستخدم عادي. في هذه الحالة ، من الأفضل تسجيل الدخول كـ postgres مرة أخرى واستخدام ALTER TABLE OWNER TO someuser لتغيير ملكية الجدول للمستخدم الذي سيستخدم الجدول.

4
Bruce

تأكد من تسجيل الدخول إلى psql كمالك الجداول. لمعرفة من يملك الجداول ، استخدم \dt

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

ثم يمكنك تشغيل المنح

4
Brian McCall