รบกวนถามเกี่ยวกับ security ค่ะ
กระทู้เก่าบอร์ด อ.Yeadram

 4,190   13
URL.หัวข้อ / URL
รบกวนถามเกี่ยวกับ security ค่ะ

สมมติว่ามีผู้ใช้ database เรา3 คนคือ A B C ทุกคนมีสถานะเป็น user เหมือนกันค่ะ

ต้องการให้แต่ละคนเข้าใช้ได้หรือดูได้เฉพาะข้อมูลที่ตัวเอง key เท่านั้น เช่น A ก็สามารถเห็น หรือ แก้ไขได้เฉพาะข้อมูล หรือ record ที่ตนเองใส่เข้าไป โดยขั้นแรกจะให้มีการใส่ password ของตัวเองก่อน และถ้ามีการเพิ่ม record ใหม่ระบบจะบันทึกไปเลยว่าใคร key เข้าไป โดยไม่ต้องใส่ชื่อคนkey อีก เนื่องจากมีการถามตั้งแต่ตอนใส่ password แล้ว ต้องทำอย่างไรคะ

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

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

1 @R01311
เก็บข้อมูลตอนใส่ PASSWORD ไว้ในตัวแปร ตัวใดสักตัวหนึ่ง
(คงต้องเป็น GLOBAL เพื่อให้ใช้ได้ตลอดเวลา)

เก็บข้อมูลใส่ตาราง>>> สร้าง FIELD ไว้รอรับค่า อ้างตัวแปรแบบ GLOBAL
มาใส่ลง TABLE ขณะที่ USER กรอกข้อมูล ทำเป็นค่า DEFALT
เลยก็ได้ จะได้สะดวก

จะให้เห็นเฉพาะ ที่ USER กรอกข้อมูลตาม PASSWORD ก็ง่ายแล้วครับ
เพราะมีข้อมูลใน TABLE แล้วก็กรองเอา จาก FORM หรือจะ กำหนดใน
SQL ของแหล่งข้อมูล FORM ให้เท่ากับ ตัวแปร GLOBAL ตอน
LOKIN ก็ตามสะดวก

ข้อควรระวัง สำหรับค่าว่างก่อนหน้า อาจมีข้อมูลที่กรอกไปแล้ว แต่เมื่อก่อนไม่ได้แยกว่าใครกรอก ค่าใน FIELD นี้อาจต้องไปกำหนดย้อนหลังว่าใครกรอกด้วย
ไม่งั้น RECORD ของคุณ ที่เป็นค่า Null หรือค่าว่าง จะไม่เห็นในการใช้ FORM
กรองข้อมูลตามการ LOKIN

เป็นเพียง IDEA นะครับ ส่วนจะมีวิธีการอื่นอีกไหม ก็รอฟังท่านอื่นต่อครับ
2 @R01313
ขอบคุณสำหรับคำแนะนำค่ะ
แต่มีที่ยังงงๆอยู่ค่ะ คือเพิ่งเริ่มใช้

ตรงที่เขียนว่า:เก็บข้อมูลตอนใส่ PASSWORD ไว้ในตัวแปร ตัวใดสักตัวหนึ่ง
(คงต้องเป็น GLOBAL เพื่อให้ใช้ได้ตลอดเวลา)
ถ้าสร้างเป็นตารางไว้ดังนี้ได้ไหมคะ
ID        Name          Lastname
1            A                   AAA
2            B                   BBB
3            C                   CCC
แล้วใช้ ID เป็น password แสดงว่าต้องเอา ID ไปกำหนดตอนสร้างPassword ใช่ไหมคะ
แล้วตรงกำหนดเป็น Global ทำตอนไหนคะ ตอนที่เขียน Code หรือเปล่าคะ คือนึกไม่ออกค่ะ

ขอบคุณค่ะ
3 @R01315
ขึ้นอยู่กับว่าคุณจะเก็บค่าไหน ไปใส่ใน TABLE ถ้า ID ก็ได้เหมือนกัน
name ก็ได้ last name ก็ได้ ทั้งหมดก็ได้
การตั่งค่า ไปที่ MODULE เขียนแค่นี้ครับ
ตัวอย่าง
Global UL   As String
ต่อไป UL ก็จะเป็นตัวแปรที่เห็นได้ทุก module ทุก FUNCTION ทุก FORM
4 @R01317
ขอบคุณมากๆค่ะคุณ krathok-man
กำลังลองทำตามคำแนะนำค่ะ

