1. 程式人生 > >SQL Server 禁用擴充套件儲存過程

SQL Server 禁用擴充套件儲存過程

概述  

擴充套件儲存過程是 SQL Server 例項可以動態載入和執行的 DLL。擴充套件儲存過程是使用 SQL Server 擴充套件儲存過程 API 編寫的,可直接在 SQL Server 例項的地址空間中執行。擴充套件儲存過程可能會產生記憶體洩漏或其他降低伺服器的效能及可靠性的問題。固定伺服器角色 sysadmin 的成員可以使用 SQL Server 例項來註冊該擴充套件儲存過程,然後授予其他使用者執行該過程的許可權。擴充套件儲存過程只能新增到 master 資料庫中。有一些系統自帶的擴充套件儲存過程操作的許可權非常的高,包括修改登錄檔和修改檔案的許可權,比如“xp_cmdshell”。為了保證資料庫的安全需要將這部分擴充套件儲存過程給禁用。如果你們公司需要面臨ICP備案的話那麼這個事情是必須要做的。

需要禁用的擴充套件儲存過程包括:

SELECT  object_name,state from  sys.system_components_surface_area_configuration 
WHERE state=1 and object_name IN (
'xp_regdeletevalue',
'xp_regremovemultistring',
'xp_regwrite',
'xp_regaddmultistring',
'xp_regdeletekey',
'xp_enumerrorlogs',
'xp_enumgroups',
---不中檢視中
'xp_loginconfig', 'xp_getfiledetails', 'xp_regenumvalues', 'sp_makewebtask', ---對應系統外圍配置'xp_cmdshell' 'xp_cmdshell', ---對應系統外圍配置'Ole Automation Procedures' 'Sp_OACreate', 'Sp_OADestroy', 'Sp_OAGetErrorInfo', 'Sp_OAGetProperty', 'Sp_OAMethod', 'Sp_OASetProperty', 'Sp_OAStop' )

一、禁用擴充套件儲存過程

有一些擴充套件儲存過程它是屬於伺服器外圍配置選項,可以使用sp_configure來開啟和禁用。例如xp_cmdshell

---開啟xp_cmdshell
sp_configure 'show advanced options', 1;
GO
sp_configure 'allow updates',0 ---開啟允許更新系統表,當更改系統配置選項時提示不執行對系統目錄即時更新時需要開啟改功能
go
reconfigure;
go
sp_configure 'xp_cmdshell', 1;----開啟xp_cmdshell
go
reconfigure;
go
sp_configure 'allow updates',1----關閉更新系統表功能
go
sp_configure 'show advanced options', 0;

go
---關閉xp_cmdshell
sp_configure 'show advanced options', 1;
GO
sp_configure 'allow updates',0 ---開啟允許更新系統表
go
reconfigure;
go
sp_configure 'xp_cmdshell', 0;----關閉xp_cmdshell
go
reconfigure;
go
sp_configure 'allow updates',1----關閉更新系統表功能
go
sp_configure 'show advanced options', 0;

二、拒絕授予擴充套件儲存過程的可執行許可權

而除了系統外圍配置選項涉及的擴充套件儲存過程可以通過sp_configure開啟和禁用之外,剩下的系統擴充套件儲存過程只能通過拒絕授予可執行許可權的方式來禁用。

從SQLServer2005開始就不能通過sp_dropextendedproc 刪除系統擴充套件儲存過程

可以通過拒絕 public 角色對擴充套件儲存過程的 EXECUTE 許可權

select 'DENY EXECUTE ON '+object_name+' TO public',object_name,state from  sys.system_components_surface_area_configuration 
WHERE state=1 and object_name IN (
'xp_regdeletevalue',
'xp_regremovemultistring',
'xp_regwrite',
'xp_regaddmultistring',
'xp_regdeletekey',
'xp_enumerrorlogs',
'xp_enumgroups',
---不中檢視中
'xp_loginconfig',
'xp_getfiledetails',
'xp_regenumvalues',
'sp_makewebtask',
---對應系統外圍配置'xp_cmdshell'
'xp_cmdshell',
---對應系統外圍配置'Ole Automation Procedures'
'Sp_OACreate',
'Sp_OADestroy',
'Sp_OAGetErrorInfo',
'Sp_OAGetProperty',
'Sp_OAMethod',
'Sp_OASetProperty',
'Sp_OAStop'
);

