चूंकि क्या गलत हो सकता है इसके लिए इतनी सारी संभावनाएं हैं। यहां देखने की एक और संभावना है। मैं उस चीज़ में भाग गया जहां मैंने डेटाबेस पर अपनी भूमिकाएं स्थापित की थीं। (उदाहरण के लिए, "प्रशासक", "प्रबंधक", "डेटाएन्ट्री", "ग्राहक", प्रत्येक अपनी सीमाओं के साथ) केवल वे लोग जो इसका उपयोग कर सकते हैं "प्रबंधक" भूमिका या ऊपर थे - क्योंकि वे भी स्थापित किए गए थे sysadmin के रूप में क्योंकि वे डेटाबेस में उपयोगकर्ताओं को जोड़ रहे थे (और वे अत्यधिक भरोसेमंद थे)। साथ ही, जो उपयोगकर्ता जोड़े जा रहे थे वे विंडोज डोमेन उपयोगकर्ता थे - उनके डोमेन प्रमाण-पत्रों का उपयोग करते हुए। (डेटाबेस तक पहुंच वाले प्रत्येक व्यक्ति को हमारे डोमेन पर होना था, लेकिन डोमेन पर हर किसी के पास डेटाबेस तक पहुंच नहीं थी - और केवल उनमें से कुछ को इसे बदलने की पहुंच थी।)
वैसे भी, यह कार्य प्रणाली अचानक काम करना बंद कर दिया और मुझे उपर्युक्त के समान त्रुटि संदेश मिल रहे थे। मैंने यह निष्कर्ष निकाला कि यह उस डेटाबेस में "सार्वजनिक" भूमिका के लिए सभी अनुमतियों को पार करना था और उन सभी भूमिकाओं को उन अनुमतियों को जोड़ना था जिन्हें मैंने बनाया था। मुझे पता है कि हर कोई "सार्वजनिक" भूमिका में होना चाहिए, भले ही आप उन्हें जोड़ नहीं सकते (या बल्कि, आप उन्हें "जोड़ सकते हैं", लेकिन वे "जोड़े गए" नहीं होंगे)।
तो, "एसक्यूएल सर्वर प्रबंधन स्टूडियो" में, मैं अपने आवेदन के डेटाबेस में गया, दूसरे शब्दों में (मेरे स्थानीय नाम <> ब्रैकेट्स के भीतर अस्पष्ट हैं): "(SQL सर्वर - sa)" \ डेटाबेस \\ सुरक्षा \ भूमिकाएं \ डेटाबेस भूमिकाएं \ सार्वजनिक "।" सार्वजनिक "पर राइट-क्लिक करें और" गुण "चुनें।" डेटाबेस भूमिका गुण - सार्वजनिक "संवाद में," सुरक्षित "पृष्ठ का चयन करें।सूची के माध्यम से और सूची में प्रत्येक तत्व के लिए, एक अन्य भूमिका के लिए अनुमति देने के लिए एक एसक्यूएल "अनुदान" कथन के साथ आओ। इसलिए, उदाहरण के लिए, एक स्केलर फ़ंक्शन "[डीबीओ] है। [Fn_diagramobjects]" जिस पर "सार्वजनिक" भूमिका "निष्पादन" विशेषाधिकार है।
EXEC ('GRANT EXECUTE ON [dbo].[fn_diagramobjects] TO [' + @RoleName + '];')
एक बार मैं "Securables" सूची में सभी तत्वों के लिए इस किया था, मुझे लगता है कि मेरे भूमिकाओं में सभी भूमिकाओं के माध्यम से चयन करने के लिए एक कर्सर पर लिपटे थोड़ी देर के पाश में: तो, मैं निम्नलिखित लाइन जोड़ा तालिका। इसने स्पष्ट रूप से मेरी डेटाबेस भूमिकाओं में "सार्वजनिक" भूमिका की सभी अनुमतियां दीं। उस समय, मेरे सभी उपयोगकर्ता फिर से काम कर रहे थे (यहां तक कि मैंने अपनी "sysadmin" पहुंच को हटा दिया - एक अस्थायी उपाय के रूप में किया गया, जबकि मुझे पता चला कि क्या हुआ।)
मुझे यकीन है कि एक बेहतर (अधिक सुरुचिपूर्ण) है डेटाबेस ऑब्जेक्ट्स पर किसी प्रकार की क्वेरी करके और सार्वजनिक भूमिका पर चयन करके ऐसा करने का तरीका, लेकिन जांच के आधे घंटे के बाद, मैं इसे समझ नहीं पाया, इसलिए मैंने इसे ब्रूट-फोर्स विधि भी की। अगर यह किसी और की मदद करता है, तो यह मेरा कोड है।
CREATE PROCEDURE [dbo].[GrantAccess]
AS
DECLARE @AppRoleName AS sysname
DECLARE AppRoleCursor CURSOR LOCAL SCROLL_LOCKS FOR
SELECT AppRoleName FROM [dbo].[RoleList];
OPEN AppRoleCursor
FETCH NEXT FROM AppRoleCursor INTO @AppRoleName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC ('GRANT EXECUTE ON [dbo].[fn_diagramobjects] TO [' + @AppRoleName + '];')
EXEC ('GRANT EXECUTE ON [dbo].[sp_alterdiagram] TO [' + @AppRoleName + '];')
EXEC ('GRANT EXECUTE ON [dbo].[sp_creatediagram] TO [' + @AppRoleName + '];')
EXEC ('GRANT EXECUTE ON [dbo].[sp_dropdiagram] TO [' + @AppRoleName + '];')
EXEC ('GRANT EXECUTE ON [dbo].[sp_helpdiagramdefinition] TO [' + @AppRoleName + '];')
EXEC ('GRANT EXECUTE ON [dbo].[sp_helpdiagrams] TO [' + @AppRoleName + '];')
EXEC ('GRANT EXECUTE ON [dbo].[sp_renamediagram] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[all_columns] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[all_objects] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[all_parameters] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[all_sql_modules] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[all_views] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[allocation_units] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[assemblies] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[assembly_files] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[assembly_modules] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[assembly_references] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[assembly_types] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[asymmetric_keys] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[certificates] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[change_tracking_tables] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[check_constraints] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[column_type_usages] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[column_xml_schema_collection_usages] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[columns] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[computed_columns] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[conversation_endpoints] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[conversation_groups] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[conversation_priorities] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[crypt_properties] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[data_spaces] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[database_audit_specification_details] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[database_audit_specifications] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[database_files] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[database_permissions] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[database_principal_aliases] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[database_principals] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[database_role_members] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[default_constraints] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[destination_data_spaces] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[event_notifications] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[events] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[extended_procedures] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[extended_properties] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[filegroups] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[foreign_key_columns] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[foreign_keys] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[fulltext_catalogs] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[fulltext_index_catalog_usages] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[fulltext_index_columns] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[fulltext_index_fragments] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[fulltext_indexes] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[fulltext_stoplists] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[fulltext_stopwords] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[function_order_columns] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[identity_columns] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[index_columns] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[indexes] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[internal_tables] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[key_constraints] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[key_encryptions] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[message_type_xml_schema_collection_usages] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[module_assembly_usages] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[numbered_procedure_parameters] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[numbered_procedures] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[objects] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[parameter_type_usages] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[parameter_xml_schema_collection_usages] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[parameters] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[partition_functions] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[partition_parameters] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[partition_range_values] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[partition_schemes] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[partitions] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[plan_guides] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[procedures] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[remote_service_bindings] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[routes] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[schemas] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[service_contract_message_usages] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[service_contract_usages] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[service_contracts] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[service_message_types] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[service_queue_usages] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[service_queues] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[services] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[spatial_index_tessellations] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[spatial_indexes] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sql_dependencies] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sql_modules] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[stats] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[stats_columns] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[symmetric_keys] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[synonyms] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[syscolumns] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[syscomments] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysconstraints] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysdepends] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysfilegroups] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysfiles] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysforeignkeys] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysfulltextcatalogs] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysindexes] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysindexkeys] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysmembers] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysobjects] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[syspermissions] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysprotects] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysreferences] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[system_columns] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[system_objects] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[system_parameters] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[system_sql_modules] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[system_views] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[systypes] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[sysusers] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[table_types] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[tables] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[transmission_queue] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[trigger_events] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[triggers] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[type_assembly_usages] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[types] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[views] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_indexes] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_schema_attributes] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_schema_collections] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_schema_component_placements] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_schema_components] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_schema_elements] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_schema_facets] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_schema_model_groups] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_schema_namespaces] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_schema_types] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_schema_wildcard_namespaces] TO [' + @AppRoleName + '];')
EXEC ('GRANT SELECT ON [sys].[xml_schema_wildcards] TO [' + @AppRoleName + '];')
FETCH NEXT FROM AppRoleCursor INTO @AppRoleName
END
CLOSE AppRoleCursor
RETURN 0
GO
एक बार है कि व्यवस्था में है, मैं तो बस "Exec GrantAccess" करने के लिए आवश्यक यह काम करने के लिए। (बेशक, मेरे पास एक टेबल [रोललिस्ट] है जिसमें "AppRoleName" फ़ील्ड है जिसमें डेटाबेस भूमिकाओं के नाम शामिल हैं।
तो, रहस्य बना हुआ है: मेरे सभी उपयोगकर्ता अपनी "सार्वजनिक" भूमिका क्यों खो देते हैं और क्यों क्या मैं इसे वापस नहीं दे सकता था? क्या SQL Server 2008 R2 के अपडेट का यह हिस्सा था? क्या ऐसा इसलिए था क्योंकि मैंने प्रत्येक उपयोगकर्ता को हटाने के लिए एक और स्क्रिप्ट चलाई और डोमेन के साथ अपने कनेक्शन को रीफ्रेश करने के लिए उन्हें वापस जोड़ दिया? अच्छा, यह हल करता है अब के लिए मुद्दा।
एक आखिरी चेतावनी: आपको यह सुनिश्चित करने के लिए शायद इसे चलाने से पहले अपने सिस्टम पर "सार्वजनिक" भूमिका निभानी चाहिए, यहां कुछ याद आ रही है या गलत नहीं है। यह हमेशा आपके सिस्टम के बारे में कुछ अलग है
उम्मीद है कि यह किसी और की मदद करता है।
चिंता न करें जो हम दोनों को बनाता है! उत्तर पोस्ट करने के लिए चीयर्स। – Yos
इसे तीन बनाएं;) – jValdron
इसे चार बनाएं! :) –