傳統 ASP (Active Server Pages) 透過 ADO 連接 SQL Server,常用三種連接字串模式:ODBC DSN、OLE DB Provider、ODBC Driver。本文提供完整可複製部署的範本,含登入驗證實作與連接物件管理最佳實務。
MySQLDSN)、描述、伺服器名稱/IP。<%
Dim conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DSN=MySQLDSN;UID=sa;PWD=your_password;" ' DSN 已含資料庫,UID/PWD 可選
%>
<%
Dim conn, connStr
connStr = "Provider=SQLOLEDB.1;Data Source=YourServerIP;Initial Catalog=YourDB;User ID=sa;Password=your_password;"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connStr
%>
Data Source:伺服器名稱、IP、或 localhost/(local)。Initial Catalog:資料庫名稱。Integrated Security=SSPI; 移除 UID/PWD。<%
Dim conn, connStr
connStr = "Driver={SQL Server};Server=YourServerIP;Database=YourDB;UID=sa;PWD=your_password;"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connStr
%>
<%
' 建議放在 Application_OnStart 或快取中,避免重複建立
Dim connStr
connStr = "Provider=SQLOLEDB.1;Data Source=192.168.1.50;Initial Catalog=MyForum;User ID=web_user;Password=Str0ngP@ss;"
%>
<form action="login_check.asp" method="post">
帳號: <input name="username" type="text" required><br>
密碼: <input name="pwd" type="password" required><br>
<input type="submit" value="登入">
</form>
<%
Dim conn, rs, sql, username, pwd
username = Trim(Request.Form("username"))
pwd = Trim(Request.Form("pwd"))
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open Application("connStr") ' 假設全域變數或 include conn.asp
Set rs = Server.CreateObject("ADODB.Recordset")
sql = "SELECT UserID, PasswordHash, Salt FROM Users WHERE Username = ?"
' 參數化查詢防 SQL Injection
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandText = sql
cmd.CommandType = 1 ' adCmdText
cmd.Parameters.Append cmd.CreateParameter("@username", 200, 1, 50, username) ' adVarChar, adParamInput
Set rs = cmd.Execute
If rs.EOF Then
Response.Write "帳號不存在,請先註冊。"
Else
' 這裡應使用 bcrypt/Argon2 驗證,示範用簡單比對
If rs("PasswordHash") = HashPassword(pwd, rs("Salt")) Then
Session("UserID") = rs("UserID")
Session("Username") = username
Response.Redirect "index.asp"
Else
Response.Write "密碼錯誤。"
End If
End If
rs.Close: Set rs = Nothing
conn.Close: Set conn = Nothing
Function HashPassword(pwd, salt)
' 實際請用 Server.CreateObject("System.Security.Cryptography.BCrypt") 或第三方元件
HashPassword = pwd ' 僅示範
End Function
%>
| 原則 | 做法 |
|---|---|
| 盡早開啟、盡早關閉 | 在需要查詢前開啟,讀完資料立即 Close、Set ... = Nothing |
| 連接共用 | 相同連接字串自動共用連接池;避免每頁建立不同字串 |
| 錯誤處理 | On Error Resume Next 搭配 Err.Number 判斷,記錄日誌、友善提示 |
| 參數化查詢 | 永遠使用 Command + Parameters,絕不拼接字串 |
| 最小權限 | 網站用帳號僅授 db_datareader/db_datawriter 或預存程序執行權 |
;Codepage=65001 或確保資料庫/欄位排序規則支援 Unicode (NVARCHAR)。雖然 ASP 屬經典技術,但許多舊系統仍在運作。掌握正確連接模式與安全寫法,能延長系統壽命並降低風險。