קודים לכניסה באקסס

shsh654

משתמש מקצוען
עיצוב גרפי
D I G I T A L
נכתב ע"י moishy;1942075:
ומה עם ייבוא?

סיסמא לקובץ של הטבלאות.

(בקישור טבלאות ע"י קוד שנדון בזמנו כאן בפורום יש אפשרות לסיסמא - לפתיחת קובץ הטבלאות)
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
נכתב ע"י shsh654;1942128:
סיסמא לקובץ של הטבלאות.

(בקישור טבלאות ע"י קוד שנדון בזמנו כאן בפורום יש אפשרות לסיסמא - לפתיחת קובץ הטבלאות)
זה התחלה טובה, אבל ניתן להתגבר עליה בקלות ע"י פונקציה זו:
קוד:
Option Explicit

Function fExportAllTAbles(strDestination As String)
    Dim tdf As DAO.TableDefs
    Dim tbl As DAO.TableDef
 On Error GoTo Error_Handler

    Set tdf = CurrentDb.TableDefs
    For Each tbl In tdf
        If Left(tbl.Name, 4) <> "MSys" Then
            DoCmd.CopyObject strDestination, tbl.Name, acTable, tbl.Name
        End If
    Next
 
Error_Handler_Exit:
    On Error Resume Next
    Set tdf = Nothing
    Exit Function
 
Error_Handler:
    MsgBox "התרחשה השגיאה הבאה:" & vbCrLf & vbCrLf & _
            "מספר שגיאה: " & Err.Number & vbCrLf & _
            "מקור השגיאה: fExportAllTAbles" & vbCrLf & _
            "תיאור השגיאה: " & Err.Description, _
            vbCritical + vbMsgBoxRight + vbMsgBoxRtlReading, "שגיאה קריטית!"
    Resume Error_Handler_Exit
End Function
להשתמש בו יש להעביר לפונקציה את היעד לייצוא, לדוגמא:
קוד:
fExportAllTAbles("C:\Users\User\Desktop\Test.accdb")
 

shsh654

משתמש מקצוען
עיצוב גרפי
D I G I T A L
נכתב ע"י moishy;1942508:
זה התחלה טובה, אבל ניתן להתגבר עליה בקלות ע"י פונקציה זו

בפונקציה שמוישי הביא להחליף את שם המשתנה בשורה הראשונה מ- strDestination ל- sDestDb

בdevhut
 

moshem

משתמש פעיל
מנוי פרימיום
בוגר/תלמיד פרוג
D I G I T A L

קבצים מצורפים

  • דוגמא מעובד.rar
    KB 71.8 · צפיות: 52

shsh654

משתמש מקצוען
עיצוב גרפי
D I G I T A L
כללית לגבי אבטחה תעשה קצת חיפוש בפורום.
לדוגמא בקובץ שהעלית הסתרת את חלונית הניווט, אבל אפשר להראות אותה בקלות בלחיצה על F11, או לחיצת שיפט תוך כדי פתיחת הקובץ.
להנ"ל יש קוד באחד האשכולות בפורום (ומוישי יטען שגם אותו, מומחה יכול לפרוץ)

השדרוג שלך מבחינת הרשאות לכל טופס חמוד.
מה שכן, בחירת משתמשים תעשה תיבה משולבת שתברור את הרשומה ולא ע"י פילטר.

(בקטנה, לקוחות נפתח תמיד?)
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
באופן כללי, בניית אבטחה ברמת המשתמש באקסס היא כעשיית סלטה הפוכה, אקסס לא מיועד לכך. נקודה. בגירסאות הקודמות (עד 2007) לאקסס היה משהו מובנה לצורך הענין (שאגב עדיין ניתן להשתמש בו בקבצי MDB) שגם אותו ניתן היה לפרוץ בקלות.

בעיקרון, אני מסכים עם shsh654 בנוגע לחלונית הניווט, ובנוסף בהגדרות של אקסס המשתמש יוכל לשנות את זה.

ועכשיו להערות על הדוגמא שלך (הכל כמובן כביקרת בונה):
לא ברור למה מיועדים התיבות טקסט של השם משתמש וסיסמה, הם הרי מאוגדים לטבלה והבדיקה צריכה להיות כנגד המקור ע"י dlookup לדוגמא.

עדיין יש לך בעיה עם שמירת הנתונים בטבלה, א) בקלות ניתן לראות את תוכן הטבלאות ב) ע"י שאילתא פשוטה ניתן לשנות, להוסיף ו/או לאפס משתמשים וסיסמאותיהם.

