Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   [ Ασφάλεια] Ασφάλεια δεδομένων σε ACCESS 2007 (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/2161-asfaleia-dedomenon-se-access-2007-a.html)

eliok 03-11-12 19:16

Ασφάλεια δεδομένων σε ACCESS 2007
 
Γεια σας. είμαι νέο μέλος στο forum... μπράβο σε όλους για το τόσο όμορφο, χρηστικό και φιλικό site που έχετε δημιουργήσει ...και ευχαριστώ εκ των προτέρων για την βοήθεια.
Εχω μια εφαρμογή σε ACCESS 2007 και θα ήθελα να ρωτήσω αν υπάρχει "τρόπος" να μην μπορεί κάποιος ανοίγοντας μια νεα access να κανει εισαγωγή "εξωτερικών δεδομένων" απο την παλιά (δηλ πίνακες, ερωτήματα, κλπ)
(οχι με κωδικό κλειδώματος της βάσης...κατι πιο, οσο γίνεται, ασφαλές-πονηρό-έξυπνο)
ευχαριστώ :thanks:

Tasos 03-11-12 21:58

Καλησπέρα Ηλία και καλωσόρισες στο φόρουμ!

Από τη στιγμή που ένα αρχείο Access μπορεί να αντιγραφεί στο "φλασάκι" του κάθε χρήστη, οποιαδήποτε μέθοδος και αν εφαρμοστεί δεν εξασφαλίζει την απόλυτη προστασία δεδομένων.
Υπάρχουν αρκετά εμπορικά προγράμματα που μπορούν και παρακάμπτουν τους διάφορους τρόπους προστασίας σε *mdb 'η *.accdb.

Το ιδανικό θα ήταν οι πίνακες της βάσης να μην ήταν πίνακες Access αλλά πίνακες SQL σε SQL Server (εφαρμόζεται συνήθως σε εταιρίες με εταιρικό δίκτυο και κοστίζει).

Αν δεν υπάρχει τέτοια δυνατότητα, μπορεί κανείς σε επίπεδο ασφάλειας των Windows να ορίσει ειδικά δικαιώματα στον φάκελο που περιέχει το αρχείο και να επιτρέπει την πρόσβαση μόνο σε επιλεγμένους χρήστες (το πιο έξυπνο).

