簡體   English   中英

生成腳本的SQL Server 2008 R2錯誤

[英]SQL Server 2008 R2 error in generating the script

我正在嘗試在SQL Server 2008 R2上生成數據庫的腳本

我得到這個錯誤

Microsoft.SqlServer.Management.Smo.PropertyCannotBeRetrievedException:屬性TextHeader不適用於StoredProcedure'[dbo]。[p_SYS_GetQDNPassword]'。 該屬性對於該對象可能不存在,或者由於訪問權限不足而無法檢索。 文本已加密。 在Microsoft.SqlServer.Management.SqlScriptPublish.GeneratePublishPage.worker_DoWork(Object sender,DoWorkEventArgs e)在System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)在System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object arguments)

你能幫忙嗎?

我不知道您還需要什么其他信息,但是無論您需要什么,請告訴我。

使用sp_helptext dbo.p_SYS_GetQDNPassword應該會給您結果:

“對象'YourProcedureName'的文本已加密。”

這意味着將使用WITH ENCRYPTION創建存儲過程,並且SQL Server在內部以混淆格式存儲帶有對象定義的文本

對象的實際定義存儲在無法直接訪問的系統表sys.sysobjvalues中。 通過使用專用管理員連接(DAC)連接到SQL Server,您可以選擇存儲信息的imageval列

單擊數據庫引擎查詢按鈕:

在此處輸入圖片說明

將彈出“連接到數據庫引擎”對話框。 在服務器名稱之前鍵入“ admin:”前綴,您將連接到DAC

在此處輸入圖片說明

您可以在本文http://www.mssqltips.com/sqlservertip/2964/encrypting-and-decrypting-sql-server-stored-procedures-views-and-userdefined-functions/中找到有用的信息

當您連接到DAC時,請運行以下文章中的腳本:

   SET NOCOUNT ON
GO

ALTER PROCEDURE dbo.TestDecryption WITH ENCRYPTION AS
BEGIN
 PRINT 'This text is going to be decrypted'
END 
GO

DECLARE @encrypted NVARCHAR(MAX)
SET @encrypted = ( 
 SELECT imageval 
 FROM sys.sysobjvalues
 WHERE OBJECT_NAME(objid) = 'TestDecryption' )
DECLARE @encryptedLength INT
SET @encryptedLength = DATALENGTH(@encrypted) / 2

DECLARE @procedureHeader NVARCHAR(MAX)
SET @procedureHeader = N'ALTER PROCEDURE dbo.TestDecryption WITH ENCRYPTION AS '
SET @procedureHeader = @procedureHeader + REPLICATE(N'-',(@encryptedLength 
-   LEN(@procedureHeader)))
 EXEC sp_executesql @procedureHeader
 DECLARE @blankEncrypted NVARCHAR(MAX)
 SET @blankEncrypted = ( 
 SELECT imageval 
 FROM sys.sysobjvalues
 WHERE OBJECT_NAME(objid) = 'TestDecryption' )

SET @procedureHeader = N'CREATE PROCEDURE dbo.TestDecryption WITH ENCRYPTION AS '
SET @procedureHeader = @procedureHeader + REPLICATE(N'-',(@encryptedLength 
-   LEN(@procedureHeader)))

DECLARE @cnt SMALLINT
DECLARE @decryptedChar NCHAR(1)
DECLARE @decryptedMessage NVARCHAR(MAX)
SET @decryptedMessage = ''
SET @cnt = 1
WHILE @cnt <> @encryptedLength
BEGIN
  SET @decryptedChar = 
      NCHAR(
        UNICODE(SUBSTRING(
           @encrypted, @cnt, 1)) ^
        UNICODE(SUBSTRING(
           @procedureHeader, @cnt, 1)) ^
        UNICODE(SUBSTRING(
           @blankEncrypted, @cnt, 1))
     )
  SET @decryptedMessage = @decryptedMessage + @decryptedChar
 SET @cnt = @cnt + 1
END
SELECT @decryptedMessage

當然,請在腳本中用您的過程名稱更改dbo.TestDecryption :)

該腳本對我有用,希望對您有所幫助

采用

sp_helptext dbo.p_SYS_GetQDNPassword 

並嘗試更改存儲過程並嘗試獲取腳本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM