BOL 文档说运行调试器需要系统管理员权限。
我 90% 确定这个要求没有解决方法,但我想我会问一下,以防有人找到一种方法来授予 Debugger 权限而不授予 sysadmin 权限。
当你有一个开发团队需要通过变量等复杂的游标循环来调试其中的某些方面时,人们会怎么做?
大多数商店甚至不允许开发人员在开发服务器上拥有系统管理员权限,并且由于 PII 和数据安全原因,许多商店不允许开发人员使用他们自己的开发人员 sql 服务器版本在本地计算机上保留企业数据的副本。
不知道为什么会以这种方式设置调试器。
所以,我很好奇其他人在类似情况下如何处理对调试器权限的请求。
你在你的环境中做什么?
您可以在存储过程中添加一个
declare @idebug int
变量,然后在需要相关信息时围绕重要位进行编码。你的存储过程看起来有点像这样:
这只是如何做到这一点的一个例子。
然后,您将使用以下命令调用 sproc:
...这将提供基本(按位
1
)和详细(按位2
)信息,具体取决于您插入相关代码的位置。我在运行一个没有产生正确结果的存储过程时遇到了一次问题,我不得不调试各个语句,所以我只是在存储过程中输入了各种调试级别,并在需要时使用相关
@iiDebug
值运行存储过程,具体取决于我需要的信息水平。输入值示例:
代码示例(输入变量
@iiDebug
存储在@debug
sproc 代码中):这些只是说明如何在无需访问 SQL Server 调试器或所需权限的情况下引入调试的快速示例。
如果您不完全反对给每个开发人员一个数据库副本以在本地使用,那么请考虑花时间在您的测试/开发环境中设置一个脚本,将数据库缩减到玩具大小。保留最近 n 个月的数据,清理/匿名您的 PII 数据,尽管我这么说很痛苦,但如有必要,设置测试场景所需的数据(DBA,至少我,不要就像为其他开发人员设置测试数据一样,但是如果您是唯一可以访问它的人,那么我想您必须这样做)。然后,每个开发人员都可以获取该数据库并在本地恢复它。
在我工作的地方,我们有一个沙箱服务器,任何事情都可以进行,因此开发人员可以选择在本地恢复或在沙箱中玩。但与上述相同的概念也适用。
很可能是由于调试的侵入性/不安全性:调试器附加到 SQL Server 进程本身,以便它可以看到该进程的内部,甚至可以进行即时更改。那就是控制服务器。并极大地影响安全性和稳定性。
这也是为什么您不应该在生产环境中执行此操作的原因。完全没有。
获得新的/更好的开发人员;-)
真的。这就是为什么我总是发现设置一个独立的测试机很有帮助。生产环境中的任何数据都可以加载到它上面,但它只需要包含足够的数据来逐步调试正在调试的代码。它甚至可以被隔离,这样任何使用它的人都无法将数据传输到他们的开发机器上。但是代码可以在不需要通过代码审查的情况下就地修改,因为它只是测试/调试。而且您无需担心数据修改,就像他们会在开发人员的工作站上恢复这些数据一样。
一旦确定了问题并测试了修复程序,就可以删除数据库以及数据和日志文件。如果需要清理 PII(假设这样做不会干扰测试/调试),那么可以在授予任何开发人员访问权限之前完成。
我使用 CAST 的 SQL Builder(版本 7.0.11,构建 4230)。它允许我在没有 SQL Server Management Studio 所需的这些特殊权限的情况下调试存储过程。我确实必须在自己的数据库中创建一个虚拟存储过程,以便 SQL Builder 工作:
唯一的问题是 CAST 工具不是免费的。