1. 程式人生 > >對儲存過程進行加密和解密(SQL 2008/SQL 2012)

對儲存過程進行加密和解密(SQL 2008/SQL 2012)

Use master
Go
if object_ID('[sp_DecryptObject]') is not null
    Drop Procedure [sp_DecryptObject]
Go
create procedure sp_DecryptObject 
(
    @Object sysname,    --要解密的物件名:函式,儲存過程,檢視或觸發器
    @MaxLength int=4000 --評估內容的長度
)
as
set nocount on
/* 1. 解密 */
 
if not exists(select 1 from sys.objects a where a.object_id=object_id(@Object) And a.type in('P','V','TR','FN','IF','TF'))
begin
    --SQL Server 2008
    raiserror 50001 N'無效的物件!要解密的物件必須是函式,儲存過程,檢視或觸發器。' 


    --SQL Server 2012
    --throw 50001, N'無效的物件!要解密的物件必須是函式,儲存過程,檢視或觸發器。',1   
    return
end
 
if exists(select 1 from sys.sql_modules a where a.object_id=object_id(@Object) and a.definition is not null)
begin
    --SQL Server 2008
    raiserror 50001 N'物件沒有加密!' 


    --SQL Server 2012
    --throw 50001, N'無效的物件!要解密的物件必須是函式,儲存過程,檢視或觸發器。',1 
    return
end
 
declare  @sql nvarchar(max)                --解密出來的SQL語句
        ,@imageval nvarchar(max)        --加密字串
        ,@tmpStr nvarchar(max)            --臨時SQL語句
        ,@tmpStr_imageval nvarchar(max) --臨時SQL語句(加密後)
        ,@type char(2)                    --物件型別('P','V','TR','FN','IF','TF')
        ,@objectID int                    --物件ID
        ,@i int                            --While迴圈使用
        ,@Oject1 nvarchar(1000)
 
set @objectID=object_id(@Object)
set @type=(select a.type from sys.objects a where
[email protected]
)
 
declare @Space4000 nchar(4000)
set @Space4000=replicate('-',4000)
 
/*
@tmpStr 會構造下面的SQL語句
-------------------------------------------------------------------------------
alter trigger Tr_Name on Table_Name with encryption for update as return /**/
alter proc Proc_Name with encryption  as select 1 as col /**/
alter view View_Name with encryption as select 1 as col /**/
alter function Fn_Name() returns int with encryption as begin return(0) end/**/
*/
set @Oject1=quotename(object_schema_name(@objectID))+'.'+quotename(@Object)
set @tmpStr=
        case     
            when @type ='P ' then N'Alter Procedure '
[email protected]
+' with encryption as select 1 as column1 '
            when @type ='V ' then N'Alter View '[email protected]+' with encryption as select 1 as column1 '
            when @type ='FN' then N'Alter Function '[email protected]+'() returns int with encryption as begin return(0) end '
            when @type ='IF' then N'Alter Function '
[email protected]
+'() returns table with encryption as return(Select a.name from sys.types a) '
            when @type ='TF' then N'Alter Function '[email protected]+'() returns @t table(name nvarchar(50)) with encryption as begin return end '
            else 'Alter Trigger '[email protected]+'on '+quotename(object_schema_name(@objectID))+'.'+(select Top(1) quotename(object_name(parent_id)) from sys.triggers a where [email protected])+' with encryption for update as return ' 
        end        
 
    
set @[email protected]+'/*'[email protected]
set @i=0
while @i < (ceiling(@MaxLength*1.0/4000)-1)
begin
    set @[email protected]+ @Space4000
    Set @[email protected]+1
end
set @[email protected]+'*/'
 
------------
set @imageval =(select top(1) a.imageval from sys.sysobjvalues a where [email protected] and a.valclass=1)
 
begin tran
exec(@tmpStr)
set @tmpStr_imageval =(select top(1) a.imageval from sys.sysobjvalues a where [email protected] and a.valclass=1)
 
rollback tran
 
-------------
set @tmpStr=stuff(@tmpStr,1,5,'create')
set @sql=''
set @i=1
while @i<= (datalength(@imageval)/2)
begin
    set @[email protected]+isnull(nchar(unicode(substring(@tmpStr,@i,1)) ^ unicode(substring(@tmpStr_imageval,@i,1))^unicode(substring(@imageval,@i,1)) ),'')
    Set @i+=1
end
 
/* 2. 列印 */
 
 
declare @patindex int    
while @sql>''
begin
    
    set @patindex=patindex('%'+char(13)+char(10)+'%',@sql)
    if @patindex >0
    begin
        print substring(@sql,1,@patindex-1)
        set @sql=stuff(@sql,1,@patindex+1,'')
    end    
    else 
    begin
        set @patindex=patindex('%'+char(13)+'%',@sql)
        if @patindex >0
        begin
            print substring(@sql,1,@patindex-1)
            set @sql=stuff(@sql,1,@patindex,'')
        end
        else
        begin
            set @patindex=patindex('%'+char(10)+'%',@sql)
            if @patindex >0
            begin
                print substring(@sql,1,@patindex-1)
                set @sql=stuff(@sql,1,@patindex,'')
            end        
            else
            begin
                print @sql
                set @sql=''
            end    
        end        
    end
        
end
 
Go
exec sp_ms_marksystemobject 'sp_DecryptObject' --標識為系統物件

go

dac 登入

檔案 新建  資料庫引擎查詢  admin:服務名

use test
go
exec sp_DecryptObject MyTrigger
go

轉自 https://www.cnblogs.com/wghao/archive/2012/12/30/2837642.html

相關推薦

儲存過程進行加密解密(SQL 2008/SQL 2012)

