怎樣修改SQL Server 2005/2008的系統存儲過程(轉)


我們知道,SQL Server 2005/2008的系統存儲過程在正常情況下是無法直接修改的。

盡管本文是介紹怎樣修改它的,但在這里,我還是建議大家盡量不要去修改它。(好像有點繞哈...)

OK,閑話少說,下面我舉個實際案例講解一下,如對於系統存儲過程sp_Monitor,若要運行此存儲過程,用戶必須是 sysadmin 固定服務器角色的成員。

通過執行命令:sp_helptext 'sp_Monitor',我們可以看到,該過程中存在這樣的語句:

 

[c-sharp]  view plain copy
 
  1. if (not (is_srvrolemember('sysadmin') = 1))  -- Make sure that it is the SA executing this.  
  2.         begin  
  3.                 raiserror(15247,-1,-1)  
  4.                 return(1)  
  5.         end  

 

 

在這里,我想將該過程中的這些語句去掉,讓它能被普通用戶執行。下面是具體的修改步驟:

 

1、停止SQL Server服務

2、進入命令提示行模式。依次執行以下命令:

   1)  cd C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/Binn  --注:這是SQL 2005的默認安裝目錄,如你改變了實際安裝路徑,請按實際修改

   2)  sqlservr -s MSSQLSERVER -m --注:啟動SQL Server服務,-s 指定實例名稱(這里的實例名稱是MSSQLSERVER,可按實際修改), -m 指定以單用戶管理模式啟動

3、以數據庫專用管理員(DAC)方式連接SSMS (此處可參見 SQL Server 數據庫專用管理員DAC連接方式)

4、執行語句:USE mssqlsystemresource

     這里,我友情說明一下,mssqlsystemresource是一個系統數據庫,它存儲了所有系統存儲過程、視圖和函數。但它對於所有用戶來說,都是不可見的,也就是說,在SSMS、sys.databases等里面,你都看不到它,如果在非DAC連接下,執行上述語句,系統會報錯。

5、執行語句:alter database mssqlsystemresource set read_write  --將mssqlsystemresource置為可修改狀態,mssqlsystemresource數據庫默認是只讀的。

6、sp_helptext 'sp_Monitor'  --顯示該存儲過程的源代碼,你可將sp_Monitor改成你實際要改的存儲過程名。

7、拷貝步驟6的結果,將create proc改成alter proc,並按你的實際需求修改代碼,這里,我將前述的"if (not (is_srvrolemember('sysadmin') = 1))  -- Make sure that it is the SA executing this......"等語句去掉。

8、執行修改后的語句。 --到這一步為止,系統存儲過程sp_Monitor已經被我們改了。

9、alter database mssqlsystemresource set read_only  --將mssqlsystemresource還原為只讀狀態

10、最后,停止SQL Server服務,並以正常方法重新啟動SQL Server.

 

老實說,上面的方法顯得較為繁瑣,不得萬不得已,我不推薦使用。(再強調一次)

 

其實,可以拷貝系統存儲過程的源代碼到一個新建的存儲過程中,然后再對這個新建的存儲過程進行修改,在使用的時候,直接調用這個新過程即可。同樣可以達到目的,而且還沒有任何副作用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM