[英]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.