לעצם הקוד שלך יש הרבה מה להעיר, ראשית שתי הערות כלליות,
א) חשוב מאוד להוסיף שורה זו בתחילת כל מודול כדי להכריח הצהרת משתנים, דבר שימנע הרבה טעויות בהמשך הדרך:
קוד:
Option Explicit
ניתן לשנות הגדרה בVBE כדי שזה יעשה באופן אוטומטי, Tools>Options בלשונית Editor לסמן את Require Variable Declarations (אגב, כדאי להוריד את הסימון מAuto Syntax Check).
ב) כדאי מאוד לעצב את הקוד בצורה נאותה, דבר זה מקל על התיכנות ועל הקריאה של הקוד ומונעת הרבה שגיאות.
קוד לא מעוצב:
קוד:
Private Sub מסגרת7_Click()
If מסגרת7 = 1 Then
משולבת5 = "מנהל המערכת"
Else
משולבת5 = "עובד"
End If
קוד.SetFocus
End Sub

Private Sub פקודה2_Click()
    If מסגרת7 = 0 Then
        MsgBox "לא בחרת סוג עובד"
        מסגרת7.SetFocus
        Exit Sub
    End If
Static intPswdCount As Integer
    If קוד = משולבת5.Column(1) Or משולבת5.Column(1) = "" Then
Else
    MsgBox "הסיסמה שגויה"
    קוד.SetFocus
    קוד = Null
    intPswdCount = intPswdCount + 1
If intPswdCount < 3 Then Exit Sub
    MsgBox "נסיונות שגויים, להתראות"
    DoCmd.Quit
Exit Sub
End If
Me.Visible = False
DoCmd.OpenForm "טופס1"

End Sub
קוד מעוצב:
קוד:
Private Sub מסגרת7_Click()
    If מסגרת7 = 1 Then
        משולבת5 = "מנהל המערכת"
    Else
        משולבת5 = "עובד"
    End If
        TextBoxPew.SetFocus
End Sub

Private Sub TextBox1_AfterUpdate()
    CreateFilter
End Sub

Private Sub פקודה2_Click()
    If TextBox1 = "" Then
        MsgBox "לא בחרת שם משתמש"
        TextBox1.SetFocus
        Exit Sub
    End If
    Static intPswdCount As Integer
    If Pew = TextBoxPew Then
    Else
        MsgBox "הסיסמה שגויה"
        TextBoxPew.SetFocus
        TextBoxPew = Null
        intPswdCount = intPswdCount + 1
        If intPswdCount < 3 Then Exit Sub
        MsgBox "נסיונות שגויים, להתראות"
        DoCmd.Quit
        Exit Sub
    End If
    Me.Visible = False
    DoCmd.OpenForm "ניתוב"
End Sub
ועכשיו לעצם הקוד.

הצהרת משתנים כדאי שיהיו בתחילת הפרוצדורה, בכל מקרה לא משנה איפה תעשה את זה, שורות אלו יופעלו לפני כל שורת קוד אחרת.