ไม่เข้าใจตรงนี้ค่ะ:เก็บข้อมูลใส่ตาราง>>> สร้าง FIELD ไว้รอรับค่า อ้างตัวแปรแบบ GLOBAL มาใส่ลง TABLE ขณะที่ USER กรอกข้อมูล ทำเป็นค่า DEFALT เลยก็ได้ จะได้สะดวก

สมมติว่ามีตารางชื่อ user และมี field userID userName userLastName และมีข้อมูลอยู่ในตารางเรียบร้อยแล้ว จะให้ user ใส่ userID ลงไป เป็น password แล้ว จะเป็นการใส่ข้อมูลลงในตารางเลยหรือคะว่าใคร key ไม่ทราบว่าเข้าใจถูกไหมคะ แล้วต้องใช้คำสั่งอย่างไรคะ
ขอความกรุณาด้วยค่ะ รบกวนจริงๆเลย
5 @R01319
สมมุติคุณเก็บตัวแปรตัวเดียวคือ ID มาใส่ ตัวแปร GLOBAL ไว้

ใน TABLE ใดก็ตามที่คุณต้องการเก็บว่า คนที่ ID นี้ (ซึ่งเป็นคนเดียวกับที่
LOKIN เข้ามา) เป็นผู้ KEY ข้อมูลเข้า และเราได้สร้าง FIELD ไว้รออยู่แล้วเพื่อ
เก็บค่า GLOBAL นี้ (เราไม่จำเป็นต้อง KEY อีก) ให้ใช้ตัวแปรนี้ ในใส่ลงใน
FIELD ที่สร้างไว้รอ ซึ่งในที่นี้คงบริหารผ่าน FORM ที่ control ที่ใส่ค่า ID
นี้ ให้ ทำเป็นค่า DEFALT โดยอ้างว่า =ตัวแปร GLOBAL ทีกำหนดไว้
ส่วนจะอ้างโดยการเขียน CODE หรือ เขียนใน PROPERTY ของ
CONTROL ก็แล้วแต่คุณครับ   

เมื่อ USER KEY ข้อมูลลง TABLE เราก็จะได้ข้อมูลด้วยว่า ใครเป็นคน KEY
RECCORD นี้ จาก FIELD ที่เราเก็บ ID ไว้
6 @R01321
ขอบคุณมากๆค่ะ สำหรับทุกคำแนะนำ
7 @R04086
คุณเพียงออ ถ้าหากว่าทำได้แล้วกรุณาช่วย Share ให้ผมบ้างนะครับ อยากทำได้เหมือนกันครับ แต่ตอนนี้ยังทำไม่ได้เลยครับ
8 @R08992
กระทู้เก่าครับ...พอดีมาอ่านแ้ล้วเกิดตรงกับความต้องการพอดี...ตามที่คุณ krathok-man พอเห็นแนวทาง แต่ว่าเขียนโค้ดไม่เป็นครับ...อยากจะขอโค้ด vba ตัวอย่างตรงที่จะให้เครื่องบันทึก user ลงใน table ครับ (หรือท่านอื่นจะทำโค้ดตัวอย่างก็ได้ครับ)

แนวทางของผมเป็นแบบนี้ครับ

(1.) สร้าง tbl_username ประกอบด้วย
      ID   UserName    UserPassword
      1      AAA              1234     (input mark เป็น password)
      2      BBB              5678     

(2.) สร้าง frm_login ประกอบด้วย
      cboUsername (ให้เลือก user โดยคอมโบบ็อก)
      txtPassword    (ให้ระบุ password ของ user ที่ระบุ)
      ปุ่ม OK    (Event On Click เพื่อให้เช็คกับ tbl_username ว่าตรงหรือไม่, ถ้าตรงให้เข้าไปใช้ระบบ access โดยไปทำใน frm_add , แต่ไม่ใช่ ให้ออกจากระบบไป)

(3) tbl_transaction (เป็นตารางเก็บข้อมูล, โดย user จะบันทึกข้อมูลจาก frm_add, ประกอบด้วยฟิลด์ต่างๆ ดังนี้)
     id               (ขึ้นอัตโนมัติ autonumber)
     customer   (ผู้ใช้บันทึกเข้าไป)
     province    (ผู้ใช้บันทึกเข้าไป)
    UserKeyIn (ต้องการให้บันทึกชื่อ user ที่ login เข้ามาไว้ในฟิลด์นี้อัตโนมัติเลยครับ)

