잘못되었을 가능성이 너무 많기 때문에 여기 또 다른 가능성이 있습니다. 나는 데이터베이스에서 내 자신의 역할을 설정 한 무언가를 만났다. (예 : "관리자", "관리자", "데이터 엔트리", "고객", 각각 자신의 종류의 제한 사항이 있음) 사용 가능한 유일한 사람은 "관리자"역할 이상이었습니다 그들은 데이터베이스에 사용자를 추가하고 있기 때문에 sysadmin으로 (그리고 그들은 매우 신뢰할 수있었습니다). 또한 추가 된 사용자는 도메인 자격 증명을 사용하는 Windows 도메인 사용자입니다. 데이터베이스에 대한 액세스 권한을 가진 모든 사용자는 도메인에 있어야했지만 도메인의 모든 사용자가 데이터베이스에 액세스 할 수있는 것은 아니 었습니다. 일부 사용자 만 데이터베이스를 변경할 수있었습니다.
어쨌든이 작업 시스템은 갑자기 작동을 멈추고 위와 유사한 오류 메시지가 나타납니다. 내가 그 일을 끝낸 것은 데이터베이스의 "공개"역할에 대한 모든 권한을 거쳐 내가 만든 모든 역할에 권한을 추가하는 것이 었습니다. 나는 당신이 그들을 추가 할 수 없다하더라도 (또는 당신이 그들을 "추가 할 수는 있지만"추가되지는 않을 것입니다) 모든 사람들이 "공개"역할을해야한다는 것을 알고 있습니다.
그래서 "SQL Server Management Studio"에서 응용 프로그램의 데이터베이스에 들어갔습니다. 즉, 현지화 된 이름은 <> 대괄호 안에 숨겨져 있습니다. "(SQL Server - sa)"\ Databases \\ Security \ Roles \ Database Roles \ public "에서"public "을 마우스 오른쪽 버튼으로 클릭하고"Properties "를 선택하고"Database Role Properties - public "대화 상자에서"Securables "페이지를 선택하십시오.목록을 살펴보고 목록의 각 요소에 대해 SQL "Grant"문을 작성하여 해당 권한을 다른 역할에 정확하게 부여하십시오. 예를 들어, "public"역할에 "Execute"권한이있는 스칼라 함수 "[dbo]. [fn_diagramobjects]"가 있습니다. 나는 "보안 개체"목록의 모든 요소에 대해이 작업을 수행 한 후, 나는 내 역할에있는 모든 역할을 선택하는 커서 while 루프에서 그 싸서
EXEC ('GRANT EXECUTE ON [dbo].[fn_diagramobjects] TO [' + @RoleName + '];')
: 그래서, 나는 다음과 같은 라인을 추가 표. 이것은 명시 적으로 "공용"역할의 모든 권한을 데이터베이스 역할에 부여합니다. 이 시점에서 모든 사용자는 (심지어 "sysadmin"액세스를 제거한 후에도 어떤 일이 일어 났는지 알았을 때 일시적인 조치로 끝냈습니다.)
더 나은 데이터베이스 개체에 대한 일종의 쿼리를 수행하고 공용 역할을 선택하여이 작업을 수행하는 방법이지만 조사 시간이 약 30 시간 정도가 경과 한 후에는이를 파악하지 못했기 때문에 무차별 대입 방식을 사용했습니다. 다른 사람에게 도움이되는 경우 여기에 제 코드가 있습니다.
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"필드가 포함 된 테이블 [RoleList]이 있습니다.
따라서 미스터리가 남아 있습니다. 왜 모든 사용자가 "공개"역할을 잃었으며 왜 SQL Server 2008 R2 업데이트의 일부였습니까? 각 사용자를 삭제하고 다시 추가하여 도메인과의 연결을 새로 고치는 스크립트가 있었기 때문에 발생 했습니까?
마지막 경고 하나 : 누락되거나 잘못된 것이 없는지 확인하기 위해 시스템을 실행하기 전에 시스템의 "공개"역할을 확인해야합니다. 여기에는 시스템마다 다른 것이있을 수 있습니다 .
다른 사람에게 도움이되기를 바랍니다.
우리 둘을 만드는 것에 대해 걱정하지 마십시오! 대답을 게시하는 데 건배. – Yos
세 개 만들기;) – jValdron
네 개로 만들어보세요! :) –