2009-06-01 5 views
34

SQL सर्वर 2005/2008 में लॉग इन करते समय आपके पास उन डेटाबेस को कैसे छुपाया जा सकता है जिनके पास आपके पास पहुंच अधिकार नहीं हैं? वर्तमान में यदि कोई उपयोगकर्ता कनेक्ट करता है, तो वे सर्वर पर सभी डेटाबेस देखते हैं, जिसका अर्थ है कि सूची को उनके डेटाबेस को खोजने के लिए स्कैन करना होगा।प्रबंधन स्टूडियो से SQL डेटाबेस छुपाएं

उत्तर

13

आप भूमिका जनता से 'किसी भी डेटाबेस देखने की अनुमति (SQL सर्वर 2005 के बाद)

+5

नोट: यह आपके लिए काम नहीं कर सकता है, तो आप लॉगिन डेटाबेस की डीबीओ इस प्रयोक्ता नहीं कर सकते हैं आप उसे प्रशासित करना चाहते हैं या यदि आपके पास एकाधिक लॉग इन हैं जो आप इस तरीके से सुरक्षित करना चाहते हैं क्योंकि केवल एक ही लॉगिन डेटाबेस का वास्तविक डीबीओ हो सकता है। –

0

वहाँ प्रकट होता है एमएस एसक्यूएल 2005 और 2008 पर एक सर्वर साइड सेटिंग डेटाबेस एक प्रतिबंधित करने के लिए होने के लिए रद्द करने की आवश्यकता होगी उपयोगकर्ता देख सकता है। मुझे निम्नलिखित पाठ sql-server-performance.com

SQL सर्वर 2005 में यह एक नई सर्वर पक्ष भूमिका के साथ संभव है। किसी भी डाटाबेस अनुमति को देखते हुए एक नई, सर्वर-स्तरीय अनुमति है। इस अनुमति के साथ दिया गया एक लॉगिन मेटाडेटा देख सकता है जो सभी डेटाबेस का वर्णन करता है, इस पर ध्यान दिए बिना कि लॉगिन का स्वामित्व है या वास्तव में किसी विशेष डेटाबेस का उपयोग कर सकता है। कृपया ध्यान दें डिफ़ॉल्ट रूप से, सार्वजनिक भूमिका के लिए किसी भी डाटाबेस अनुमति को देखते हैं। इसलिए, डिफ़ॉल्ट रूप से, SQL सर्वर 2005 के उदाहरण से कनेक्ट होने वाले प्रत्येक उपयोगकर्ता उदाहरण में सभी डेटाबेस देख सकते हैं।

19

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

Connect Feedback

मूल रूप से अनुमतियाँ डेटाबेस स्तर पर जमा हो जाती है, तो यह प्रत्येक डेटाबेस की गणना करता है, तो उपयोगकर्ता कनेक्ट है निर्धारित करने के लिए की आवश्यकता होगी ऑब्जेक्ट एक्सप्लोरर में डेटाबेस प्रदर्शित करने का अधिकार, जो प्रदर्शन करने का एक महंगा काम है और पुराने ईएम चीजों को कैसे करता था। प्रस्तावित समाधान इस जानकारी के लिए सर्वर स्तर पर भी बनाए रखा जा सकता है, जो एक बड़ा परिवर्तन है।

+2

+1, यह अब तक का सबसे पूरा और संपूर्ण जवाब प्रतीत होता है। – stakx

+0

कृपया कनेक्ट लिंक में वोट दें, हालांकि इसे अभी भी 8+ साल – BiLaL

48

उपयोगकर्ता खाते को बनाने का तरीका जानने के कुछ घंटों के बाद, केवल 1 डीबी तक पहुंच है, और केवल उस डीबी को देख सकता है। मुझे लगता है कि मैंने हल निकाल लिया!!!!

  1. एक उपयोगकर्ता खाते बनाएँ (यकीन है कि अपनी किसी भी डेटाबेस पर मैप नहीं करें, अन्यथा आप अंतिम त्रुटि संदेश 15110, स्तर 16, राज्य 1 मिल जाएगा और ध्यान दें प्रस्तावित समाधान)

    USE [master] 
    GO 
    CREATE LOGIN [us4] 
        WITH PASSWORD=N'123', 
        DEFAULT_DATABASE=[master], 
        CHECK_EXPIRATION=OFF, 
        CHECK_POLICY=OFF 
    
  2. एसक्यूएल (SQLSERVER नाम) के ऊपरी भाग पर राइट क्लिक करें> गुण> अनुमतियां> उपयोगकर्ता खाते पर क्लिक करें, और डेटाबेस देखने के लिए इनकार करें का चयन करें।

    उपयोग [गुरु] GO देखें [us4]

  3. राइट नव निर्मित डीबी, गुण, फ़ाइलें पर क्लिक करने के किसी भी डेटाबेस इनकार करते हैं, और नव निर्मित खाते के मालिक बदल जाते हैं।इस बिंदु पर: (महत्वपूर्ण नोट बदल भूमिका [db_owner] जोड़ें सदस्य [us4] काम नहीं करता है)

    USE [dbname] 
    GO 
    EXEC dbo.sp_changedbowner @loginame = N'us4', @map = false 
    

, एक बार उपयोगकर्ता के लॉग इन वह मास्टर, tempdb और देखेंगे होगा नया डीबी भी देखें जो वह एक डीबी मालिक है .. आप टूल्स> विकल्प पर जा सकते हैं और सिस्टम ऑब्जेक्ट्स को छिपाने के विकल्प को सक्षम कर सकते हैं ताकि आप मास्टर, tempdb, आदि को न दिखाएं। तुम भी SP1 की जरूरत है तो इस विकल्प का संदेश 15110 के

Msg 15110, Level 16, State 1, Line 1 
The proposed new database owner is already a user or aliased in the database. 

प्रस्तावित समाधान काम नहीं करता है हो सकता है: त्रुटि उपरोक्त समस्याओं का समाधान करने के लिए बस डेटाबेस सुरक्षा नोड से उपयोगकर्ता हटाकर पुन:

आशा है कि मदद करता है की कोशिश .. ।

निखिल

+5

के बाद भी सक्रिय के रूप में चिह्नित किया गया है यह अच्छा है, लेकिन अगर मैं नहीं चाहता कि वह उपयोगकर्ता डीबी के मालिक बनें, फिर भी इसे देखने में सक्षम हो एसएसएमएस में? – friism

+0

मैं इसे लंबे समय से ढूंढ रहा हूं, बहुत बहुत धन्यवाद! –

+0

कूल यह मेरे लिए काम करता है ... friism - बहुत अधिक माइक्रो मैनेजिंग आईएमओ जा रहा है;) क्या आप आईई - टेबल बूंद/जोड़, truncates, आदि की जरूरत से इंकार कर इस अवधारणा को ठीक से ठीक नहीं कर सकते हैं ... – bbqchickenrobot

1
USE master; GO 

DENY VIEW ANY DATABASE TO [loginname]; GO 

USE [your db]; GO 

DROP USER [loginname]; GO 

USE master; GO 

ALTER AUTHORIZATION ON DATABASE::[your db]TO [loginname]; GO 
+0

क्या आप यह समझा सकते हैं कि यह कोड क्या है करता है और यह अन्य उत्तरों से अलग कैसे होता है – userSteve

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