導航:首頁 > 文檔加密 > sqlserver如何加密存儲過程

sqlserver如何加密存儲過程

發布時間:2022-06-10 11:39:18

❶ 怎麼破解sqlserver加密的存儲過程

在另外一台電腦上裝資料庫,然後將加密所在存儲的資料庫恢復上去即可。

❷ 如何對存儲過程,包的源代碼加密

在PL/SQL developer中先執行包頭、然後再wrap加密包體 SQL> create or replace package pkg_wrap_test is 2 --測試過程,將輸入的數字以字元格式輸出 3 procere test1(i in number); 4 END pkg_wrap_test; 5 /

❸ sqlserver怎麼創建存儲過程

什麼是存儲過程?
q 存儲過程(procere)類似於C語言中的函數
q 用來執行管理任務或應用復雜的業務規則
q 存儲過程可以帶參數,也可以返回結果
q 存儲過程可以包含數據操縱語句、變數、邏輯 控制語句等

存儲過程的優點
(1)執行速度快。
存儲過程創建是就已經通過語法檢查和性能優化,在執行時無需每次編譯
存儲在資料庫伺服器,性能高。
(2)允許模塊化設計。
只需創建存儲過程一次並將其存儲在資料庫中,以後即可在程序中調用該過程任意次。存儲過程可由在資料庫編程方面有專長的人員創建,並可獨立於程序源代碼而單獨修改 。
(3)提高系統安全性。
可將存儲過程作為用戶存取數據的管道。可以限制用戶對數據表的存取許可權,建立特定的存儲過程供用戶使用,完成對數據的訪問。
存儲過程的定義文本可以被加密,使用戶不能查看其內容。
(4)減少網路流量:
一個需要數百行Transact-SQL代碼的操作由一條執行過程代碼的單獨語句就可實現,而不需要在網路中發送數百行代碼。

存儲過程的分類
q 系統存儲過程
q 由系統定義,存放在master資料庫中
q 類似C語言中的系統函數
q 系統存儲過程的名稱都以「sp_」開頭或」xp_」開頭
q 用戶自定義存儲過程
q 由用戶在自己的資料庫中創建的存儲過程
q 類似C語言中的用戶自定義函數

常用的系統存儲過程

系統存儲過程

說明

sp_databases

列出伺服器上的所有資料庫。

sp_helpdb

報告有關指定資料庫或所有資料庫的信息

sp_renamedb

更改資料庫的名稱

sp_tables

返回當前環境下可查詢的對象的列表

sp_columns

回某個表列的信息

sp_help

查看某個表的所有信息

sp_helpconstraint

查看某個表的約束

sp_helpindex

查看某個表的索引

sp_stored_proceres

列出當前環境中的所有存儲過程。

sp_password

添加或修改登錄帳戶的密碼。

sp_helptext

顯示默認值、未加密的存儲過程、用戶定義的存儲過程、觸發器或視圖的實際文本。

EXEC sp_databases /*列出當前系統中的資料庫*/
EXEC sp_renamedb 'Northwind','Northwind1' /*修改資料庫的名稱(單用戶訪問, 最簡單的辦法就是執行SQL語句時關掉企業管理器)*/
USE stuDB
GO
EXEC sp_tables /*當前資料庫中查詢的對象的列表*/
EXEC sp_columns stuInfo /*返回某個表列的信息*/
EXEC sp_help stuInfo /*查看錶stuInfo的信息*/
EXEC sp_helpconstraint stuInfo /*查看錶stuInfo的約束*/
EXEC sp_helpindex stuMarks /*查看錶stuMarks的索引*/
EXEC sp_helptext 'view_stuInfo_stuMarks' /*查看視圖的語句文本*/
EXEC sp_stored_proceres /*查看當前資料庫中的存儲過程*/

