根据提供的文件信息,本文将详细解释SQL Server 2005和SQL Server 2008存储过程解密的方法,并探讨Direct Admin Connection (DAC) 的使用及其与存储过程解密的关系。 ### SQL Server 2005 和 2008 存储过程解密方法 #### 1. 直接管理员连接(DAC)简介 在SQL Server 2005及后续版本中,引入了一种特殊的连接方式——Direct Admin Connection (DAC),它提供了一种用于管理目的的专用连接,可以绕过所有数据库级别的安全性检查,直接连接到SQL Server实例。这使得在紧急情况下能够进行故障排除或恢复操作成为可能。DAC通常被用于服务器级别操作,例如在无法通过常规安全认证方式访问服务器时,可以使用DAC连接来重置sa密码或执行其他关键任务。 #### 2. DAC 连接的建立 - **本地连接**:使用命令行工具`sqlcmd`建立本地DAC连接。 ```bash sqlcmd -A -S sqlserver ``` - **远程连接**: 1. 在SQL Server Management Studio (SSMS)中启用远程DAC连接。 2. 使用`sqlcmd`命令行工具建立远程连接: ```bash sqlcmd -A -S 192.168.0.1 -U sa -P 123456 ``` #### 3. DAC 特性 - DAC连接默认是禁用的,需要通过系统配置命令`sp_configure`来启用。 ```sql sp_configure 'remote admin connections', 1; GO RECONFIGURE; GO ``` - 一旦启用,可以通过`sp_configure`再次设置为0来禁用DAC连接。 #### 4. 存储过程解密 在SQL Server 2005和2008中,可以通过系统存储过程`sp_undecrypt`来解密加密的存储过程。下面是一个解密存储过程的示例脚本: ```sql CREATE PROCEDURE [dbo].[sp_undecrypt] ( @procedure sysname = NULL, @revfl int = 1 ) AS BEGIN SET NOCOUNT ON; IF @revfl = 1 BEGIN PRINT '警告: 此操作会删除原始加密的存储过程。'; PRINT '在进行解密之前,请确保已备份所有重要数据。'; PRINT '如果要解密,请将 @revfl 设置为 0。'; RETURN 0; END DECLARE @intProcSpace bigint, @t bigint, @maxColID smallint, @procNameLength int; SELECT @maxColID = MAX(subobjid) FROM sys.sysobjvalues WHERE objid = OBJECT_ID(@procedure); -- 获取存储过程名称的长度 SELECT @procNameLength = DATALENGTH(@procedure) + 29; DECLARE @real_01 nvarchar(max), @fake_01 nvarchar(max), @fake_encrypt_01 nvarchar(max); DECLARE @real_decrypt_01 nvarchar(max), @real_decrypt_01_an nvarchar(max); DECLARE @objtype varchar(2), @ParentName nvarchar(max); SELECT @real_decrypt_01 = '', @objtype = type, @ParentName = object_name(parent_object_id) FROM sys.objects WHERE [object_id] = OBJECT_ID(@procedure); -- 获取加密的存储过程内容 SET @real_01 = (SELECT TOP 1 image_val FROM sys.sysobjvalues WHERE objid = OBJECT_ID(@procedure) AND valclass = 1 ORDER BY subobjid); -- 创建临时表以保存解密结果 CREATE TABLE #output ( [ident] int IDENTITY(1, 1) NOT NULL, [real_decrypt] NVARCHAR(MAX) ); BEGIN TRAN; -- 开始解密操作 -- ... (此处省略了具体的解密逻辑) -- 提交事务 COMMIT TRAN; END; ``` ### 总结 - **DAC连接**是一种重要的紧急恢复手段,用于在特殊情况下访问SQL Server实例。 - **存储过程解密**对于管理和维护加密的存储过程非常有用,但需要谨慎使用,以防数据丢失或损坏。 - 在实际操作中,应确保了解DAC连接的安全风险以及存储过程解密的操作细节,避免造成不可挽回的数据损失。 以上内容详细介绍了如何使用DAC连接以及如何解密存储过程,这对于SQL Server管理员来说是非常实用的知识点。
来源作者:dxy 和mssql2005相关 2010/7/31
简介:这是SQL2005 存储过程解密方法的详细页面,介绍了和mssql2005,有关的知识,要查看更多相关信息,请点击此处
一 什么是DAC
SQL Server 2005 为管理员提供了一种特殊的诊断连接,以供在无法与服务器建立标准连接时使用。即使在 SQL Server 不响应标准连接请求时,管理员也可以使用这种连接访问 SQL Server,以便执行诊断查询并解决问题。命令行界面 (sqlcmd) 通过使用特殊的管理员开关 (-A),提供并支持这种专用管理员连接 (DAC)。
二如何使用DAC登录到服务器
1 本机DAC登录
/*命令行方式下执行 sqlcmd -A -S sql服务器名
2 远程DAC登录
1) 打开远程DAC选项
'程序'->'Sql Server2005'-> '配置工具'-> 'Sql Server 外围应用配置器'-> '功能的外围应用配置器'-> 'DataBase Engine'-> 'DAC' -> '启用远程DAC'
2) 登录到远程服务器
sqlcmd -A -S 192.168.0.1 -U sa -P 123456
3 登录后, 可以通过查询动态管理视图来诊断问题
1.使用 DAC 与服务器连接
在 SQL Server Management Studio 中,不打开其他 DAC,单击工具栏上的“数据库引擎查询”。
在“连接到数据库引擎”对话框的“服务器名称”框中,键入 ADMIN:,并在其后继续键入服务器实例的名称。例如,若要连接到名为 ACCT\PAYABLE 的服务器实例,请键入 ADMIN:ACCT\PAYABLE。
完成“身份验证”部分(提供 sysadmin 组成员的凭据),然后单击“连接”。将建立连接。
2.DAC设置可以连接,
0 - 指明仅允许本地连接使用 DAC
1 - 指明允许远程连接使用 DAC
sp_configure 'remote admin connections', 1;
GO
RECONFIGURE;
GO
在STUDIO DAC模试下执行或在sqlcmd -A -o c:\1.txt模式下执行,输出文件
复制代码 代码如下:
DECLARE @return_value int
EXEC @return_value = [dbo].[sp_undecrypt]
@procedure = testencry,
@revfl = 0
SELECT 'Return Value' = @return_value
GO
解密存储过程如下:
复制代码 代码如下:*/
Create PROCEDURE [dbo].[sp_undecrypt]
(@procedure sysname = NULL, @revfl int = 1)
AS
/*
王成辉翻译整理,转贴请注明出自微软BI开拓者www.windbi.com
剩余8页未读,继续阅读
- 门外的码农2018-03-28还没用,有点复杂,先好评
- 粉丝: 9
- 资源: 10
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助