Τέλος, μπορεί κανείς να ασφαλίσει τα δεδομένα των πινάκων μια βάσης χρησιμοποιώντας τη μέθοδο "Κρυπτογράφηση με κωδικό πρόσβασης" (λιγότερο ασφαλές αλλά ικανοποιητικό αν χρησιμοποιείται από μέσους, μη κακόβουλους χρήστες.

Στην τελευταία περίπτωση, για να μην πληκτρολογείται κωδικός κάθε φορά που ανοίγει η εφαρμογή θα πρέπει να γίνουν τα παρακάτω βήματα.

  1. Διαίρεση της Βάσης. Έτσι θα έχουμε τους πίνακες χωριστά στη βάση παρασκηνίου που θα δημιουργηθεί.
  2. Ανοίγουμε την Access (2007)
  3. Επιλέγουμε "Άνοιγμα"
    Στο παράθυρο διαλόγου που θα εμφανιστεί , αφού επιλέξουμε την Παρασκηνιακή Βάση δεδομένων, επιλέγουμε "Άνοιγμα" για αποκλειστική χρήση (Πατάμε το βέλος στο κουμπί "Άνοιγμα").
  4. Πάμε στην καρτέλα "Εργαλεία βάσης δεδομένων" και κατόπιν επιλέγουμε "Κρυπτογράφηση με κωδικό πρόσβασης".
    Πληκτρολογούμε τον κωδικό και κλείνουμε την βάση.
  5. Ανοίγουμε τη Βάση δεδομένων (Frontend)
    Με το που θα ανοιχτεί κάποιος συνδεδεμένος πίνακας, θα μας εμφανιστεί η ειδοποίηση "Μη έγκυρος κωδικός"
  6. Διαγράφουμε ΟΛΟΥΣ τους συνδεδεμένους πίνακες που έχουν σχέση με την Παρασκηνιακή Βάση και τους συνδέουμε ξανά.
    Αυτή τη φορά, θα μας ζητηθεί να πληκτρολογήσουμε τον κωδικό που χρησιμοποιήσαμε στο βήμα 3
Έτσι, η Παρασκηνιακή Βάση δεν μπορεί να ανοιχτεί χωρίς την καταχώρηση κωδικού από οποιονδήποτε χρήστη ή πρόγραμμα ΕΚΤΟΣ από την Frontend.

Ελπίζω να σου έδωσα κάποιες ιδέες.

Φιλικά

Τάσος

eliok 03-11-12 22:36

Τάσο σ ευχαριστώ πολύ που διέθεσες το χρόνο σου να μου απαντήσεις.
Θα μελετήσω τα όσο μου έγραψες και αν αντιμετωπίσω κάποιο προβλημα θα σε "ξαναενοχλήσω"

Με εκτίμηση

Ηλιας

eliok 04-11-12 19:55

καλησπέρα και πάλι

Τάσο έκανα τα βήματα που μου πρότεινες και εχω δημιουργήσει δυο βάσεις
1. την παρασκηνιακή που εχει τους πίνακες κ εχω βάλει κωδικό πρόσβασης
2. την Βάση δεδομένων (Frontend) που έχει ολα τα υπολοιπα αντικείμενα (και τους συνδεδεμένους πίνακες).

Πιστεύω οτι όλα τα έκανα σωστά.. δεν μου λείνει όμως το αρχικό πρόβλημα γιατί αφενός μπορεί κάποιος να πειράξει τούς πίνακες στη βάση (Frontend) (χωρίς κωδικό) κ αφ ετέρου αν κάνεις απο την βάση (Frontend) αντιγραφή εναν συνδεδεμένο πίνακα και κατόπιν επικόληση (με επιλογή στην επικόληση πίνακα : "δομή κ δεδομένα (τοπικός πίνακας)"), σε μια καινούργια βαση δεδομένων ... κ (επαναλαμβάνοντας το αντιγρ.-επικόληση για όλα τα αντικείμενα) ξαναφτιάχνω την αρχική βάση απο την οποία ξεκίνησα.
Μήπως κάτι δεν έκανα καλά ή κάτι δεν εχω καταλάβει ??

ευχαριστω

Tasos 04-11-12 23:04

Καλησπέρα Ηλία!

Ναι δεν είναι η ιδανική λύση στο πρόβλημα σου για αυτό την τοποθέτησα στο τέλος των μεθόδων που ανέφερα στο προηγούμενο μου μήνυμα.

Αν δεν σε εξυπηρετεί θα πρέπει να εξετάσεις τις άλλες 2 περιπτώσεις (SQL Server ή να ορίσεις ειδικά δικαιώματα στον φάκελο που περιέχει το αρχείο).

Παραμένω όμως στο θέμα.

Η αντιγραφή ενός πίνακα με οποιονδήποτε κλασσικό τρόπο από την BackEnd δεν υφίσταται γιατί θα ζητηθεί από το χρήστη κωδικός πρόσβασης της BackEnd.

Το επόμενο σου βήμα είναι να ρυθμίσεις την FrontEnd έτσι που να μην μπορεί κανείς να επεξεργαστεί οτιδήποτε.

Θα σου πρότεινα να δεις το παράδειγμα στον παρακάτω σύνδεσμο: http://www.ms-office.gr/forum/access...dedomenon.html
.
Δοκίμασε και πες μας.

Όλα όμως αυτά δεν θα εμποδίζουν κάποιον να αντιγράψει τη βάση σου σε ένα φλασάκι και να την "ανοίξει με την ησυχία του" στο σπίτι του.:wtf:

Φιλικά

Τάσος

eliok 14-11-12 19:08

1 Συνημμένο(α)
γεια σε όλους
λόγου του ότι η ACCESS από μόνη της δεν παρέχει 100% ασφάλεια κατέληξα στα εξής
αφού τελειώσει η εφαρμογή και θέλω με κάποιο τρόπο να την ασφαλίσω (όσο είναι εφικτό) από απλούς χρήστες

1) κρύβω κατ αρχήν τους πίνακες και ότι άλλο απο τα αντικείμενα επιθυμώ
πχ( μακροεντολές, φόρμες κλπ)... (δεξί κλικ > ιδιότητες πίνακα > τσεκάρουμε το κρυφό)

