ปัญหาการใส่รหัสผ่านฐานข้อมูลครับ
กระทู้เก่าบอร์ด อ.Yeadram

 917   3
URL.หัวข้อ / URL
ปัญหาการใส่รหัสผ่านฐานข้อมูลครับ

สวัสดีครับ
   ผมใช้Access2003 สร้างฐานข้อมูลโดยแยกออกจากตัวโปรแกรมปัญหาคือว่า ผมให้login ในบางฟอร์มเพื่อป้องกันไม่ให้ผู้ใช้เข้าสู่ฟอร์มที่ไม่ต้องการให้เข้าได้ แต่ประเด็นก็คือชื่อผู้ใช้และรหัสผ่านถูกเก็บไว้ในฐานข้อมูลซึ่งตัวฐานข้อมูลถูกแยกไว้ในเซิร์ฟเวอร์แล้ว ผู้ใช้ที่พอจะรู้เรื่องAccess เขาสามารถเข้าฐานข้อมูลเพื่อไปดูชื่อผู้ใช้หรือรหัสและสามารถเปลี่ยนชื่อผู้ใช้หรือรหัสในตารางในฐานข้อมูลได้เลย
ผมแก้ไขด้วยการสร้างpassword ฐานข้อมูลขึ้น แต่มีปัญหาเวลาเปิดโปรแกรมกลับไม่สามารถเปิดฟอร์มขึ้นมาได้
สามารถแก้ปัญหานี้ได้อย่างไร หรือมีวิธีไหนที่ไม่ให้ผู้ใช้สามารถเข้าสู่ฐานข้อมูลในเซิร์ฟเวอร์ได้บ้างครับ

3 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R24229
ลองลบตารางในส่วนโปรแกรม(front end)ที่เชื่อมต่อฐานข้อมูลออก แล้วเชื่อมต่อตารางใหม่ซึ่งจะมีกล่องตอบโต้ให้ใส่รหัส password ที่คุณสร้างขึ้นในตัวฐานข้อมูล แล้วเลือกตารางทึ่คุณต้องการเชื่อมต่อใหม่ ปิดโปรแกรม ลองเปิดโปรแกรมอีกครั้ง แต่ผมไม่รู้จะได้หรือนะครับ
2 @R24234
วิธีที่ 1 ตามที่คุณ ekkaphon ทำนั่นแหละครับ คือเพิ่มพาสเวอร์ดให้ฐานข้อมูล
-อย่าเข้าไปเอาข้อมูลโดยการลิงค์ตาราง เพราะถ้าเขาเปิดตารางที่ front-end ได้ มันก็เห็นทั้งหมดอยู่ดี เหมือนไม่ได้ลับอะไรเลย
- เวลาที่จะให้โค้ดเข้าไปดูข้อมูลในนั้น ให้เข้าไปด้วย connection string ซึ่งเราจะสามารถปรับแต่งคุณสมบัติหลายๆ อย่างในการเชื่อมต่อแต่ละครั้งได้ เช่นการระบุ user password และ/หรือ ชนิดการเชื่อมต่อ การล็อคระเบียน เป็นต้น
Public Function oConn()
If Len(BaseData) < 1 Or IsEmpty(BaseData) Then CheckBasePath
If Len(BaseMDB) < 1 Or IsEmpty(BaseMDB) Then CheckBasePath
If Len(BaseMDBpw) < 1 Or IsEmpty(BaseMDBpw) Then CheckBasePath
    Set Conn = New ADODB.Connection
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & BaseData & BaseMDB & ";Jet OLEDB:Database Password=" & BaseMDBpw & ";"
End Function

Public Function cConn()
On Error Resume Next
If Conn.State <> 0 Then Conn.Close
Set Conn = Nothing
End Function


- หรือการเขียน statement แบบ sql จริงๆ มันก็สามารถระบุ user กับ password ไปใน sql ได้เลย เช่น
SQLconn = "[;PWD=" & BaseMDBpw & ";DATABASE=" & BaseData & BaseMDB & "]."
Sql = "SELECT LAST(" & fldName & ") as cnt into tmpAgreegate From " & SQLconn & tbName
SQL= "INSERT INTO " & tbName & " SELECT " & tbName & ".* FROM " & SQLconn & tbName


วิธีที่ 2 แก้ปัญหาการดูข้อมูลลับ
- เข้ารหัสข้อมูล อาจจะแค่ฟิลด์เดียว คือฟิลด์พาสเวอร์ด ที่ผมเคยทำมาแล้ว แต่อาจจะมีวิธีอื่นๆ ที่สามารถเข้ารหัสได้ทั้ง ตาราง หรือทั้ง database ทีนี้ ต่อให้ผู้ใช้เข้าถึงไฟล์ลับที่เก็บข้อมูลลับ (เช่นไฟล์ที่เก็บข้อมูลล็อกอิน) เขาก็อ่านมันไม่ได้ ถ้าไม่ถอดรหัสเสียก่อน
Dlookup("UserID", "tbUser", "[UserLogin] ='" & TxLogin & "' AND [UserPWD] = '" & mptEncode(TxPWD) & "'")

Function mptEncode(stdata) As String
... ขออภัย โค้ดส่วนนี้ เปิดเผยไม่ได้
... เอาเป็น พอให้ทราบว่า ให้เราคิดวิธีเข้ารหัส เป็นแนวของเราเอง ไม่ให้ซ้ำใครก็แล้วกํนนะครับ
J = Right(CStr(Asc(Mid(stdata, i, 1)) ^ 3), 6)
Wstr = Wstr & Right("A01H" & Hex(CLng(J)), 4)
Next
mptEncode = Wstr
End Function


ตัวอย่างพาสเวิร์ด ที่เข้ารหัสก่อนเข้าเก็บในตารางครับ
2DC0C1C9765D8075765D765D59082DC0ED21746767B98F00CB91E848062B2540
5C88C1C99C0F80752540765D458D2DC0E84830C1458D8F00CB91CC40B0002540
CE3BC1C9E7C0807567B9765D0CF82DC0254030C1458D8F002540CC4067185908
F2ABC1C92E0D80755908765DED212DC0CE3B30C1E7C0ED2159088F00CB91E848
6A37C1C959088075ED21765D74672DC02DC030C1E7C08F00CB91E848062B2540

1 บรรทัด คือ 1 พาสเวิร์ด ซึ่งแม้แต่ผม ผู้เขียนโปรแกรมเอง ยังอ่านไม่รู้เรื่องเลยครับ ผมแจ้งผู้ใช้ว่า "ให้คุณตั้งพาส ของคุณเอาเอง และจำเอาเอง ถ้าลืม ผมก็ค้นมาคืนคุณไม่ได้นะ มีทางเดียวคือ ตั้งตัวใหม่เท่านั้น"

ทั้งหมดที่เล่ามานี้ แค่พอให้เห็นลู่ทางนะครับ โค้ดทั้งหมดในโพสต์นี้ ไม่ใช่สำเร็จรูป ต้องนำไปประยุกต์ต่อยอดเอาเอง
และสุดท้ายคือ ป้องกันอย่าให้เขา เข้าถึง VBA ครับ มิฉะนั้น เขาเห็นสายอักขระต่างๆ หรือฟังก์ชั่นการเข้ารหัส เขาก็ย้อนรอยได้อยู่ดีครับ
3 @R24239
ขอบคุณคุณSu และอ.yeadram มากนะครับ มาตอบช้าไปหน่อยเพราะติดงานเยอะมาก ผมจะลองศึกษาดูครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2609s