来自 DataWindow 的 INSERT 语句导致 SQL 安全上下文错误
INSERT statement from DataWindow causes SQL security context error
PowerBuilder 12.6 DataWindow 将 SQLCA 设置为其事务对象:
dw_datawindow.SetTransOject(SQLCA)
SQLCA 通过 ODBC 连接到 MS SQL 服务器并使用 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 Driver][SQL Server]The server principal "domain\username" is not able to access the database "otherdb" under the current security context.
没有对数据库进行更改。
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 用户)。
有什么建议吗?
检查正在更新的 table 上的触发器是否引用了其他数据库中的内容。
PowerBuilder 12.6 DataWindow 将 SQLCA 设置为其事务对象:
dw_datawindow.SetTransOject(SQLCA)
SQLCA 通过 ODBC 连接到 MS SQL 服务器并使用 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 Driver][SQL Server]The server principal "domain\username" is not able to access the database "otherdb" under the current security context.
没有对数据库进行更改。
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 用户)。
有什么建议吗?
检查正在更新的 table 上的触发器是否引用了其他数据库中的内容。