2) χρησιμοποιώ τις προτάσεις του Τάσου Κλείδωμα Βάσης δεδομένων "LockDB.mdb" (προστασία αντικειμένων βάσης δεδομένων από επεξεργασία - αποκλείει την προβολή σχεδίασης σε φόρμες) σε συνδυασμό με το "Login_Splash.mdb" (κωδικό για είσοδο στην εφαρμογή σαν διαχειριστής ή σαν χρήστης) ελαφρώς τροποποιημένα και προσαρμοσμένα στην εφαρμογή μου.

Αν μπεις σαν διαχειριστής (κωδικός 123456) μπορείς να κλειδώσεις ή να ξεκλειδώσεις τη βάση.
Αν μπεις σαν χρήστης (κωδικός 222222) περνάς στην εφαρμογή.
Αν η βάση είναι ξεκλείδωτη ανοίγει με shift για επεξεργασία
Αν η βάση είναι κλειδωμένη δεν μπορεί να την ανοίξει κάποιος.
Αν η βάση είναι κλειδωμένη και ανοίξει κάποιος μια νέα βάση για να τραβήξει τα αντικείμενα σ αυτήν ... αυτά που έχουμε κρύψει δεν θα φαίνονται.
Αν την πάρει κάποιος με "φλασάκι" την πάει σε άλλο υπολογιστή και δεν την "τρέξει" .... μπορεί ανοίγοντας μια νέα βάση να τραβήξει τα πάντα (Αχίλλειος πτέρνα) αν όμως την τρέξει έστω κ μια φορά η βάση κλειδώνει στον συγκεκριμένο υπολογιστή.

3) αλλάζω το όνομα της βάσης από test.accdb σε test.accdr (μια επιπλέον "προστασία") και δίνω στον χρήστη αυτό το αρχείο.


Τάσο σ ευχαριστώ για τις προτάσεις

δείτε τα και .... σχολιάστε

σας ευχαριστώ
Ηλίας

editolis 14-11-12 20:38

Εαν δεν κανω λαθος υπαρχει και η λυση του Volume Serial Number του σκληρου δισκου. Η Βαση ανοιγει μονο στον υπολογιστη που θελεις. Με καποιες μικροτροποποιησεις κανεις δεν μπορει να την ανοιξει ακομα και εαν την εχει παρει με φλασάκι.

eliok 15-11-12 08:39

καλημέρα Τόλη

Συμφωνώ μαζί σου για τη λύση "Volume Serial Number του σκληρού δίσκου" αλλά πιστεύω ότι δεν καλύπτει την περίπτωση που την πάρει κάποιος με "φλασάκι" και από τον ίδιο ή άλλον υπολογιστή δημιουργήσει μια (νέα) κενή βάση δεδομένων και κάνει λήψη εξωτερικών δεδομένων επιλέγοντας την βάση (Access) που έχει στο φλασάκι.

Με αυτό τον τρόπο παίρνει όλα τα δεδομένα ξεκλείδωτα και μπορεί να αλλάξει ότι θέλει, είτε σε πίνακες, είτε σε VB κώδικα, ή οτιδήποτε άλλο…….

Όλα αυτά ισχύουν μόνο αν ο χρήστης δεν "τρέξει" τη βάση (test.accdb στο παράδειγμα μας) γιατί όπως έγραψα αν την τρέξει κλειδώνει σε "τοπικό επίπεδο" (φλασάκι, νέος Η/Υ, κλπ.)