Use masterGoif object_ID('[sp_DecryptObject]') is not null    Drop Procedure [sp_DecryptObject]Gocreate procedure sp_DecryptObject (    @O

以壓縮包的形式資料夾進行加密解密

package jzj.timingtraining.security; import java.io.File; import java.io.IOException; import java.security.GeneralSecurityException; imp

xp環境下資料夾進行加密解密

1.在開始選單裡開啟命令提示符(XP在執行裡輸入cmd) 2.用md命令建立資料夾,現以在E盤根目錄建立niu資料夾為例 鍵入md E://niu..// 注意,有2個點,還有斜槓,這是關鍵! 3.在我的電腦裡雙擊E://目錄下的niu.資料夾,結果提示錯誤。呵呵,正常是打不開的~ 4.如果自己要開啟資料夾,

利用反射機制建立工具類資料進行加密解密

對資料庫的資料進行加密,包括使用者資料、專案資料、聊天資料等,需要在插入表的的時候進行加密,查詢的時候進行解密。利用java的反射機制,建立以下工具類,對資料進行加解密。 public class CryptoUtil { /** * 加密、解密方法 * @param ob

java 使用AES資料進行加密解密

最近做的聊天功能,李老闆希望對聊天的資料進行加密,然後存入資料庫,首先想到的便是AES加密的方式,以前也用過幾次,這次正好記錄下來: MD5加密是不可逆的,可以對使用者的密碼加密; AES加密是可逆的,可以對資料庫的資料進行加密,因為使用者查詢資料時,要返回明文,適合。 publ

java按行讀取檔案並檔案進行加密解密

package com.alibaba.datax.plugin.reader.selfxmlfilereader.util; import java.io.UnsupportedEncodingException; import java.security

Linux下利用openssl檔案進行加密解密

--建立檔案test.txt, 特意寫入中英文 # cd /tmp # echo "test測試" > test.txt--開始加密, 使用aes-128-cbc演算法, 也可以使用其他演算法, 通過檢視openssl的幫助可獲知 # openssl aes-128-

登入記住使用者名稱密碼時使用者名稱密碼進行加密解密

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="js/jquer

如何運用OpenSSL 檔案進行加密解密

我們在平時的 Linux 運維管理的時候,經常會進行各種資料備份任務。將資料匯出然後打包。通常在安全性要求比較高的環境下,我們可以藉助 OpenSSL 工具對打包後的資料進行加密,這樣能進一步的保障資料的安全性。OpenSSL 使用密碼方式加密或解密檔案1. 使用 opens

什麽是私有密鑰密碼技術——密鑰加密算法采用同一把密鑰進行加密解密

解密 網絡安全 位操作 線性復雜 對稱 大量 控制 全局 相位 什麽是私有密鑰密碼技術 私有密鑰(Symmetric Key),又叫對稱密鑰。密鑰加密算法采用同一把密鑰進行加密和解密。它的優點是加密和解密速度非常快,但密鑰的分發和管理比較困難。信息的發送者和接收者必須明確同

javascript頁面簡單的加密解密

最近看了幾個頁面,發現好多都是經過處理的。不過,裡面附帶著一段javascrpit處理加密的頁面。下面就簡單說說加密和解密的過程。一、加密1、將字串中的每個字元轉換為數字形式方法是 字串處理的方法 charCodeAt(index)charCodeAt() 方法可返回指定位置

使用TFS儲存過程進行版本控制

一。建立SQL SERVER 2008解決方案     1.在SQL SERVER 2008中,點選檔案->新建->專案,輸入一個專案名,點選確定即建立了一個解決方案     2.在解決方案資源管理器視窗中選中連線資料夾->右鍵->新建連線,新增一個

(收藏)SQL SERVER 儲存過程加密解密

create PROCEDURE sp_decrypt(@objectname varchar(50))ASbeginset nocount on--CSDN:j9988 copyright:2004.07.15 --V3.2 --破解位元組不受限制,適用於SQLSERVER

字串進行簡單的加密解密處理

  //加密字串 function encryptstr(const s:string; skey:string):string; var     i,j: integer;     hexS,hexskey,midS,tmpstr:string;     a,b,c:by

使用 Oracle的儲存過程實現資料加密解密

 我們都知道,幾乎所有的資料庫都有儲存過程,但在實際開發中,它有什麼用途了?下面使用Oracle的儲存過程,採用Oracle自帶的dbms_obfuscation_toolkit.desencrypt

使用Python進行AES加密解密

Coding color www tor 修改 1年 add 思想 href 摘錄於:http://blog.csdn.net/nurke/article/details/77267081 另外參考:http://www.cnblogs.com/kaituorensheng

系統安全之數據的加密解密、CA的介紹、SSL或TLS協議簡介及握手過程

網絡運維 網絡通信需要安全 所謂的網絡通信就是進程與進程之間的通信 然而進程的通信一般可以分成兩類:1、同一主機之間的進程通信

【itext學習之路】-------(第三篇)pdf文件進行加密許可權設定

上篇文章,我們學習了pdf的屬性設定,但是我們知道,在實際開發中,如果pdf文件被黑客盜取的話,那麼pdf中的資訊就會被洩露,因此本篇文章將會介紹pdf的加密設定,並且設定許可權。 首先我們要說明的是,itext中對pdf文件的加密包括兩部分,第一部分是使用者密

Python進行AES加密解密

本文參考於部落格:http://www.cnblogs.com/kaituorensheng/p/4501128.html 高階加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這

T-SQL 無引數的儲存過程的建立執行

1 use StudentManager 2 go 3 if exists(select * from sysobjects where name='usp_ScoreQuery') 4 drop procedure usp_ScoreQuery 5 go 6 create procedur