使用typeORM时,在ad-hoc级别上执行MS-SQL存储过程

时间:2018-06-05 13:38:48

标签: sql-server typescript typeorm

概要
连接到MSSQL服务器时,我需要使用应用程序角色。 执行相应的存储过程(sp_setapprole)时,数据库服务会发出错误“请求错误:应用程序角色只能在临时级别激活”。

长版
出于安全原因,我们希望利用Microsoft SQL Server的应用程序角色功能,版本14.0.1000.169 这意味着,我们与高度受限的用户创建连接,然后需要使用一组不同的凭据执行存储过程“sp_setapprole”,以确保使用正确的应用程序完成访问。
在查询中调用存储过程时:

   await this.Connection.query('sp_setapprole Test.Full, xxxx');

数据库服务返回以下错误:

   query failed: sp_setapprole 'Test.Full', 'xxxx'
   error: RequestError: Application roles can only be activated at the ad hoc level.
       at handleError ([...]\node_modules\mssql\lib\tedious.js:519:15)
       at emitOne (events.js:116:13)
       at Connection.emit (events.js:211:7)
       at Parser.<anonymous> ([...]\node_modules\tedious\lib\connection.js:489:16)
       at emitOne (events.js:116:13)
       at Parser.emit (events.js:211:7)
       at Parser.<anonymous> ([...]\node_modules\tedious\lib\token\token-stream-parser.js:54:15)
       at emitOne (events.js:116:13)
       at Parser.emit (events.js:211:7)
       at addChunk ([...]\node_modules\readable-stream\lib\_stream_readable.js:284:12)

假设
我认为该问题位于:

  • 连接层:池连接可能会干扰对其的更改 连接
  • 查询层:查询可能被包装以作为预准备语句执行 因此算作“嵌套”

问题
有没有办法在typeORM中使用这个需要ad hoc级别的存储过程/存储过程?

如果问题出在连接层上,是否有办法在建立连接时禁用连接池?将连接或最大连接设置为1仍然似乎建立了池连接。

如果问题位于查询层,是否有办法阻止/绕过此调用的包装器?有没有办法在没有框架进一步操作的情况下执行存储过程/查询?

0 个答案:

没有答案