我得到以下異常在我的日誌,當我嘗試執行XA事務:異常與MS-SQL服務器,JDBC和XA事務
javax.transaction.xa.XAException: com.microsoft.sqlserver.jdbc_SQLServerException: failed to create the XA control connection. Error: "The EXECUTE permission was denied on the object 'xp_sqljdbc_xa_init_ex', database 'master' schema 'dbo'
我跟着這些教程Understanding XA Transactions和How to make MSSQL Server XA Datasource Work? 以下後第一個教程我也跑在SSMS以下命令:
use master GO
EXEC sp_addrolemember [SqlJDBCXAUser], 'MyUserName' GO
我還要補充一點,我跑
use master GO EXEC sp_grantdbaccess 'MyUserName','MyUserName' GO
驗證用戶是否有權訪問主數據庫,並且出現「用戶已存在於當前數據庫中」的錯誤。 最後,我通過SSMS驗證了角色SqlJDBCXAUser
的確針對xp_sqljdbc_xa_init_ex
授予了EXECUTE。
我使用的數據庫顯然不是master
而是myDBName
。 關於這個問題,兩者之間唯一的相互關係是MyUserName
是myDBName
的所有者,並以master
中的用戶身份存在。
我的服務器正在Windows XP SP3上運行(所以第一個教程中提到的修補程序與XP SP2和以下版本無關,因爲我試圖運行此修補程序時知道此修補程序)。
有人遇到此問題?我真的很感激一些潛在客戶。
謝謝,
以太
更新:
我已經看過了第一個教程,從Microsoft
,一次有兩段這我不知道他們的意思,他們可能包含解決方案:
Execute the database script xa_install.sql on every SQL Server instance that will participate in distributed transactions. This script installs the extended stored procedures that are called by sqljdbc_xa.dll. These extended stored procedures implement distributed transaction and XA support for the Microsoft SQL Server JDBC Driver. You will need to run this script as an administrator of the SQL Server instance.
當他們說SQL Server instance
,做他們的意思是它包含幾個數據庫,包括master
和myDBName
在SQL Server(我已經習慣了甲骨文而言這是一個有點DIF ferent)?我運行xa_install.sql
腳本,因爲它是給定的,它聲明use master
。
這是第二段:
Configuring the User-Defined Roles
To grant permissions to a specific user to participate in distributed transactions with the JDBC driver, add the user to the SqlJDBCXAUser role. For example, use the following Transact-SQL code to add a user named 'shelby' (SQL standard login user named 'shelby') to the SqlJDBCXAUser role:
USE master
GO
EXEC sp_grantdbaccess 'shelby', 'shelby'
GO
EXEC sp_addrolemember [SqlJDBCXAUser], 'shelby'
SQL user-defined roles are defined per database. To create your own role for security purposes, you will have to define the role in each database, and add users in a per database manner. The SqlJDBCXAUser role is strictly defined in the master database because it is used to grant access to the SQL JDBC extended stored procedures that reside in master. You will have to first grant individual users access to master, and then grant them access to the SqlJDBCXAUser role while you are logged into the master database.
我不知道,但我認爲上面的粗體句話說,SqlJDBCXAUser
角色只應在master
和其他被定義訪問myDBName
的用戶應被授予對master
的訪問權限,然後添加到角色中,並且將以某種方式(不知道如何)在使用時啓用它們數據庫使用xa軟件包。
更新2: 這是從存儲過程中的安全設置SSMS下SqlJDBCXAUser作用
哇!這實際上工作!謝謝。奇怪的是,我執行了這些命令的變體(作爲MS教程的一部分,它們是xa_install.sl的一部分),唯一的區別是我授予角色權限並將我的用戶添加到角色。你知不知道爲什麼會發生這種情況?我會非常感激。 – Ittai 2010-11-06 12:35:38
這也適用於我,謝謝! - 我認爲微軟應該更新他們的文檔,使他們更全面和更加傻瓜。 – monojohnny 2014-07-28 15:56:32