it-swarm.com.de

Die SELECT-Berechtigung wurde für das Objekt 'sysobjects', die Datenbank 'mssqlsystemresource' und das Schema 'sys' abgelehnt.

SETUP: SQL Server 2005 und DotNetNuke 05.01.02. 

Das begann damit, dass ich versuchte, ein DNN-Modul zu installieren, in dessen SQL-Skripts "select * from dbo.sysobjects" stand. Das ist mit folgendem Fehler fehlgeschlagen: 

Die SELECT-Berechtigung wurde am .__ abgelehnt. das Objekt 'sysobjects', Datenbank 'mssqlsystemresource', Schema 'sys'.

Ich habe mich als DNN-Benutzerkonto über SQL Server Management Studio bei der Datenbank angemeldet. Ich erhalte die gleiche Fehlermeldung, wenn ich versuche, eine SELECT-Anweisung in der Sysobjects-Ansicht auszuführen. 

Ich habe versucht, dem DNN-Benutzerkonto explizite SELECT-Berechtigung für diese Ansicht zu erteilen. Wenn ich dies überprüfe, gehen Sie zu Sicherheit -> Benutzer -> DNNUserLogin-> Rechtsklick -> Eigenschaften -> Sicherheiten, und scrollen Sie nach unten, um die Ansicht sys.sysobjects zu finden. Dieses Benutzerkonto verfügt über explizite Berechtigungen für dbo: Und das SELECT Kontrollkästchen ist markiert. Ich kann jedoch immer noch keine Auswahl in der Sysobjects-Ansicht als DNN-Benutzerkonto durchführen. 

Was mache ich falsch? Wie kann ich diese Arbeit machen?

47
Chris Holmes

Dies war ein Problem mit dem Benutzer, der auch Berechtigungen verweigerte. In meiner Hast, um Berechtigungen zu erteilen, habe ich dem Benutzer grundsätzlich alles gegeben. Und leugnen, tötete es. Sobald ich diese Berechtigungen entfernt habe, hat es funktioniert.

95
Chris Holmes

Ich hatte den gleichen Fehler und BEHOBEN, indem ich die DB-Rollen db_denydatawriter und db_denydatreader des DB-Benutzers entfernte. Wählen Sie dazu den entsprechenden DB-Benutzer in den Anmeldedaten >> Eigenschaften >> Benutzerzuordnungen >> DB herausfinden und markieren Sie ihn >> deaktivieren Sie die erwähnten DB-Benutzerrollen. Das ist es !!

31
Raihan

Führen Sie diesen Code auf einem guten Server aus, auf dem Sie die vollständigen Rechte für die PUBLIC-Rolle erhalten. Kopieren Sie die Ausgabe und fügen Sie sie mit dem Problem auf dem Server ein. Ausführen. Melden Sie sich erneut an. Das Problem wurde behoben.

SELECT  SDP.state_desc ,
        SDP.permission_name ,
        SSU.[name] AS "Schema" ,
        SSO.[name] ,
        SSO.[type]
FROM    sys.sysobjects SSO
        INNER JOIN sys.database_permissions SDP ON SSO.id = SDP.major_id
        INNER JOIN sys.sysusers SSU ON SSO.uid = SSU.uid
ORDER BY SSU.[name] ,
        SSO.[name]
4
Rudy

In meinem Fall wurde meine Website auf Shared Hosting gehostet, und es gab eine Ressource, die überlastet war, und die sich nicht einmal auf meine Datenbank bezog. Daher wurde meine Datenbank gesperrt, das Hosting-Panel war Plesk

0
mohas

Ich habe dieses Problem gelöst, indem ich auf die Eigenschaften des Login-Benutzers unter den Sicherheits-Logins verwies. Gehen Sie dann zu User Mapping, wählen Sie die Datenbank aus und prüfen Sie dann die Optionen db_datareader und db_dataweriter .

0

Es sieht so aus, als hätte jemand die Berechtigungen für sys.configurations Für die öffentliche Rolle widerrufen. Oder verweigert diesem bestimmten Benutzer den Zugriff auf diese Ansicht. Oder der Benutzer wurde erstellt, nachdem die öffentliche Rolle aus den sys.configurations-Tabellen entfernt wurde.

Erteilen Sie die SELECT-Berechtigung für das öffentliche Benutzer sys.configurations-Objekt.

0
Senthil

