我正在处理的项目上的SQL开发人员询问是否可以在生产数据库上启用xp_cmdshell,因为使用xp_cmdshell导出CSV文件比编写SSIS包更容易。
启用xp_cmdshell听起来像是一场安全噩梦,而且绝对不应该这样做。
围绕这个的build议/最佳实践是什么?
我不会这样做。 特别是如果你打算从微软作为开发者合作伙伴获得任何品牌。 我们的产品已通过微软authentication,其应用程序检查工具将检查xp_cmdshell是否启用。
closuresxp_CmdShell有点像把面纱放在腐烂的肉上。 它给桌子带来了一种虚假的安全感,苍蝇仍然可以吃肉。 请允许我解释一下。
谁可以使用xp_CmdShell? 那就对了。 只有拥有“SA”权限的用户/应用程序login,或者您授予代理人犯了可怕错误的人才可以使用它。
下一个问题。 如果您closures了xp_CmdShell,那么只有哪些人可以closures它? 再纠正! 只有拥有“SA”权限的用户才能重新开启。
那么,xp_CmdShell的安全风险是什么? 答案是xp_CmdShell不是安全风险。 安全性差是唯一的安全风险。 如果黑客或恶意内部用户以“SA”权限进入系统,则可以在momements中打开xp_CmdShell。 是的,这个行动被logging下来,但只提供了文件certificate,安全是严重缺乏开始。
对于安全性,xp_CmdShell除了为黑客代码的这一部分提供机会让它重新开始运行之外,什么也不做。
我会再说一遍。 xp_CmdShell不是安全风险。 只有糟糕的安全性才是安全风险。 修复您的安全性,然后打开xp_CmdShell。 这是一个非常棒的工具,由于安全实践和神话错误,你错过了它。
只要你已经正确地清理了代码进入SQL Server的任何领域,没有人有任何权限,他们不需要你的风险应该是最小的。 当然还是有风险的,所以只有在必要的时候才能启用,否则会大大改善当前的stream程。 如果写SSIS包不是太麻烦,最好不用xp_cmdshell。
只是因为它“更容易”并不意味着这是正确的事情。
我会推回去,让开发人员使用SSIS包。
但是,请检查您的系统需要的安全程度。 你是银行吗? 那么xp_cmdshell是不行的。
如果您的生产系统是内部产品,并且您的用户通常是可以信赖的,那么您可以启用此function。
我build议不要启用这个function,但是如果它成为一个业务关键问题并被抛到你身上,我会设置这个过程,这样你只需要在短时间内启用xp_cmdshell来导入。 这可以使用sp_configure来编写脚本,并在作业步骤或T-SQL过程中打开和closures。
不要这样做。 xp_cmdshell是黑客喜欢的工具,可以将SQL注入攻击提升到“我自己的networking,我可以阅读你的CEO邮件”。 一旦启用,当有更好的select时,开发人员将继续滥用它来处理各种奇怪的情况。
另外,为了导出CSV,还有很多更安全,更安全和更容易实现的select:
最后但并非最不重要的是,使用xp_cmdshell比使用SSIS更容易导出CSV?
我只是问了我的DBA关于这个,因为他禁用了一个非常有用的function,我用于故障排除。 在做了大量的研究和回顾比我更有经验的人的回答之后,我倾向于在禁用xp_cmdshell的问题上向中间人倾斜。
一方面,把禁用命令shell的想法看作绝对的,就好像它是一串点燃的炸药。 但是另一方面,我认为不尊重使用xp_cmdshell的安全风险是完全不顾一切的。
这就是说,我看着xp_cmdshell就像一个加载的武器。 如果您知道危险,请谨慎行事,如果您不知道,请在生产环境中使用之前接受教育,尤其是在应用程序中。 大多数情况下,在应用程序中使用xp_cmdshell“should”可能是最后的select。
不过就我个人而言,在安全的开发环境中,使用它来解决生产工作(在adHoc基础上),我只是看不到“安全风险”。 代码没有被存储。 我的帐户是一个个人帐户,并没有在任何公共或私人应用程序中使用。 那是我的两分钱…