ms-access
パラメータ化されたクエリ
サーチ…
前書き
パラメータ化クエリは、SQLインジェクション攻撃を防御するために使用できます。
脆弱なアプローチ:フォーム参照によるSQL文字列の連結
これは、初心者の開発者がSQLアクションクエリを作成する典型的なアプローチです。彼らはBobby Tables型のSQLインジェクション攻撃に対して脆弱です。
Dim strSQL As String
strSQL = "INSERT INTO Employees chrFirstName, chrLastName, chrPhone " _
& "VALUES ('" & Me!txtFirstName & "','" & Me!txtLastName & "','" & Me!txtPhone & "');"
CurrentDb.Execute strSQL
QueryDefパラメータ化されたクエリのアプローチ
この方法では、ユーザーが実行のために2番目のSQLステートメントを入力に埋め込むことができなくなります。
Dim strSQL As String
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
strSQL = "PARAMETERS [FirstName] Text(255), [LastName] Text(255), [Phone] Text(255); " _
& "INSERT INTO Employees (chrFirstName, chrLastName, chrPhone) " _
& "VALUES ([FirstName], [LastName], [Phone]);"
Set db = CurrentDb
Set qdf = db.CreateQueryDef("", strSQL)
qdf.Parameters("FirstName") = Me!txtFirstName
qdf.Parameters("LastName") = Me!txtLastName
qdf.Parameters("Phone") = Me!txtPhone
qdf.Execute
Me!txtFirstName = vbNullString
Me!txtLastName = vbNullString
Me!txtPhone = vbNullString
qdf.Close
db.Close
Set qdf = Nothing
Set db = Nothing
有効なパラメータの種類:
-
DATETIME:日付(パラメータはVBADate) -
SHORT、LONG:整数の場合(SHORTはIntegerを期待し、LONGはLongを期待します) -
SINGLE、DOUBLE:浮動小数点の場合(それぞれシングルとダブルが必要) -
VARCHARまたはTEXT:文字列の場合 -
MEMOまたはLONGTEXT:255文字を超える文字列の場合
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow