SQL-DMO (Distributed Management Objects) 允許在 VBA/VB/ASP 中程式化管理 SQL Server。本文提供三個核心功能的完整 VBA 實作:SQL Server 驗證登入、Windows 整合驗證登入、變更伺服器驗證模式。
VBA 編輯器 → 「工具」→「參考」→ 勾選 Microsoft SQLDMO Object Library。
Sub SQLDMOSQLServerLogin(srvName As String, suid As String, pwd As String)
Dim srv As SQLDMO.SQLServer
Set srv = New SQLDMO.SQLServer
On Error GoTo ErrHandler
srv.Connect srvName, suid, pwd
MsgBox "SQL Server 驗證登入成功: " & srvName
srv.Disconnect
Exit Sub
ErrHandler:
MsgBox "登入失敗: " & Err.Description
Resume Next
End Sub
Sub SQLDMOWindowsLogin(srvName As String)
Dim srv As SQLDMO.SQLServer
Set srv = New SQLDMO.SQLServer
On Error GoTo ErrHandler
srv.LoginSecure = True ' 關鍵:啟用信任連接
srv.Connect srvName ' 僅傳遞伺服器名稱
MsgBox "Windows 驗證登入成功: " & srvName
srv.Disconnect
Exit Sub
ErrHandler:
MsgBox "登入失敗: " & Err.Description
Resume Next
End Sub
Sub ChangeServerAuthenticationMode(authMode As Long)
' authMode 常數:
' SQLDMOSecurity_Integrated (=1) : Windows 驗證模式
' SQLDMOSecurity_Mixed (=2) : 混合模式
Dim srv As SQLDMO.SQLServer
Set srv = New SQLDMO.SQLServer
On Error GoTo ErrHandler
' 必須使用 Windows 驗證連入才能變更模式
srv.LoginSecure = True
srv.Connect "(local)"
srv.SecurityMode = authMode
MsgBox "驗證模式已變更為: " & IIf(authMode = 1, "Windows 驗證", "混合模式")
srv.Disconnect
Exit Sub
ErrHandler:
MsgBox "變更失敗: " & Err.Description & vbCrLf & "請確認目前使用 Windows 驗證且具備 sysadmin 權限。"
Resume Next
End Sub
Sub Demo()
' 1. SQL Server 驗證登入測試
Call SQLDMOSQLServerLogin("(local)", "sa", "YourStrongPassword")
' 2. Windows 驗證登入測試
Call SQLDMOWindowsLogin("(local)")
' 3. 切換為混合模式 (需以 Windows 管理員身分執行)
Call ChangeServerAuthenticationMode(SQLDMOSecurity_Mixed)
' 4. 切換為 Windows 驗證模式
Call ChangeServerAuthenticationMode(SQLDMOSecurity_Integrated)
End Sub
LoginSecure = True (Windows 驗證)。SQLDMOSecurity_Integrated = 1, SQLDMOSecurity_Mixed = 2 (於 SQLDMO 型別庫中定義)。掌握 SQL-DMO 核心物件 (SQLServer.LoginSecure, Connect, SecurityMode) 即可程式化完成 SQL Server 驗證管理的常見作業,適用於自動化部署腳本、管理工具開發與安全性稽核程式。