AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 188348
Accepted
GWR
GWR
Asked: 2017-10-13 10:50:21 +0800 CST2017-10-13 10:50:21 +0800 CST 2017-10-13 10:50:21 +0800 CST

SQL Server 调试器权限,但未将系统管理员授予开发人员

  • 772

BOL 文档说运行调试器需要系统管理员权限。

我 90% 确定这个要求没有解决方法,但我想我会问一下,以防有人找到一种方法来授予 Debugger 权限而不授予 sysadmin 权限。

当你有一个开发团队需要通过变量等复杂的游标循环来调试其中的某些方面时,人们会怎么做?

大多数商店甚至不允许开发人员在开发服务器上拥有系统管理员权限,并且由于 PII 和数据安全原因,许多商店不允许开发人员使用他们自己的开发人员 sql 服务器版本在本地计算机上保留企业数据的副本。

不知道为什么会以这种方式设置调试器。

所以,我很好奇其他人在类似情况下如何处理对调试器权限的请求。

你在你的环境中做什么?

sql-server sql-server-2014
  • 4 4 个回答
  • 9771 Views

4 个回答

  • Voted
  1. Best Answer
    John K. N.
    2017-10-13T11:45:39+08:002017-10-13T11:45:39+08:00

    您可以在存储过程中添加一个declare @idebug int变量,然后在需要相关信息时围绕重要位进行编码。

    你的存储过程看起来有点像这样:

    CREATE PROCEDURE [dbo].[uspDoSomething]
    ...
    @iiDebug int = 0
    ...
    AS
    ...
    BEGIN
        /* debugging configuration */   
        declare @debug int
    
        /* debug settings
        1 = turn on debug information
        2 = turn on all possible outputs
        4 = turn on transaction handling
    
        e.g.: Adding an @iDebug paramter of 6 will turn on transaction handling 
        and turn on all possible output information
    
        e.g.: Adding an @iDebug value of 1 will turn on debugging information
        */ 
    
        set @debug = @iiDebug
        ....
        if @debug & 1 = 1  print 'Checking variables...'
    
                        /* If general output has been turned on print output*/ 
                        if @debug & 2 = 2 
                            BEGIN
                                PRINT 'Debug comment here' + convert(varchar(100), @iRetVal) + 'Debug comment here' + convert(varchar(20),getdate())
                            end
    
                        close <cursor_name>
                        deallocate <cursor_name>
    
                        RETURN(@iRetVal)
        ...
        END
        ...
    END
    

    这只是如何做到这一点的一个例子。

    然后,您将使用以下命令调用 sproc:

    execute uspDoSomething @iiDebug = 3
    

    ...这将提供基本(按位1)和详细(按位2)信息,具体取决于您插入相关代码的位置。

    我在运行一个没有产生正确结果的存储过程时遇到了一次问题,我不得不调试各个语句,所以我只是在存储过程中输入了各种调试级别,并在需要时使用相关@iiDebug值运行存储过程,具体取决于我需要的信息水平。

    输入值示例:

    @iiDebug = 1 -- > Basic "where am I in the sproc" information
    @iiDebug = 2 -- > Print of @nvSQL values
    @iiDebug = 4 -- > Run individual execution of statements in BEGIN and COMMIT transactions
    

    代码示例(输入变量@iiDebug存储在@debugsproc 代码中):

    set @debug = @iiDebug
    ...
    ...
    if @debug & 4 = 4
    BEGIN
        begin tran mojo
    END
    if @debug & 2 = 2 then print @nvSQL
    
    exec @iRetVal = sp_executesql @nvSQL
    if @iRetVal <> 0 
    BEGIN
        /* If transactions have been turned on then rollback if failed */
        if @debug & 4 = 4
        BEGIN
            rollback tran mojo
        END
    
    /* If transactions have been turned on then commit on success */
    if @debug & 4 = 4
    BEGIN
        commit tran mojo
    END
    

    这些只是说明如何在无需访问 SQL Server 调试器或所需权限的情况下引入调试的快速示例。

    警告:
    它可能有点消耗性能,最好从生产中移除。

    • 4
  2. mathewb
    2017-10-13T11:49:40+08:002017-10-13T11:49:40+08:00

    如果您不完全反对给每个开发人员一个数据库副本以在本地使用,那么请考虑花时间在您的测试/开发环境中设置一个脚本,将数据库缩减到玩具大小。保留最近 n 个月的数据,清理/匿名您的 PII 数据,尽管我这么说很痛苦,但如有必要,设置测试场景所需的数据(DBA,至少我,不要就像为其他开发人员设置测试数据一样,但是如果您是唯一可以访问它的人,那么我想您必须这样做)。然后,每个开发人员都可以获取该数据库并在本地恢复它。

    在我工作的地方,我们有一个沙箱服务器,任何事情都可以进行,因此开发人员可以选择在本地恢复或在沙箱中玩。但与上述相同的概念也适用。

    • 1
  3. Solomon Rutzky
    2017-10-18T11:36:01+08:002017-10-18T11:36:01+08:00

    不知道为什么会以这种方式设置调试器。

    很可能是由于调试的侵入性/不安全性:调试器附加到 SQL Server 进程本身,以便它可以看到该进程的内部,甚至可以进行即时更改。那就是控制服务器。并极大地影响安全性和稳定性。

    这也是为什么您不应该在生产环境中执行此操作的原因。完全没有。

    当你有一个开发团队需要通过变量等复杂的游标循环来调试其中的某些方面时,人们会怎么做?

    获得新的/更好的开发人员;-)

    由于 PII 和数据安全原因,许多人不允许开发人员使用他们自己的开发人员 sql server 版本在本地计算机上保留企业数据的副本。

    真的。这就是为什么我总是发现设置一个独立的测试机很有帮助。生产环境中的任何数据都可以加载到它上面,但它只需要包含足够的数据来逐步调试正在调试的代码。它甚至可以被隔离,这样任何使用它的人都无法将数据传输到他们的开发机器上。但是代码可以在不需要通过代码审查的情况下就地修改,因为它只是测试/调试。而且您无需担心数据修改,就像他们会在开发人员的工作站上恢复这些数据一样。

    一旦确定了问题并测试了修复程序,就可以删除数据库以及数据和日志文件。如果需要清理 PII(假设这样做不会干扰测试/调试),那么可以在授予任何开发人员访问权限之前完成。

    • 1
  4. Lane
    2018-02-14T06:51:49+08:002018-02-14T06:51:49+08:00

    我使用 CAST 的 SQL Builder(版本 7.0.11,构建 4230)。它允许我在没有 SQL Server Management Studio 所需的这些特殊权限的情况下调试存储过程。我确实必须在自己的数据库中创建一个虚拟存储过程,以便 SQL Builder 工作:

    Create Proc sp_dboption (
          @dbname varchar(30) = NULL,
          @optname varchar(20) = NULL,
          @optvalue varchar(10) = NULL,
          @dockpt tinyint = 1)
    As
    Begin
        return(0)
    end
    

    唯一的问题是 CAST 工具不是免费的。

    • 0

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve