對儲存過程進行加密和解密(SQL 2008/SQL 2012)
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
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 '
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 '
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