2012-10-08 6 views
5

जब मैं कहता प्रभावी अनुमतियाँ, मैं सूचीबद्ध अनुमतियों की चर्चा करते हुए कर रहा हूँ जब आप SQL सर्वर प्रबंधन स्टूडियो में एक डेटाबेस के गुणों में जाते हैं, "अनुमतियां" क्लिक करें और फिर "प्रभावी" टैब पर क्लिक करें।सी # के माध्यम से SQL सर्वर डेटाबेस के उपयोगकर्ता के लिए प्रभावी अनुमतियों को कैसे निर्धारित करें?

अब तक, मैं निम्नलिखित कोड के साथ स्पष्ट अनुमतियां निर्धारित करने के लिए सक्षम किया गया है:

using Microsoft.SqlServer.Management.Smo; 
... 
DatabasePermissionInfo[] permissions = database.EnumDatabasePermissions("username"); 

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

डेटाबेस के लिए अनुमतियों में, सूचीबद्ध प्रभावी अनुमतियां CONNECT, DELETE, INSERT, SELECT, और UPDATE हैं, लेकिन स्पष्ट अनुमतियां केवल सूची कनेक्ट करती हैं (जो एकमात्र चीज है जो उपरोक्त कोड वापस खींचती है)। तो क्या प्रभावी अनुमतियों को प्रोग्रामेटिक रूप से पुनर्प्राप्त करने का कोई तरीका है?

धन्यवाद।

+0

इस स्टैक ओवरफ्लो को पिछली पोस्टिंग करने में मदद करें http://stackoverflow.com/questions/962482/sql-permissions-to-add-data-and-how-to-verify – MethodMan

उत्तर

5

मेरा मानना ​​है कि आप sys.fn_my_permissions कॉल कर सकते हैं:

execute as user = 'SomeUserName' -- Set this to the user name you wish to check 
select * from fn_my_permissions(null, 'DATABASE') -- Leave these arguments, don't change to MyDatabaseName 
order by subentity_name, permission_name 
revert 

यह मैं SSMS विकल्प आप का उल्लेख के रूप में एक ही परिणाम दे दी है।

+0

उसका उत्तर उत्कृष्ट है लेकिन स्थिति के लिए जहां आप अपना उदाहरण माइग्रेट कर दिया है और प्रक्रिया में अपने उपयोगकर्ताओं और लॉगिन को बदल दिया है। फिर आप "उपयोगकर्ता के रूप में निष्पादित करें" तकनीक का उपयोग नहीं कर सकते हैं, और अन्य विधियों का उपयोग करना होगा। इस मामले में user645280 द्वारा दिया गया जवाब बहुत अच्छा है। – Hansjp

3

लगता sys.database_principals और sys.database_permissions इस बारे में अपने आप में कुछ अच्छा जानकारी नहीं है की तरह। यह धागा: SQL Server query to find all permissions/access for all users in a database इसके बारे में और बात करता है।

नोट: मैं यह सोचते हैं रहा हूँ सी # डीबी में कॉल स्वीकार्य समाधान कर रहे हैं।

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

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