Da gibt es so viele Möglichkeiten, was falsch sein könnte. Hier ist eine weitere Möglichkeit zum Anschauen. Ich bin auf etwas gestoßen, wo ich meine eigenen Rollen in einer Datenbank eingerichtet hatte. (Zum Beispiel "Administrator", "Manager", "DataEntry", "Customer", jede mit ihren eigenen Einschränkungen). Die einzigen, die es verwenden konnten, waren die "Manager" -Rolle oder höher - weil sie ebenfalls eingerichtet wurden als sysadmin, weil sie Benutzer zur Datenbank hinzugefügt haben (und sie waren sehr vertrauenswürdig). Die hinzugefügten Benutzer waren auch Windows-Domänenbenutzer, die ihre Domänenanmeldeinformationen verwendeten. (Jeder, der Zugriff auf die Datenbank hat, musste sich in unserer Domäne befinden, aber nicht jeder in der Domäne hatte Zugriff auf die Datenbank - und nur wenige hatten Zugriff, um sie zu ändern.)

Wie auch immer, dieses funktionierende System funktionierte plötzlich nicht mehr und ich erhielt Fehlermeldungen ähnlich wie oben. Was ich schließlich getan habe, um das Problem zu lösen, bestand darin, alle Berechtigungen für die "öffentliche" Rolle in dieser Datenbank durchzugehen und diese Berechtigungen zu allen von mir erstellten Rollen hinzuzufügen. Ich weiß, dass jeder in der "öffentlichen" Rolle sein soll, auch wenn Sie sie nicht hinzufügen können (oder Sie können sie "hinzufügen", sie werden jedoch nicht "hinzugefügt").

In "SQL Server Management Studio" ging ich also in die Datenbank meiner Anwendung (meine lokalisierten Namen sind in <> -Klammern verdeckt): "(SQL Server - sa)"\Datenbanken \\ Sicherheit\Rollen\Datenbankrollen\public ". Klicken Sie mit der rechten Maustaste auf" public "und wählen Sie" Properties ". Wählen Sie im Dialogfeld" Database Role Properties - public "die Seite" Securables "aus. Gehen Sie die Liste durch und gehen Sie für jedes Element in der Liste auf eine SQL-Anweisung "Grant", um genau diese Berechtigung einer anderen Rolle zu erteilen. So gibt es beispielsweise eine Skalarfunktion "[dbo]. [fn_diagramobjects]", für die die "public" -Rolle die Berechtigung "Ausführen" hat fügte die folgende Zeile hinzu:

EXEC ( 'GRANT EXECUTE ON [dbo].[fn_diagramobjects] TO [' + @RoleName + '];' ) 

Nachdem ich dies für alle Elemente in der Liste "Securables" durchgeführt hatte, wickelte ich das in einer while-Schleife auf einen Cursor und wählte alle Rollen in meiner Rollentabelle aus. Dies hat explizit alle Berechtigungen der "öffentlichen" Rolle für meine Datenbankrollen erteilt. Zu diesem Zeitpunkt arbeiteten alle Benutzer wieder (selbst nachdem ich ihren "sysadmin" -Zugriff entfernt hatte - dies wurde als vorübergehende Maßnahme ausgeführt, während ich herausfand, was passiert ist.)

Ich bin sicher, es gibt einen besseren (eleganteren) Weg, dies zu tun, indem Sie eine Art Abfrage der Datenbankobjekte durchführen und die öffentliche Rolle auswählen, aber nach etwa einer halben und einer halben Stunde Nachforschungen habe ich es nicht herausgefunden. Also habe ich es einfach mit der Brute-Force-Methode gemacht. Falls es jemandem hilft, hier ist mein Code.

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

Sobald dies im System ist, musste ich nur "GrantAccess ausführen" ausführen, damit es funktioniert. (Natürlich habe ich eine Tabelle [RoleList], die ein Feld "AppRoleName" enthält, das die Namen der Datenbankrollen enthält.

Das Rätsel bleibt also bestehen: Warum haben alle meine Benutzer ihre "öffentliche" Rolle verloren und warum sollte ich sie nicht zurückgeben? War dies Teil eines Updates für SQL Server 2008 R2? War es, weil ich ein anderes Skript ausgeführt habe, um jeden Benutzer zu löschen und wieder hinzuzufügen, um die Verbindung mit der Domäne zu aktualisieren? Nun, das löst das Problem vorerst.

Eine letzte Warnung: Sie sollten wahrscheinlich die "öffentliche" Rolle auf Ihrem System überprüfen, bevor Sie dies ausführen, um sicherzustellen, dass hier nichts fehlt oder falsch ist. Es ist immer möglich, dass in Ihrem System etwas anders ist.

Hoffe das hilft jemand anderem.

0
Lowell