Оператор INSERT из DataWindow вызывает ошибку контекста безопасности SQL - PullRequest
0 голосов
/ 20 июня 2019

В PowerBuilder 12.6 DataWindow в качестве объекта транзакции установлен SQLCA:

dw_datawindow.SetTransOject(SQLCA)

SQLCA подключается к MS SQL Server через ODBC и использует встроенную аутентификацию 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] Серверпринципал "домен \ имя пользователя" не может получить доступ к базе данных "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, и кажется, что объект транзакции там правильный.

Однако ошибка отражает то, что модулиОператор ert отправляется в «otherdb» с учетными данными встроенной аутентификации (тогда как объект транзакции otherdb вместо этого указывает пользователя SQL).

Есть предложения?

1 Ответ

1 голос
/ 20 июня 2019

Проверить наличие в обновляемой таблице триггера, который ссылается на что-то в другой базе данных.

...