2012-04-18 6 views
6

हमारे पास SQL ​​सर्वर पर कई डेटाबेस हैं। हम 1 नया उपयोगकर्ता बनाना चाहते हैं जो डेटाबेस 'सी' देख सकता है लेकिन शेष डेटाबेस नहीं देख सकता है।उपयोगकर्ता बनाएं जो केवल एक डेटाबेस देख सकता है, और केवल उस से चुनें?

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

लेकिन मुझे नहीं लगता कि यह उन्हें चुनने के लिए सीमित करने के लिए काम करेगा, जब तक कि मैं डेटाबेस मालिक पर चयन करने के अलावा सबकुछ अस्वीकार कर सकता हूं?

किसी भी मदद के लिए अग्रिम धन्यवाद!

संपादित करें: SQL सर्वर 2008 R2, वैसे भी।

संपादित 2: क्षमा करें, मैं अपनी मूल पोस्ट में स्पष्ट नहीं था। जब मैं लॉग इन करता हूं तो मैं इसे बनाने के लिए देख रहा हूं, वे अन्य डेटाबेस के नाम भी नहीं देख पाएंगे, न कि वे उन्हें एक्सेस नहीं कर सकते हैं।

धन्यवाद।

उत्तर

4
  1. सर्वर
  2. पर उपयोगकर्ता बनाएँ दिया डेटाबेस
  3. अनुदान के लिए उपयोगकर्ता जोड़ें केवल पढ़ने के लिए डेटाबेस के लिए उपयोग

    उपयोग [गुरु] बनाएं प्रवेश [SomeUserName] पासवर्ड के साथ = N'someStr0ngP @ ssword ', DEFAULT_DATABASE = [सी], DEFAULT_LANGUAGE = [us_english], CHECK_EXPIRATION = पर, CHECK_POLICY = चलते-फिरते

    उपयोग [सी] सीआर Eate उपयोगकर्ता [SomeUserName] लॉगिन करने के लिए [SomeUserName] DEFAULT_SCHEMA के साथ = [dbo] N'db_datareader sp_addrolemember GO

    EXEC ', N'SomeUserName'

+1

याद रखें कि 2008 में सभी उपयोगकर्ताओं को "सार्वजनिक" सर्वर-स्तर की भूमिका दी जाती है जिसे हटाया नहीं जा सकता है। यदि आप केवल उन्हें एक डेटाबेस देखना चाहते हैं, और आप संग्रहीत प्रक्रियाओं या अन्य मध्यम स्तर के माध्यम से अपनी पहुंच को सीमित नहीं कर सकते हैं, तो आपको अन्य सभी डेटाबेस सार्वजनिक भूमिका में लेना होगा (जो हर किसी को गड़बड़ कर सकता है)। –

+1

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

+2

"आपको सार्वजनिक (एसक्यूएल सर्वर 2005 के बाद) की भूमिका से 'किसी भी डाटाबेस' अनुमति को रद्द करने की आवश्यकता होगी। मैंने चुरा लिया [एक और पोस्ट ...] (http://stackoverflow.com/questions/935018/hide-sql-database-from-management-studio)। अधिक जानकारी के लिए वहां एक नज़र डालें। –

1

इनकार डिफ़ॉल्ट व्यवहार है जब यह अनुमति के लिए आता है इसलिए यदि आप उपयोगकर्ता बनाते हैं और इसे आवश्यक डीबी पर db_datareader भूमिका में जोड़ते हैं, तो यह एकमात्र अनुमति होगी। यह अन्य डेटाबेस

तक पहुँचने के लिए सकेंगे

संपादित करें:

use [master] 
GO 
DENY VIEW ANY DATABASE TO [login] 
GO 
use [master] 
GO 
DENY VIEW SERVER STATE TO [login] 
GO 

कि डेटाबेस देखने के लिए प्रवेश की abbility निकाल देंगे। फिर उस व्यक्ति के पास जाएं जिसे आप देखना चाहते हैं और उसे उस डीबी

+0

क्षमा करें, मैं अपनी पोस्ट में स्पष्ट नहीं था। मैं इसे बनाने की कोशिश कर रहा हूं ताकि वे अन्य अड्डों को भी न देख सकें, या उनके नाम। इतना नहीं कि वे उन्हें एक्सेस नहीं कर सकते हैं। सहायता के लिए धन्यवाद। – Kyle

+0

ठीक है, मेरा संपादन – Diego

0

शायद यह काम करेगा।

उपयोगकर्ता को सर्वर और सही डेटा बेस पर मानचित्र जोड़ें। सर्वर से उपयोगकर्ता को हटाएं।

सर्वर आपको सूचित करेगा सर्वर उपयोगकर्ताओं को हटाने से इस लॉगिन से जुड़े डेटा बेस उपयोगकर्ता नहीं हटते हैं।

ठीक क्लिक करें और आपके पास उपयोगकर्ता को केवल एक डेटा बेस तक पहुंच होगी।

1

चरण -1: प्रवेश बनाएं

चरण -2: प्रवेश से सभी डीबी दृश्य अनुमति निकालें

deny view any database to LogInName 

चरण -3: डेटाबेस का लॉगिन प्राधिकरण दें

alter authorization on database:: DataBaseName to LogInName 

नोट: एकल उद्धरण चिह्नों में उपयोगकर्ता नाम या डेटाबेस नाम निर्दिष्ट करने की आवश्यकता नहीं

+0

आज़माएं मुझे यकीन नहीं है कि यह उत्तर वास्तव में इस प्रश्न से भी संबंधित है। यह किसी भी दर पर गलत है। –

+0

यह गलत कैसे है: आप कहते हैं "रद्द करें", लेकिन फिर आपका आदेश "अस्वीकार" है। वे बहुत अलग चीजें हैं। 'deny' उपयोगकर्ता को किसी भी डेटाबेस को देखने से पूरी तरह अवरुद्ध करेगा। 'निरस्त' आंशिक रूप से काम करेगा, शायद ... उपयोगकर्ता को डेटाबेस में जोड़ने के अलावा काम नहीं करेगा। उन्हें देखने के लिए मालिक होने की आवश्यकता है जब उनके पास 'कोई भी सही' न हो। –

+0

मुझे नहीं पता कि आप उत्तर को नकारात्मक @AndrewBarber के रूप में क्यों चिह्नित करते हैं .. किसी भी तरह से मैं एक एसक्यूएल सर्वर गीक लड़का नहीं हूं .. लेकिन यह मेरे लिए काम है ... और जवाब केवल उस प्रश्न पर केंद्रित है जिसे पूछा गया है। .. मैं किस चीज के लिए .. – Moumit

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