常用的擴展存儲過程
q 常用的擴展存儲過程:xp_cmdshell
q 可以執行DOS命令下的一些的操作
q 以文本行方式返回任何輸出
q 調用語法:
q EXEC xp_cmdshell DOS命令 [NO_OUTPUT]
USE master
GO
EXEC xp_cmdshell 'mkdir d:/bank', NO_OUTPUT /*創建文件夾D:/bank*/
IF EXISTS(SELECT * FROM sysdatabases
WHERE name='bankDB')
DROP DATABASE bankDB
GO
CREATE DATABASE bankDB
(

)
GO
EXEC xp_cmdshell 'dir D:/bank/' --查看文件 /*查看文件夾D:/bank*/

如何創建存儲過程?
q 定義存儲過程的語法
CREATE PROC[EDURE] 存儲過程名
@參數1 數據類型 = 默認值,
…… ,
@參數n 數據類型 OUTPUT
AS
SQL語句
GO
q 和C語言的函數一樣,參數可選
q 參數分為輸入參數、輸出參數
q 輸入參數允許有默認值

創建不帶參數的存儲過程
CREATE PROCEDURE proc_stu /* proc_stu為存儲過程的名稱*/
AS
DECLARE @writtenAvg float,@labAvg float /* 筆試平均分和機試平均分變數 */
SELECT @writtenAvg=AVG(writtenExam),
@labAvg=AVG(labExam) FROM stuMarks
print '筆試平均分:'+convert(varchar(5),@writtenAvg)
print '機試平均分:'+convert(varchar(5),@labAvg)
IF (@writtenAvg>70 AND @labAvg>70)
print '本班考試成績:優秀' /* 顯示考試成績的等級 */
ELSE
print '本班考試成績:較差'
print '--------------------------------------------------'
print ' 參加本次考試沒有通過的學員:'
SELECT stuName,stuInfo.stuNo,writtenExam,labExam /* 顯示未通過的學員 */
FROM stuInfo INNER JOIN stuMarks ON
stuInfo.stuNo=stuMarks.stuNo
WHERE writtenExam<60 OR labExam<60
GO

調用存儲過程
q EXECUTE(執行)語句用來調用存儲過程
q 調用的語法
EXEC 過程名 [參數]

創建帶參數的存儲過程
q 存儲過程的參數分兩種:
q 輸入參數
q 輸出參數
q 輸入參數:
用於向存儲過程傳入值,類似C語言的按值傳遞;
q 輸出參數:
用於在調用存儲過程後,
返回結果,類似C語言的
按引用傳遞;

帶輸入參數的存儲過程
問題:
修改上例:由於每次考試的難易程度不一樣,每次 筆試和機試的及格線可能隨時變化(不再是60分),這導致考試的評判結果也相應變化。

分析:
在述存儲過程添加2個輸入參數:
@writtenPass 筆試及格線
@labPass 機試及格線
CREATE PROCEDURE proc_stu
@writtenPass int = 60, /*輸入參數:筆試及格線*/
@labPass int = 60 /*輸入參數:機試及格線*/
AS
print '--------------------------------------------------'
print ' 參加本次考試沒有通過的學員:'
SELECT stuName,stuInfo.stuNo,writtenExam, /*查詢沒有通過考試的學員*/
labExam FROM stuInfo
INNER JOIN stuMarks ON
stuInfo.stuNo=stuMarks.stuNo
WHERE writtenExam<@writtenPass
OR labExam<@labPass
GO
q 調用帶參數的存儲過程
假定本次考試機試偏難,機試的及格線定為55分,筆試及格線定為60分
EXEC proc_stu 60,55
--或這樣調用:
EXEC proc_stu @labPass=55,@writtenPass=60