(4) frm_add (เป็น from บันทึกข้อมูลลงใน tbl_transaction, ประกอบด้วย textbox ต่าง ๆ ดังนี้)

     id
     customer
     province

เมื่อบันทึกในแต่ละ record เสร็จแล้ว, ก็จะขึ้น record ใหม่เพื่อให้ user บันทึกต่อไป

ขอบพระคุณล่วงหน้าครับ

     


9 @R09005
มีอาจารย์ท่านใดจะแนะนำบ้างครับ
10 @R09011
- ประกาศตัวแปร Public ไว้ในโมดูลใดๆ ก็ได้ ไว้เก็บชื่อ username
Public Uid As string


- frm_login ในปุ่ม Ok
ก่อนจะสั่งให้เปิดฟอร์ม frm_add ให้แทรกคำสั่งตั้งค่าให้ตัวแปรนั้น
Uid = cboUsername

- frm_add
ให้
1)   ไม่มีการโชว์ฟิลด์ autonumber ไม่มีการสร้าง textbox ให้มัน
2)   textbox txCustumer ไม่ต้องผูกกับฟิลด์ (unbound)
3)   textbox txProvince ไม่ต้องผูก (Unbound)
4)   command button cmdSave เขียนโค้ด on_click ประมาณนี้
Private sub cmdSave_onclick()
docmd.runsql "Insert into tbl_transaction(custumer, province, UserKeyIn) values('" & txCustumer & "', '" & txProvince & "', '" & Uid & "');"
docmd.gotorecord ,,acnew
End sub
11 @R09016
เรียนอาจารย์ yeadram
บันทึกเข้าไปได้ แต่ว่า.........

แต่ว่า frm_add เมื่อคีย์ข้อมูลบันทึกรายการที่ 1 เข้าไปแล้ว
ก็จะนำข้อมูลเข้า tbl_transaction เป็นปกติ,

เมื่อจะคีย์ข้อมูลบันทึกรายการที่ 2 นั้น, ในหน้า frm_add
จะยังคงแสดงข้อมูลของรายการที่ 1 ค้างไว้อยู่
จะต้องใช้เม้าส์คลิ๊กไปที่ txtCustomer, และคีย์บันทึกข้อมูลทับเข้าไป
และกดแท็บไปช่อง txtProvince ก็มีรายการเดิมค้างไว้อยู่, และคีย์บันทึกข้อมูลทับ

ทำอย่างไรครับที่จะให้มันเลื่อนในหน้า frm_add ไปเป็น record ต่อไป โดยที่ข้อมูล
เดิมบนหน้า frm_add (ข้อมูลที่ 1) ให้หายไป เป็นช่องว่าง ๆ เพื่อที่จะคีย์บันทึก
รายการที่ 2 และรายการต่อไป ๆ

คำสั่งเดิมของอาจารย์ผมเพิ่มและเปลี่ยนแปลงดังนี้ จะมีเปลี่ยนหรือเพิ่มอะไรอีกครับ

DoCmd.GotoRecord , , acNewRec
txtCustomer.SetFocus

ขอบคุณล่วงหน้าครับ
12 @R09049
เพราะมันเป็น textbox แบบ unbound ครับ
ตราบใดที่ไม่สั่งมันเป็นอย่างอื่น มันก็จะจำข้อมูลเก่าครับ
ดังนั้นเราก็แก้โดยสั่งล้างมันครับ

ถ้าคอนโทรลมีน้อยก็สั่งทีละตัวเลยครับ
docmd.runsql.....
txtCustomer=""
txtProvince=""
docmd.gotorecord...
txtCustomer.setfocus


ถ้าคอนโทรลมีหลายตัว อาจจะเขียนเป็น ลูป โดยใช้ control array
เช่น
dim ctl as control
for each ctl in controls
if ctl.controlsource="" then ' สั่งให้ล้างเฉพาะ control ที่เป็น unbound
ctl=""
end if
next
13 @R09050
รอตั้งนาน(เข้าใจว่าคงไม่ค่อยว่าง)...ขอบคุณครับ อ.yeadram เช่นเคยครับ..ผมจะไปทำดู, หากผลเป็นเช่นไรจะได้มาแจ้งในนี้อีกครั้ง
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2665s