Ausnahme bei MS-SQL Server-, JDBC- und XA-Transaktionen

Ich erhalte die folgende Ausnahme in meinem Protokoll, wenn ich versuche, eine XA-Transaktion durchzuführen:

javax.transaction.xa.XAException: com.microsoft.sqlserver.jdbc_SQLServerException: Die XA-Steuerverbindung konnte nicht erstellt werden. Fehler: "Die EXECUTE-Berechtigung wurde für das Objekt 'xp_sqljdbc_xa_init_ex', Datenbank 'master' Schema 'dbo' @ verweiger

Ich bin diesen Tutorials gefolgt XA-Transaktionen verstehen undWie funktioniert die MSSQL Server XA-Datenquelle? Nachdem ich dem ersten Tutorial gefolgt war, habe ich auch den folgenden Befehl in SSMS ausgeführt:

use master GO
EXEC sp_addrolemember [SqlJDBCXAUser], 'MyUserName' GO

Ich werde auch hinzufügen, dass ich @ li

use master GO EXEC sp_grantdbaccess 'MyUserName', 'MyUserName' GO

, um zu überprüfen, ob der Benutzer Zugriff auf die Master-Datenbank hat, und ich habe die Fehlermeldung "Der Benutzer ist bereits in der aktuellen Datenbank vorhanden" erhalten. Zuletzt habe ich über SSMS überprüft, dass die RolleSqlJDBCXAUser hat EXECUTE in Bezug auf @ gewähxp_sqljdbc_xa_init_ex.
Die DB, die ich benutze, ist offensichtlich nichtmaster abermyDBName. Die einzige Korrelation zwischen den beiden in Bezug auf dieses Problem ist, dassMyUserName ist der Besitzer vonmyDBName und existiert als Benutzer inmaster.
Mein Server läuft unter Windows XP SP3 (daher ist der im ersten Tutorial erwähnte Hotfix nicht relevant, da er für XP SP2 und darunter bestimmt ist. Ich weiß, dass ich versucht habe, den Hotfix auszuführen).

Hat jemand dieses Problem festgestellt? Ich würde einige Hinweise wirklich schätzen.
Vielen Dank
Ittai

Aktualisieren
Ich habe mir das erste Tutorial angesehen, vonMicrosoft, wieder und es gibt zwei Absätze, bei denen ich nicht sicher bin, was sie bedeuten und die möglicherweise die Lösung enthalten:

Führen Sie das Datenbankskript xa_install.sql auf jeder SQL Server-Instanz aus, die an verteilten Transaktionen teilnehmen soll. Dieses Skript installiert die erweiterten gespeicherten Prozeduren, die von sqljdbc_xa.dll aufgerufen werden. Diese erweiterten gespeicherten Prozeduren implementieren die verteilte Transaktions- und XA-Unterstützung für den Microsoft SQL Server-JDBC-Treiber. Sie müssen dieses Skript als Administrator der SQL Server-Instanz ausführen.

Wenn sie sagenSQL Server instance, meinen sie den SQL-Server, der mehrere Datenbanken enthält, einschließlichmaster undmyDBName (Ich bin es gewohnt, etwas andere Begriffe zu verwenden)? Ich habe dasxa_install.sql script einmal wie es gegeben wurde und es besagtuse master.

Dies ist der zweite Absatz:

Konfigurieren der benutzerdefinierten Rollen
Um einem bestimmten Benutzer Berechtigungen zur Teilnahme an verteilten Transaktionen mit dem JDBC-Treiber zu erteilen, fügen Sie den Benutzer der Rolle SqlJDBCXAUser hinzu. Verwenden Sie beispielsweise den folgenden Transact-SQL-Code, um der Rolle "SqlJDBCXAUser" einen Benutzer mit dem Namen "shelby" (SQL-Standardanmeldebenutzer mit dem Namen "shelby") hinzuzufügen:

USE master  
GO  
EXEC sp_grantdbaccess 'shelby', 'shelby'  
GO  
EXEC sp_addrolemember [SqlJDBCXAUser], 'shelby'  

SQL benutzerdefinierte Rollen sinddefined per database. Um Ihre eigene Rolle für Sicherheitszwecke zu erstellen, müssen Sie die Rolle in jeder Datenbank definieren und Benutzer pro Datenbank hinzufügen. Die Rolle "SqlJDBCXAUser" ist in der master-Datenbank streng definiert., weil es verwendet wird, um Zugriff auf die erweiterten gespeicherten SQL JDBC-Prozeduren zu gewähren, die sich im Master befinden. Sie müssen zunächst einzelnen Benutzern Zugriff auf master gewähren und ihnen dann Zugriff auf die Rolle "SqlJDBCXAUser" gewähren, während Sie bei der master-Datenbank angemeldet sind.

Ich bin nicht sicher, aber ich denke, dass der oben fettgedruckte Satz sagt, dass dieSqlJDBCXAUser role sollte nur auf @ definiert werdmaster und die anderen Benutzer, die auf @ zugreifmyDBName sollte Zugriff auf @ erhaltmaster und dann zu der Rolle hinzugefügt und das wirdirgendwi (weiß nicht wie) aktiviert sie, wenn @ verwendet wimyDBName database, um die xa-Pakete zu verwenden.

Update 2: Dies ist ein Screenshot von SSMS der Sicherheitseinstellungen der gespeicherten Prozedur unter der Rolle "SqlJDBCXAUser".

Antworten auf die Frage(4)

Ihre Antwort auf die Frage