帶輸出參數的存儲過程
q 如果希望調用存儲過程後,返回一個或多個值,這時就需要使用輸出(OUTPUT)參數了
問題:
修改上例,返回未通過考試的學員人數。
CREATE PROCEDURE proc_stu
@notpassSum int OUTPUT, /*輸出(返回)參數:表示沒有通過的人數*/
@writtenPass int=60, /*推薦將默認參數放在最後*/
@labPass int=60
AS
……
SELECT stuName,stuInfo.stuNo,writtenExam, /*統計並返回沒有通過考試的學員人數*/
labExam FROM stuInfo INNER JOIN stuMarks
ON stuInfo.stuNo=stuMarks.stuNo
WHERE writtenExam<@writtenPass
OR labExam<@labPass
SELECT @notpassSum=COUNT(stuNo)
FROM stuMarks WHERE writtenExam<@writtenPass
OR labExam<@labPass
GO
q 調用帶輸出參數的存儲過程
/*---調用存儲過程----*/
DECLARE @sum int /*調用時必須帶OUTPUT關鍵字 ,返回結果將存放在變數@sum中*/
EXEC proc_stu @sum OUTPUT ,64
print '--------------------------------------------------'
IF @sum>=3 /*後續語句引用返回結果*/
print '未通過人數:'+convert(varchar(5),@sum)+ '人,
超過60%,及格分數線還應下調'
ELSE
print '未通過人數:'+convert(varchar(5),@sum)+ '人,
已控制在60%以下,及格分數線適中'
GO
注意:調用時也必須跟隨關鍵字OUTPUT,否則SQL Server將視為輸入參數。

