حاولت تشغيل أمر بسيط مزود:
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"
هل لديك فكرة ما يمكن أن يكون الخطأ؟
منحة على قاعدة البيانات ليست ما تحتاجه. منح على الجداول مباشرة.
يتم استخدام منح الامتيازات في قاعدة البيانات في الغالب لمنح أو إلغاء امتيازات الاتصال. يسمح لك هذا بتحديد من يمكنه فعل الأشياء في قاعدة البيانات إذا كان لديهم أذونات أخرى كافية.
تريد بدلا من ذلك:
GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;
هذا سيعتني بهذه القضية.
نشر إجابة Ron E للحصول على امتيازات المنحة في جميع الجداول لأنها قد تكون مفيدة للآخرين.
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
الاتصال بقاعدة البيانات الصحيحة أولاً ، ثم قم بتشغيل:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
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;
لمنح أذونات لكافة الجداول الموجودة في المخطط ، استخدم:
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 لتطبيق الويب للحصول على مزيد من التفاصيل والبرنامج النصي القابل لإعادة الاستخدام.
المرجع:
الخطوة الأولى و المهمة هي الاتصال بـ db:
psql -d yourDBName
2 خطوة ، منح الامتيازات
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;
يحدث هذا بشكل متكرر عند إنشاء جدول أثناء نشر المستخدم ثم محاولة الوصول إليه كمستخدم عادي. في هذه الحالة ، من الأفضل تسجيل الدخول كـ postgres مرة أخرى واستخدام ALTER TABLE OWNER TO someuser لتغيير ملكية الجدول للمستخدم الذي سيستخدم الجدول.
تأكد من تسجيل الدخول إلى psql كمالك الجداول. لمعرفة من يملك الجداول ، استخدم \dt
psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES
ثم يمكنك تشغيل المنح