2010-07-28 8 views
14

मैं एक पोस्टग्रेस उपयोगकर्ता बनाना चाहता हूं जो पोस्टग्रेस सर्वर पर केवल एक डेटाबेस तक पहुंच सकता है।किसी उपयोगकर्ता को अन्य डेटाबेस और अन्य डेटाबेस से तालिकाओं को देखने में सक्षम होने से कैसे रोकें?

वर्तमान में मेरी प्रवाह है:

create database database1; 
create user user1 with password 'pass'; 
grant all privileges on database database1 to user1; 

लेकिन user1 अभी भी डीबीएस, उपयोगकर्ताओं, टेबल आदि की एक सूची देख सकते हैं कि जानकारी को देखने से लगता है कि उपयोगकर्ता को रोकने के लिए कोई तरीका है? उपयोगकर्ता को उस डीबी से लिखने और पढ़ने में सक्षम होना चाहिए।

बहुत बहुत धन्यवाद।

उत्तर

7

प्रत्येक उपयोगकर्ता अन्य डेटाबेस और भूमिकाओं को सूचीबद्ध कर सकता है, लेकिन कभी भी अन्य डेटाबेस में टेबल देखने में सक्षम नहीं होना चाहिए।

यदि आप आवंटित एक को छोड़कर सभी डेटाबेस पर कनेक्ट विशेषाधिकार को निरस्त करते हैं, तो उपयोगकर्ता अन्य डेटाबेस की सामग्री तक पहुंच नहीं पाएगा।

भूमिकाएं और डेटाबेस नाम वैश्विक हैं, और आसानी से अवरुद्ध नहीं हैं। आप सिस्टम टेबल पर चुनिंदा निरसन के फ्रैंक हेइकेंस सुझाव का प्रयास कर सकते हैं, लेकिन आप ऐसा करने के लिए जोखिम लेते हैं। यूजनेट मेलिंग सूचियों पर PostgreSQL डेवलपर्स ने सिस्टम कैटलॉग तक पहुंच के साथ छेड़छाड़ को हतोत्साहित किया है।

Psql, अन्य उपकरणों के बीच, मानता है कि वे उपलब्ध होंगे और उनके बिना खराब काम करेंगे।

नाम अन्य डेटाबेस और भूमिकाओं को इतना बुरा क्यों जानते हैं?

+3

उपयोगकर्ता हमारी तरफ से डीबीएस बनायेंगे। हम नहीं चाहते हैं कि उपयोगकर्ता डेटा गोपनीयता/सुरक्षा के उपाय के रूप में एक-दूसरे के डेटाबेस, टेबल नाम आदि को देख सकें। – Dan

+2

यह एक बुरी बात है जब उपयोगकर्ता डेटाबेस में टेबल सूचीबद्ध कर सकते हैं, जो उनके नहीं हैं। – harmv

+1

यह डेटा देता है जो निश्चित रूप से नहीं चाहता था। उदाहरण के लिए, * "cicallc" * नामक एक डेटाबेस इंगित कर सकता है कि "सीका एलएलसी" आपका ग्राहक है। "Cicaalfresco" नामक एक निम्न डेटाबेस इंगित कर सकता है, वे आपके द्वारा क्या कर रहे हैं। डेटाबेस की संख्या आपके सिस्टम से दिखाई दे सकती है, इस पर कितने उपयोगकर्ता (= ग्राहक) हैं। और इसी तरह। यह postgresql डेवलपर्स से एक वैचारिक गलती है। एक सामान्य उपयोगकर्ता को अपने आप को पर्यावरण में ढूंढना चाहिए, जहां उसके पास केवल * कुछ * तक पहुंच है जिसके लिए उसे करना है, और नहीं। – peterh

1

डिफ़ॉल्ट रूप से आपके द्वारा बनाई गई कोई भी वस्तु सार्वजनिक स्कीमा में बनाई गई है। साथ ही, आपके द्वारा बनाए गए किसी भी उपयोगकर्ता ने सार्वजनिक स्कीमा पर CREATE और उपयोग विशेषाधिकार बनाए हैं। आपको इस उपयोगकर्ता के लिए सार्वजनिक स्कीमा में CREATE और USAGE को निरस्त करना चाहिए, या आपको डिफ़ॉल्ट पहुंच स्तर बदलना चाहिए। आपको उस डेटाबेस को स्थानांतरित करने की भी आवश्यकता होगी जिस पर इस उपयोगकर्ता के पास उपयोगकर्ता की स्कीमा, या उपयोगकर्ता के लिए सुलभ स्कीमा है। Postgres मैनुअल में DDL Schemas देखें।

संबंधित मुद्दे