處理存儲過程中的錯誤
q 可以使用PRINT語句顯示錯誤信息,但這 些信息是臨時的,只能顯示給用戶
q RAISERROR 顯示用戶定義的錯誤信息時
q 可指定嚴重級別,
q 設置系統變數@@ERROR
q 記錄所發生的錯誤等
q RAISERROR語句的用法如下:
RAISERROR (msg_id | msg_str,severity,
state WITH option[,...n]])
• msg_id:在sysmessages系統表中指定用戶定義錯誤信息
• msg_str:用戶定義的特定信息,最長255個字元
• severity:定義嚴重性級別。用戶可使用的級別為0–18級
• state:表示錯誤的狀態,1至127之間的值
• option:指示是否將錯誤記錄到伺服器錯誤日誌中
RAISERROR 語句每個參數的詳細講解,可以查閱SQL幫助!
問題:
完善上例,當用戶調用存儲過程時,傳入的及格線參數不
在0~100之間時,將彈出錯誤警告,終止存儲過程的執行。
CREATE PROCEDURE proc_stu
@notpassSum int OUTPUT, --輸出參數
@writtenPass int=60, --默認參數放後
@labPass int=60 --默認參數放後
AS
IF (NOT @writtenPass BETWEEN 0 AND 100)
OR (NOT @labPass BETWEEN 0 AND 100)
/*引發系統錯誤,指定錯誤的嚴重級別16,調用狀態為1(默認),並影響@@ERROR系統變數的值 */
BEGIN
RAISERROR (『及格線錯誤,請指定0-100之間的分
數,統計中斷退出',16,1)
RETURN ---立即返回,退出存儲過程
END
…..其他語句同上例,略
GO
/*---調用存儲過程,測試RAISERROR語句----*/
DECLARE @sum int, @t int
EXEC proc_stu @sum OUTPUT ,604 /*筆試及格線誤輸入604分*/
SET @t=@@ERROR
print '錯誤號:'+convert(varchar(5),@t )
IF @t<>0 /*如果執行了RAISERROR,系統全局@@ERROR將不等於0,表示出現錯誤*/
RETURN --退出批處理,後續語句不再執行
print '--------------------------------------------------'
IF @sum>=3
print '未通過人數:'+convert(varchar(5),@sum)+ '人,超過60%,及格分數線還應下調'
ELSE
print '未通過人數:'+convert(varchar(5),@sum)+ '人,已控制在60%以下,及格分數線適中'
GO

好,我們來做個總結:
• 存儲過程是一組預編譯的SQL語句,它可以包含數據操縱語句、變數、邏輯控制語句等
• 存儲過程允許帶參數,參數分為:
– 輸入參數
– 輸出參數
其中,輸入參數可以有默認值。
• 輸入參數:可以在調用時向存儲過程傳遞參數,此類參數可用來向存儲過程中傳入值
• 輸出參數從存儲過程中返回(輸出)值,後面跟隨OUTPUT關鍵字
• RAISERROR語句用來向用戶報告錯誤

❹ sqlserver 中怎麼樣給現有的資料庫加密。就是不想把自己資料庫的存儲過程等信息給其他人看到。

如果是不想被看到存儲過程的代碼,可以在創建存儲過程時加上 with encryption進行加密存儲過程,視圖,函數等

❺ 資料庫中怎樣創建加密的存儲過程

可以例用Oracle
自帶的Wrap工具實現,此工具在$ORACLE_HOME/BIN目錄下,具體如下
1、設置字元集環境變數
set
NLS_LANG=CHINESE_CHINA.ZHS16GBK
2、創建一個存儲過程文件
在E:\下創建test.sql文件,內容如下:
create
or
replace
procere
test1(i
in
number)
as
begin
dbms_output.put_line('
輸入參數是'||to_char(i));
end;
3、加密
c:\>
cd
%ORACLE_HOME%\BIN
c:\>wrap
iname=e:\test1.sql
PL/SQL
Wrapper:
Release
8.1.7.0.0
-
Proction
on
Tue
Nov
27
22:26:48
2001
Copyright
(c)
Oracle
Corporation
1993,
2000.All
Rights
Reserved.
Processing
test1.sql
to
test1.plb
4、運行test1.plb
sqlplus
/nolog
SQL>conn
TEST/TEST@db01
SQL>
@e:\a.plb
過程已創建。
5、運行存儲過程
SQL>
set
serveroutput
on
SQL>
execute
test1(1);
輸入參數是1
PL/SQL
過程已成功完成。
6、查看存儲過程的代碼
SQL>
select
name,text
from
all_source
where
type='PROCEDURE'
and
name='TEST1';
結果:看不到其原碼

❻ SQLServer查找哪些存儲過程是已經加密的

--判斷存儲過程是否加密
select *
from sys.objects SP
left join sys.sql_moles AS smsp ON smsp.object_id = sp.object_id
where sp.type ='P'
and smsp.definition IS NULL --加密時內容為NULL
order by 1

❼ c# sqlserver 數據加密解密

比較簡單的做法是數據在存入資料庫之前用c#進行加密,然後再存入資料庫,讀取數據之後,用相應的解密方法對數據進行解密。

但是,如果你一定要在存儲過程中加密的話,可以使用c#創建好對應的加密解密方法,然後生成一個加解密的類庫dll,在sqlserver中引入該dll中的加密方法進行加密(Sqlserver調用dll的方法sqlserver調用dll),程序中可以直接調用該dll中的解密方法,也可以把解密方法直接寫在程序中。

❽ sqlserver 2008存儲過程 加密 為什麼加密

觸發器的概念及作用 觸發器是一種特殊類型的存儲過程,它不同於我們前面介紹過的存儲過程。觸發器主要是通過事件進行觸發而被執行的,而存儲過程可以通過存儲過程名字而被直接調用。當對某一表進行諸如UPDATE、 INSERT、 DELETE 這些操作時,SQL Server 就會自動執行觸發器所定義的SQL 語句,從而確保對數據的處理必須符合由這些SQL 語句所定義的規則。 觸發器的主要作用就是其能夠實現由主鍵和外鍵所不能保證的復雜的參照完整性和數據的一致性。除此之外,觸發器還有其它許多不同的功能: (1) 強化約束(Enforce restriction) 觸發器能夠實現比CHECK 語句更為復雜的約束。 (2) 跟蹤變化Auditing changes 觸發器可以偵測資料庫內的操作,從而不允許資料庫中未經許可的指定更新和變化。 (3) 級聯運行(Cascaded operation)。 觸發器可以偵測資料庫內的操作,並自動地級聯影響整個資料庫的各項內容。例如,某個表上的觸發器中包含有對另外一個表的數據操作(如刪除,更新,插入)而該操作又導致該表上觸發器被觸發。 (4) 存儲過程的調用(Stored procere invocation)。 為了響應資料庫更新觸,發器可以調用一個或多個存儲過程,甚至可以通過外部過程的調用而在DBMS( 資料庫管理系統)本身之外進行操作。 由此可見,觸發器可以解決高級形式的業務規則或復雜行為限制以及實現定製記錄等一些方面的問題。例如,觸發器能夠找出某一表在數據修改前後狀態發生的差異,並根據這種差異執行一定的處理。此外一個表的同一類型(INSERT、 UPDATE、 DELETE)的多個觸發器能夠對同一種數據操作採取多種不同的處理。 總體而言,觸發器性能通常比較低。當運行觸發器時,系統處理的大部分時間花費在參照其它表的這一處理上,因為這些表既不在內存中也不在資料庫設備上,而刪除表和插入表總是位於內存中。可見觸發器所參照的其它表的位置決定了操作要花費的時間長短。 觸發器的種類 SQL Server 2000 支持兩種類型的觸發器:AFTER 觸發器和INSTEAD OF 觸發器。其中AFTER 觸發器即為SQL Server 2000 版本以前所介紹的觸發器。該類型觸發器要求只有執行某一操作(INSERT UPDATE DELETE) 之後,觸發器才被觸發,且只能在表上定義。可以為針對表的同一操作定義多個觸發器。對於AFTER 觸發器,可以定義哪一個觸發器被最先觸發,哪一個被最後觸發,通常使用系統過程sp_settriggerorder 來完成此任務。 INSTEAD OF 觸發器表示並不執行其所定義的操作(INSERT、 UPDATE、 DELETE),而僅是執行觸發器本身。既可在表上定義INSTEAD OF 觸發器,也可以在視圖上定義INSTEAD OF 觸發器,但對同一操作只能定義一個INSTEAD OF 觸發器。 請參考

❾ SQLSERVER存儲過程加密後,是不是任意版本都可以很容易解密

是的到目前為止,SQL Server所有版本的存儲過程的加密的機理都是一樣的,都可以被非常容易的破解,前提是,有讀取存儲過程的代碼的權。
要防止用戶得到SQL Server存儲過程的真實代碼,最簡單的做法就是只給執行權,不給查看權。
至於安裝在別人伺服器上的SQL Server資料庫中的存儲過程,想不讓別人看,那基本上是沒門兒的。

閱讀全文

與sqlserver如何加密存儲過程相關的資料

熱點內容
支持dsd硬解壓音效卡 瀏覽:768
怎麼查看u盤加密區 瀏覽:181
台電加密是什麼格式 瀏覽:155
php論壇版塊在哪個文件夾 瀏覽:442
暗黑的伺服器為什麼維護 瀏覽:624
android內存溢出的原因 瀏覽:18
標志307的壓縮比是多少 瀏覽:636
伺服器啟動為什麼叫三聲 瀏覽:997
追風箏的人英文pdf 瀏覽:940
解壓小熊手機殼 瀏覽:346
成都市區建成面積演算法 瀏覽:661
智能家居單片機 瀏覽:97
買男裝用什麼app好 瀏覽:855
文件夾合並了怎麼拆開 瀏覽:260
波段副圖源碼無未來函數 瀏覽:89
livecn伺服器地址 瀏覽:259
程序員這個工作真的很吃香嗎 瀏覽:847
程序員和數學分析師待遇 瀏覽:681
壓縮氣彈簧怎麼拆 瀏覽:326
華為公有雲伺服器添加虛擬ip 瀏覽:211