Αν έχεις κάποιο VB κώδικα που να καλύπτει την περίπτωση αυτή θάθελα πολύ να τον ανεβάσεις στο Forum.

φιλικά
Ηλίας

Tasos 15-11-12 19:43

1 Συνημμένο(α)
Καλησπέρα!

Λάβετε υπόψη σας ότι οποιαδήποτε λύση βασίζεται σε κώδικες μπορεί να παρακαμφθεί αρκεί να απενεργοποιήσει κάποιος τις μακροεντολές της Access και να τρέξει το αρχείο από μία μη αξιόπιστη θέση.

Ο ασφαλέστερος τρόπος για να προστατευθούν τα δεδομένα είναι να εφαρμοστεί κρυπτογράφηση με κωδικό και στις δύο βάσεις (BakEnd - FrontEnd).

Εφαρμόζοντας τα παραπάνω και σε συνδυασμό με την απόκρυψη των μενού και άλλων στοιχείων από τα οποία θα μπορούσε κανείς να αποκτήσει πρόσβαση στην FrontEnd εξασφαλίζεται η μέγιστη δυνατή ασφάλεια των δεδομένων, πάντα όμως σε επίπεδο Access.

Δείτε το συνημμένο παράδειγμα.

Κωδικός για είσοδο και στις δύο βάσεις (BakEnd - FrontEnd) = pass

Για να εμφανίσετε μενού κλπ. στο FrontEnd πατήστε CTRL + F12, και στο διάλογο που θα ακολουθήσει
πληκτρολογήστε τον κωδικό 1234.

Επεξεργασία: Το παράδειγμα αφορά τις εκδόσεις Access 2007 - 2010

Φιλικά

Τάσος

eliok 19-11-12 19:14

γεια σε ολους

Τάσο σ ευχαριστώ πολύ για τη βοήθεια είναι η πιο "ασφαλής" λύση (όσο μπορεί νάνε) σε ACCESS, για την προστασία των δεδομένων σε μια βάση .....

Ηλίας Κουρούσης

Dangel82 05-12-12 09:45

Καλημέρα κι από εμένα..
Λιγάκι καθυστερημένη η απάντηση.. αλλά κάλιο αργά παρά ποτέ που λένε! :D :P

Επειδή αντιμετώπισα το πρόβλημα του φίλου μας σε εφαρμογή μου για πελάτη, τελικά κατέληξα στην λύση της SQL με .accde αρχείο για τους χρήστες μου.

Ποιο συγκεκριμένα, η εφαρμογή είχε 2 σκέλη:
α) την ασφάλεια των δεδομένων και β) την ταχύτητα της Access εφαρμογής!
Σχετικά με την ασφάλεια δεδομένων, θα σας πω πως θεωρώ τον πιο ασφαλή τρόπο την βάση δεδομένων σε SQL, τα δεδομένα σου είναι σε κάποιον server κοινόχρηστα και με την ασφάλεια που σου προσφέρει ένας Domain Controller σε συνδυασμό με την ασφάλεια της SQL. Εάν δεν υπάρχει κάποιος Server, οκ απλά έχεις τις δικλίδες ασφαλείας της SQL..

Ο λόγος που είναι ασφαλές?
α) Σε δίκτυο με Domain Controller έλεγχος από τον Server (Δικαιώματα κλπ) ή τοπικός SQL έλεγχος χρήστη από την SQL.
β) FrontEnd περιβάλλον για τον χρήστη, όπως το εξήγησε ποιο πάνω ο Τάσος. (split, reconnect db tables "εδώ κλειδώνει με κωδικό στον SQL ή στον Domain Controller η βάση)
γ) Κωδικός πρόσβασης στο αρχείο front end (login_splash απο τον Τάσο)
δ) Προστασία του αρχείου για: Shift κατά το άνοιγμα, απο πλήκτρα συντομέυσεων (π.χ. F5, F1, F11, F12 κλπ)
ε) Κλείδωμα του αρχείου σε μορφή .accde (για να αποτρέψουμε πιθανές τροποποιήσεις σε φόρμες, εκθέσεις, κώδικα κλπ)
στ) Δημιουργία δικού μας Ribbon για την εφαρμογή
ζ) Επιβεβαίωση χρήστη με χρήση του CPU_ID (καλό είναι για τον Super_User να παρακαμφθεί αυτό το βήμα) καθώς επίσης και επιβεβαίωση για την ύπαρξη του αρχείου στον δίσκο