במקום:
קוד:
If Pew = TextBoxPew Then
Else
תכתוב:
קוד:
If Pew <> TextBoxPew Then
במקום:
קוד:
MsgBox "הסיסמה שגויה"
תכתוב:
קוד:
MsgBox "הסיסמה שגויה", vbCritical + vbMsgBoxRight + vbMsgBoxRtlReading, "שגיאת אבטחה"
במקום:
קוד:
TextBoxPew = Null
תכתוב:
קוד:
TextBoxPew = ""
למה זה מיועד, שני התנאים זהים לחלוטין:
קוד:
    If Me.ActiveControl.Name = "TextBox1" Then
        S1 = IIf(IsNull(Me!TextBox1), "", Me!TextBox1)
    Else
        S1 = IIf(IsNull(Me!TextBox1), "", Me!TextBox1)
    End If
במקום:
קוד:
If Len(S1) Then
תכתוב:
קוד:
If Len(S1) > 0 Then
יש רעיון אווילי משהו, (רק אל תגידו שאני הצעתי את זה, כל DBA מתחיל יתגלגל מצחוק מעצם הרעיון), והיא שמירת הסיסמאות בפקד לא מאוגד ומוסתר בטופס. ניתן להוסיף פקדים בקלות ע"י קוד. אבל בשביל שהוא יהיה אפקטיבי צריך למנוע אפשרות של פתיחת הטפסים בתצוגת עיצוב ולסגור את הקובץ לaccde (מה שבכל מקרה מומלץ).

צירפתי כאן דוגמא קצת יותר מקצועית שבנה ניק פיליפס מאתר UtterAccess, שגם בו יש את כל החסרונות שצויינו. אגב, למיטב זכרוני יש בו כמה באגים.
 

קבצים מצורפים

  • SecurityDemo.zip
    KB 198 · צפיות: 36

HUBHCBH

משתמש מקצוען
אוטומציה עסקית
אני חושב שרוב המשרדים יפסק להם רמת הגנה בסיסית, לא הייתי מאחסן כרטיסי אשראי ככה, אבל מידע רגיל בד"כ עובד לא ינסה מאד לגנוב....
אפשר לעשות קוד לטבלאות, אפשר גם להצפין אותם עמוק במחשב, ולשנות את סיומת הקובץ כך שיהיה יותר קשה למצוא אותו.
נכון שאדם עם ידע יוכל למצוא כשירצה, אבל יהיה לו יותר קל לנסות ולראות את המנהל כותב את הסיסמה...
צירפתי דוגמאות להגבלות בקבצים שיצרתי.
 

קבצים מצורפים

  • הגדרת משתמש 1.png
    KB 67.8 · צפיות: 46
  • הגדרת משתמש 2.png
    KB 118.4 · צפיות: 41
  • הגדרת משתמש 3.png
    KB 40.7 · צפיות: 39

דיני 2013

משתמש פעיל
עיצוב גרפי
בקובץ הזה למיטב יכולתי לא הצלחתי לפרוץ חוץ מהאפשרות של ייבוא שמוישי העלה את הבעיה הזאת, מעניין לשמוע אם יש איזה דרך לפרוץ חוץ מייבוא
 

קבצים מצורפים

  • נתונים.rar
    KB 37.4 · צפיות: 49

moshem

משתמש פעיל
מנוי פרימיום
בוגר/תלמיד פרוג
D I G I T A L
בשבילי זה בטוח טוב לא הצלחתי אפילו להכנס עם נידע שלי
השאלה היא איך אני יכול ללמוד את זה?
 

shsh654

משתמש מקצוען
עיצוב גרפי
D I G I T A L
בבקשה...

run > exit desing mode בעורך ה-vba
(ובכלל כשמורידים אותו מהמייל לראשונה ולא הופכים את התוכן לזמין ניתן לסגור את הטופס)

משכך לכאורה עדיף סיסמא על הקובץ עצמו שהבעיה היא רק האופציה של ייצוא שמוישי הביא

ואולי: את הייצוא צריך הרי לעשות מתוך קובץ שמקושר לטבלאות, להכניס בו את הפונקציה שמוישי הביא וכו', אבל אם הvba בפרוייקט נעול כפי ש'דיני 2013' נעלה, אז לא ניתן להכניס את הפונקציה.
 

