默认情况下,在SQL Server中,[public]
角色具有的EXECUTE
权限sp_executesql
。
但是,我继承了一个数据库服务器,以前的DBA撤消了该数据库服务器的EXECUTE
权利sp_executesql
。
作为临时的解决方法,我一直在根据需要(通过在master数据库中的角色)授予EXECUTE
权限sp_executesql
。但是,这开始成为维护难题。
如果我EXECUTE
回馈公众,我是否需要了解其他影响?
默认情况下,在SQL Server中,[public]
角色具有的EXECUTE
权限sp_executesql
。
但是,我继承了一个数据库服务器,以前的DBA撤消了该数据库服务器的EXECUTE
权利sp_executesql
。
作为临时的解决方法,我一直在根据需要(通过在master数据库中的角色)授予EXECUTE
权限sp_executesql
。但是,这开始成为维护难题。
如果我EXECUTE
回馈公众,我是否需要了解其他影响?
Answers:
没有。sp_executesql
在与原始调用者执行相同的 SQL 相同的上下文和特权下执行SQL。在很多情况下,动态SQL是不可避免的。
sp_executesql
。假设动态SQL要求然后被禁用sp_executesql
实际上可能会增加风险,因为至少这使您可以对查询进行参数化(与不同EXEC
)
sp_executesql
不是适当的缓解方法。当通过手工将SQL片段与输入变量连接然后“按原样”执行“手工”构建SQL语句时,绝大多数SQL注入错误发生在客户端。对于所有这些情况sp_executesql
,禁用都无济于事。