Πολύ πιθανό, κάπου να υπάρχει κάποια "τρύπα" στα παραπάνω, αλλά ποτέ και τπτ δεν είναι ασφαλές..

Για την δική σου περίπτωση όμως, πιστεύω πως είναι οκ, γιατί:
α- και να αντιγράψει κάποιος το αρχείο της Access σε φλασάκι, ούτε καν να το ανοίξει δεν θα μπορεί
β- ακόμα και backup των δεδομένων (με κάποιο μαγικό τρόπο) να μπορέσει να πάρει, θα πρέπει να στήσει SQL Server, να περάσει πάνω το Backup, να παρακάμψει το CPU_ID (που δεν ξέρει καν πως υπάρχει ως έλεγχος μέσα στην εφαρμογή, μπορείς να αποθηκεύσεις το cpu_id.dll όπου κι αν θέλεις στον δίσκο σου.. ) ή να βρει για ποιον χρήστη δεν λειτουργεί το κλείδωμα του cpu_id εάν φυσικά έχει αποθηκεύσει σωστά το αρχείο στον δίσκο του.

Όλα τα παραπάνω φυσικά, εάν έχει στα χέρια του ένα bakup των δεδομένων και ξαναστήσει απο την αρχή το frontent είναι άχρηστα..

Όπως ξαναείπα, τίποτα δεν είναι απόλυτα ασφαλές.

Φιλικά, Άγγελος

smasak 26-03-15 10:44

Παράθεση:

Αρχική Δημοσίευση από editolis (Μήνυμα 12842)
Εαν δεν κανω λαθος υπαρχει και η λυση του Volume Serial Number του σκληρου δισκου. Η Βαση ανοιγει μονο στον υπολογιστη που θελεις. Με καποιες μικροτροποποιησεις κανεις δεν μπορει να την ανοιξει ακομα και εαν την εχει παρει με φλασάκι.

Πως ακριβώς δουλεύει αυτό.Μπορεί κάποιος να δώσει παράδειγμα;

Meteora 27-03-15 20:16

Καλησπέρα

Στο κώδικα που ακολουθεί,...

Κώδικας:

Private Sub klidoma()
    Dim sernum As Variant, varX As Variant

    Dim Fso As New Scripting.FileSystemObject
    sernum = Fso.GetDrive("c:\").SerialNumber
   
    varX = DLookup("[snum]", "tblsernumber", "[ID] = 1")
    If IsNull(varX) Then
        DoCmd.SetWarnings False
        DoCmd.RunSQL "INSERT INTO tblsernumber ([snum]) VALUES (" & sernum & ")"
        DoCmd.SetWarnings True
    Else
        If sernum <> varX Then
            MsgBox "Δεν έχετε την άδεια χρήσης !", vbCritical, "Έλεγχος"
            DoCmd.Quit
        End If
    End If
End Sub

...Όπως βλέπεις πρέπει να έχεις ένα πίνακα tblsernumber με δυο αριθμητικά πεδία [id] και [snum] . Φρόντισε η ρουτίνα να τρέξει στο on load της πρώτης φόρμας.
Την πρώτη φορά ο πίνακας θα συμπληρωθεί με τον σειριακό αριθμό του σκληρού σου δίσκου και κάθε επόμενη φορά θα διαβάζει τον αποθηκευμένο αριθμό, συγκρίνοντάς τον με αυτόν του υπολογιστή στο οποίο καλείται να "τρέξει".

ΠΡΟΣΟΧΗ : Κράτα αντίγραφο ...μη μείνεις απέξω.

Με εκτίμηση / Νίκος

smasak 28-03-15 07:48

Σε ευχαριστώ Νίκο, πολύ χρήσιμο.

smasak 28-03-15 08:53

1 Συνημμένο(α)
Νίκο τα έκανα αυτά που είπες αλλά μου βγάζει σφάλμα.Δεν ξέρω τι μπορεί να κάνω λάθος.
Δημιούργησα τον πίνακα με τα πεδία όπως καθορίζει η ρουτίνα την οποία καλώ από την πρώτη φόρμα που ανοίγει ("με τη φόρτωση"), μου βγάζει όμως compile error όπως θα δεις στο συνημμένο αρχείο.

Meteora 28-03-15 10:46

Καλημέρα

Στον Editor : Tools ... References ... ενεργοποίησε το microsoft scripting Runtime.


με εκτίμηση / Νίκος

smasak 29-03-15 13:10

Νίκο το έκανα αλλά πάλι δεν δουλεύει.

ΟΛΑ ΚΑΛΑ ΤΟ ΕΦΤΙΑΞΑ.:wall:

Meteora 30-03-15 15:15

...Μάλλον ξέχασες να πατήσεις ΟΚ !

intefix 30-03-15 15:43

Άρα συμπέρασμα ΔΕΝ μπορούμε να έχουμε ασφάλεια με ACCESS
Για να αυξήσουμε τη δυσκολία οι πίνακες να μην υπάρχουν καν ουτε συνδεδεμένοι...αλλά να τρέχουν με κώδικα σε κάθε περίπτωση. Δηλαδή φτιάχνουμε μια VB εφαρμογή καθαρή και οι πίνακες σε server SQL και κωδικοιποιμένοι.

smasak 17-04-15 13:30

Παράθεση:

Αρχική Δημοσίευση από Meteora (Μήνυμα 20559)
Καλησπέρα

Στο κώδικα που ακολουθεί,...

Κώδικας:

Private Sub klidoma()
    Dim sernum As Variant, varX As Variant

    Dim Fso As New Scripting.FileSystemObject
    sernum = Fso.GetDrive("c:\").SerialNumber
   
    varX = DLookup("[snum]", "tblsernumber", "[ID] = 1")
    If IsNull(varX) Then
        DoCmd.SetWarnings False
        DoCmd.RunSQL "INSERT INTO tblsernumber ([snum]) VALUES (" & sernum & ")"
        DoCmd.SetWarnings True
    Else
        If sernum <> varX Then
            MsgBox "Δεν έχετε την άδεια χρήσης !", vbCritical, "Έλεγχος"
            DoCmd.Quit
        End If
    End If
End Sub

...Όπως βλέπεις πρέπει να έχεις ένα πίνακα tblsernumber με δυο αριθμητικά πεδία [id] και [snum] . Φρόντισε η ρουτίνα να τρέξει στο on load της πρώτης φόρμας.
Την πρώτη φορά ο πίνακας θα συμπληρωθεί με τον σειριακό αριθμό του σκληρού σου δίσκου και κάθε επόμενη φορά θα διαβάζει τον αποθηκευμένο αριθμό, συγκρίνοντάς τον με αυτόν του υπολογιστή στο οποίο καλείται να "τρέξει".

ΠΡΟΣΟΧΗ : Κράτα αντίγραφο ...μη μείνεις απέξω.

Με εκτίμηση / Νίκος


Σε περίπτωση που "κρασάρει" ο Η/Υ και χρειασθεί εκ νέου format τι γίνεται;Χάνονται τα πάντα ή μπορούμε να κάνουμε κάτι;

smasak 18-04-15 13:25

Σκέφτομαι το εξής: Με το που στήνω την εφαρμογή κρατάω το volume serial number του Η/Υ.
Αν χαλάσει και γίνει format με κάποιο πρόγραμμα για αλλαγή του volume serial number ξαναπερνάω το παλιό serial.Είναι εφικτό;


Η ώρα είναι 15:35.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2