קבצים מצורפים

  • 333.JPG
    KB 11.4 · צפיות: 40

moishy

משתמש סופר מקצוען
מנוי פרימיום
בבקשה...

הקובץ הוסר ע"פ בקשה מיוחדת...
 

moshem

משתמש פעיל
מנוי פרימיום
בוגר/תלמיד פרוג
D I G I T A L
Shos654 תודה רבה החכמתני
 

דיני 2013

משתמש פעיל
עיצוב גרפי
מוישי!
שאלה
אם התוכן הפוך לזמין אתה גם יכול לפרוץ?
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
נכתב ע"י דיני 2013;1945747:
מוישי!
שאלה
אם התוכן הפוך לזמין אתה גם יכול לפרוץ?
כן.
 

אקסס

משתמש רשום
נכתב ע"י moishy;1944718:
יש רעיון אווילי משהו, (רק אל תגידו שאני הצעתי את זה, כל DBA מתחיל יתגלגל מצחוק מעצם הרעיון), והיא שמירת הסיסמאות בפקד לא מאוגד ומוסתר בטופס. ניתן להוסיף פקדים בקלות ע"י קוד. אבל בשביל שהוא יהיה אפקטיבי צריך למנוע אפשרות של פתיחת הטפסים בתצוגת עיצוב ולסגור את הקובץ לaccde (מה שבכל מקרה מומלץ).

ואני חשבתי שהמצאתי את הגלגל הראשון:(

יצחק או לא זה הכי אפקטיבי, אין לדעתי תשובה יותר טובה לסיסמאות באקסס חוץ מזו.
 

moishy

משתמש סופר מקצוען
מנוי פרימיום
נכתב ע"י אקסס;1947354:
ואני חשבתי שהמצאתי את הגלגל הראשון:(

יצחק או לא זה הכי אפקטיבי, אין לדעתי תשובה יותר טובה לסיסמאות באקסס חוץ מזו.
צר לי לאכזב אבל ניתן להתגבר על זה בקלות באמצעות קוד פשוט כדוגמת הקוד הבא:
קוד:
Dim ctl As Control
For Each ctl In Me.Controls
    If ctl.ControlType = acTextBox Then
        Debug.Print ctl.Name & ": " & ctl.Value
    End If
Next ctl
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קכב

א שִׁיר הַמַּעֲלוֹת לְדָוִד שָׂמַחְתִּי בְּאֹמְרִים לִי בֵּית יְהוָה נֵלֵךְ:ב עֹמְדוֹת הָיוּ רַגְלֵינוּ בִּשְׁעָרַיִךְ יְרוּשָׁלִָם:ג יְרוּשָׁלִַם הַבְּנוּיָה כְּעִיר שֶׁחֻבְּרָה לָּהּ יַחְדָּו:ד שֶׁשָּׁם עָלוּ שְׁבָטִים שִׁבְטֵי יָהּ עֵדוּת לְיִשְׂרָאֵל לְהֹדוֹת לְשֵׁם יְהוָה:ה כִּי שָׁמָּה יָשְׁבוּ כִסְאוֹת לְמִשְׁפָּט כִּסְאוֹת לְבֵית דָּוִיד:ו שַׁאֲלוּ שְׁלוֹם יְרוּשָׁלִָם יִשְׁלָיוּ אֹהֲבָיִךְ:ז יְהִי שָׁלוֹם בְּחֵילֵךְ שַׁלְוָה בְּאַרְמְנוֹתָיִךְ:ח לְמַעַן אַחַי וְרֵעָי אֲדַבְּרָה נָּא שָׁלוֹם בָּךְ:ט לְמַעַן בֵּית יְהוָה אֱלֹהֵינוּ אֲבַקְשָׁה טוֹב לָךְ:
נקרא  6  פעמים

לוח מודעות

למעלה