三、查詢許可權

USE MASTER
;
WITH CET AS(
SELECT  'DENY EXECUTE ON '+object_name+' TO public' AS DenySQL,object_name,state from  sys.system_components_surface_area_configuration 
WHERE state=1 and object_name IN (
'xp_regdeletevalue',
'xp_regremovemultistring',
'xp_regwrite',
'xp_regaddmultistring',
'xp_regdeletekey',
'xp_enumerrorlogs',
'xp_enumgroups',
---不中檢視中
'xp_loginconfig',
'xp_getfiledetails',
'xp_regenumvalues',
'sp_makewebtask',
---對應系統外圍配置'xp_cmdshell'
'xp_cmdshell',
---對應系統外圍配置'Ole Automation Procedures'
'Sp_OACreate',
'Sp_OADestroy',
'Sp_OAGetErrorInfo',
'Sp_OAGetProperty',
'Sp_OAMethod',
'Sp_OASetProperty',
'Sp_OAStop'
)
)
 
SELECT A.name,schema_name(A.schema_id) [schema],A.type,b.permission_name,B.type,B.state_desc,C.name,c.type_desc    
FROM sys.all_objects AS A      
LEFT JOIN sys.database_permissions AS B ON B.major_id=A.object_id AND B.minor_id=0 AND B.class=1      
LEFT JOIN sys.database_principals AS C ON C.principal_id = B.grantee_principal_id      
where A.name IN(SELECT object_name FROM CET)   
ORDER BY A.name 

參考:http://blog.csdn.net/kk185800961/article/details/52188556

參考:https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-dropextendedproc-transact-sql

總結

備註:

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明連結,否則保留追究責任的權利。

《歡迎交流討論》

相關推薦

SQL Server 禁用擴充套件儲存過程

概述   擴充套件儲存過程是 SQL Server 例項可以動態載入和執行的 DLL。擴充套件儲存過程是使用 SQL Server 擴充套件儲存過程 API 編寫的,可直接在 SQL Server 例項的地址空間中執行。擴充套件儲存過程可能會產生記憶體洩漏或其他降低伺服器的效能及可靠性的問題。固定伺服器

SQL server 2012 中儲存過程除錯

1、儲存過程無法直接除錯 選中要除錯的儲存過程,右擊“執行儲存過程”,根據是否需要輸入引數,若需要則可以先隨便輸入,跳轉到Exec 頁面後,輸入正確合理的引數進行,F10,開始除錯,F11,進入到被呼叫的儲存過程中。 結論:無法很好的與C#客戶端程式聯合起

Sql Server 2008中儲存過程傳入表值引數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Sql server動態載入儲存過程--分頁

