DataWindow中的INSERT语句导致SQL安全上下文错误

时间:2019-06-19 22:50:07

标签: sql-server powerbuilder

PowerBuilder 12.6 DataWindow已将SQLCA设置为其事务对象:

dw_datawindow.SetTransOject(SQLCA)

SQLCA通过ODBC连接到MS SQL Server,并使用Windows集成身份验证。

SQLCA.DBMS = "ODBC"
SQLCA.DBPARM = "ConnectString='DSN=maindb;Trusted Connection=yes;'"

该应用程序连接到的另一个数据库使用特定的SQL用户:

otherdb.DBMS = "ODBC"
otherdb.DBPARM = "ConnectString='DSN=otherdb;UID=dbuser;PWD=dbpassword'"

选择数据时(在Retrieve()函数中),将查询正确的数据库。

执行Update()时,发生以下错误(从对话框中复制):

第1行中的数据库错误

  

SQLSTATE = 08004   [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]服务器主体“ domain \ username”在当前安全上下文下无法访问数据库“ otherdb”。

未对数据库进行任何更改。

INSERT INTO dbo.t_table ( column1, column2, column3, column4, column5, column6, column7, column8, column9, column10, column11, column12, column13, column14, column15, column16, column17, column18, column19)
  VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )

在sqlpreview事件中,我使用GetTrans检查每次执行(检索和更新)的事务对象,并且看起来那里的事务对象是正确的。

但是,该错误反映出插入语句正在使用集成身份验证凭据发送到“ otherdb”(而otherdb事务对象指定了一个SQL用户)。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

在正在更新的表上检查是否有触发器引用了其他数据库中的某些内容。