create procedure [dbo].[pro_getStu] ( @pindex int,  --最小是1,第1頁 @psize int, @name nvarchar, @dbcount int&n

sql server事務 鎖 儲存過程 索引 觸發器

1.事務:保證一個多操作的事情全部完成,否則回到做之前的狀態 begin try begin tran–設定反悔點,開啟事務 delete from UserInfo where UserId>5 delete from ClassInfo commit tran–不反悔,提交事務 e

SQL Server資料庫的儲存過程中定義的臨時表,真的有必要顯式刪除(drop table #tableName)嗎?

問題背景 在寫SQL Server儲存過程中,如果儲存過程中定義了臨時表,有些人習慣在儲存過程結束的時候一個一個顯式地刪除過程中定義的臨時表(drop table #tName),有些人又沒有這個習慣,對於不明真相的群眾或者喜歡思考的人會問,儲存過程中定義的臨時表,最後要不要主動刪除,為什麼

Sql Server與Oracle儲存過程轉換

在sql 向oracle 遷移過程中,最頭疼的也許就是儲存過程的轉換了,之前利用sql/developer 將sql 資料遷移到oracle 裡面去了,但是對於儲存過程來說,還需要進行大量的後續更改,

SQL SERVER常用系統儲存過程

--獲得MS SQL的版本號 execute master..sp_msgetversion --得到硬碟檔案資訊 --引數說明:目錄名,目錄深度,是否顯示檔案 execute master..xp_dirtree 'c:' execute master..xp_dirtr

sql server之在儲存過程中利用OpenJson將Json字串轉化為表格

在Sql server2016的版本後,資料庫增加了對Json格式的支援,詳細資訊可以參考微軟官方文件連結 應用背景 線上訂餐系統中,購物車的內容儲存在瀏覽器快取中,所以資料庫關於訂單的設計是訂單表(訂單ID,送貨地址,使用者ID,,,,,),訂單明細表(訂

C#呼叫SQL Server分頁儲存過程

以SQL Server2012提供的offset ..rows fetch next ..rows only為例e.g.表名:Tab1 ---------------------------------- ID Name 1 tblAttributeGroupDetail 2

SQL Server基礎之儲存過程

if (object_id('book_page', 'P') is not null) drop proc book_page go create proc book_page( @TableName varchar(50), --表名 @ReFi

C#呼叫Sql Server 2008的儲存過程流程

前言 最近用到了sql server 2008的儲存過程,特此整理成文 流程步驟 1.獲取連結 SqlConnection myConnection = new SqlConnec

Sql Server 常用系統儲存過程大全

EXEC xp_cmdshell --*執行DOS各種命令,結果以文字行返回。 EXEC xp_fixeddrives --*查詢各磁碟/分割槽可用空間 EXEC xp_loginconfig --*報告SQL Server 例項在Windows 上執行時的登入安全配置

SQL server觸發器、儲存過程操作遠端資料庫插入資料,解決伺服器已存在的問題

最近弄了一個小專案,也不是很複雜,需要將一個數據庫的一些資料備份到另外一個庫,不是本地,可能是網路上其他的資料庫,想了一下,用了儲存過程和觸發器。也不是很複雜,首先我需要操作遠端資料庫,於是寫了一個儲存過程: CREATE PROCEDURE sendInfoToRemo

VC6.0通過ADO呼叫SQL Server 2000的儲存過程出現引數過多的問題

今天在做畢業設計的時候遇到一個很奇怪的問題,我以前通過傳遞三個引數的儲存過程呼叫都還是很成功的,為什麼今天就不行了呢?程式碼如下: HRESULT hr; if (m_pCmd == NULL) { hr = m_pCmd.Creat

SQL Server 2014存儲過程的備份和還原

語句 誤刪除 記事本 nbsp 位置 管理軟件 使用 恢復 ima Sql Server 2014存儲過程備份和恢復... 1 1、 備份存儲過程:... 1 2、 還原... 8 Sql Server 2014存儲過程備份和恢復 1、 備份存儲過程

SQL Server解密存儲過程

objectid tmp soft fig stroke print tool 解密 語句 SQL Server 對象加密方法:在存儲過程,函數,視圖的“As”位置前加上“with encryption”;如果是觸發器,就在“for”位置前加“with en

初學Delphi與sql server的存儲過程

OS har grid dataset tex 服務器 編譯 執行 delphi 照舊,先上delphi的界面控件布局: 1個adoconnection、1個adoquery、1個DataSource、1個button、1個dbgrideh(隨意) 前期準備:1、設

SQL Server 2008 r2 安裝過程圖解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

sqlserver 只有函式和擴充套件儲存過程才能從函式內部執行

一個SQLServer的自定義函式中呼叫一個自定義的儲存過程,執行此函式後發出如下提示:“只有函式和擴充套件儲存過程才能從函式內部執行"。原因:函式只能使用簡單的sql語句,邏輯控制語句,複雜一點的儲存過程是不能呼叫的,在函式裡也不能使用execute sp_executesql 或者execute 。解決方