Τρόπος χρήσης της εφαρμογής τους ρόλους με έργα της Access και του SQL Server 2000 Desktop Edition

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 308312 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Για προχωρημένους: Απαιτεί ειδικό κωδικοποίησης, διαλειτουργικότητας και ικανότητες πολλών χρηστών.

Αυτό το άρθρο ισχύει μόνο για ένα έργο της Microsoft Access (.adp).

Για την έκδοση αυτού του άρθρου Microsoft Access 2000, ανατρέξτε στο θέμα318816.
Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Αυτό το άρθρο εξηγεί τις δυνατότητες, τους περιορισμούς και τις λύσεις για τη χρήση του Microsoft SQL Server Application ρόλους σε ένα έργο Microsoft Access (ADP).

Περισσότερες πληροφορίες

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

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

Μια μέθοδος που χρησιμοποιείται συχνά για εργασία αυτού του ζητήματος είναι να δώσετε μόνο τα απαραίτητα δικαιώματα για ένα λογαριασμό χρήστη του SQL Server. Πραγματικών χρηστών ενδέχεται να έχετε δικαιώματα για να συνδεθείτε σε μια βάση δεδομένων αλλά όχι να τα προβάλετε ή να τροποποιήσετε τα δεδομένα. Όταν ένας χρήστης συνδεθεί με τη βάση δεδομένων χρησιμοποιώντας το μεμονωμένο λογαριασμό χρήστη, το ADP θα μπορούσε να στη συνέχεια μέσω προγραμματισμού επανασύνδεση χρησιμοποιώντας τα διαπιστευτήρια του λογαριασμού χρήστη που έχει δικαιώματα. Ενώ αυτό μπορεί να είναι αποτελεσματική, δεν επιτρέπει να γίνεται διάκριση μεταξύ των χρηστών στη βάση δεδομένων ή για να προσδιορίσετε το χρήστη να εκτελέσει μια συγκεκριμένη ενέργεια.

Ρόλοι της εφαρμογής είναι σχεδιασμένα για να αντιμετωπίσετε αυτόν τον περιορισμό. Ρόλοι της εφαρμογής, σε αντίθεση με τους ρόλους κανονική βάση δεδομένων, δεν έχουν μέλη τους εαυτούς τους. Αντίθετα, οι χρήστες συνδέονται σε ένα διακομιστή SQL Server και σύνδεση με μια βάση δεδομένων χρησιμοποιώντας τα δικά τους πιστοποιητικά. Σε αυτό το σημείο, το περιβάλλον ασφαλείας ενός ρόλου εφαρμογής μπορεί να εφαρμοστεί μέσω προγραμματισμού σε μια υπάρχουσα σύνδεση χρησιμοποιώντας τοsp_setapproleαποθηκευμένη διαδικασία. Στον SQL Server, εξακολουθεί να είναι διαφοροποιημένα μεμονωμένους χρήστες, αλλά τα δικαιώματα που είναι διαθέσιμα σε μια συγκεκριμένη σύνδεση περιορίζονται στα δικαιώματα από το ρόλο της εφαρμογής. Ο χρήστης του μεμονωμένα δικαιώματα, αν μικρότερο ή μεγαλύτερο, θεωρούνται πλέον.

Δημιουργώντας ένα ρόλο εφαρμογής

Microsoft Accessέργα δεν έχουν όλα τα εργαλεία οπτικής σχεδίασης για τη δημιουργία αντικειμένων SQL Server ασφαλείας όπως οι ρόλοι της εφαρμογής. Η Microsoft συνιστά να χρησιμοποιήσετε τα εργαλεία προγράμματος-πελάτη που συνοδεύουν την κανονική έκδοση του SQL Server ή του Microsoft Office XP Developer για τη δημιουργία το ρόλο της εφαρμογής και την εκχώρηση δικαιωμάτων. Ωστόσο, μπορείτε να εξακολουθεί να δημιουργήσετε το ρόλο της εφαρμογής και να εκχωρήσετε την τα απαραίτητα δικαιώματα με προγραμματισμό χρησιμοποιώντας την Transact-SQL (T-SQL) από ένα ADP. Παρόλο που μια πλήρη ανάλυση του SQL Server ασφαλείας είναι έξω από την εμβέλεια αυτού του άρθρου, μπορείτε να βρείτε πρόσθετες πληροφορίες σεΣύνδεση SQL Server βιβλίαΤα παρακάτω βήματα σας δείχνουν πώς μπορείτε να δημιουργήσετε ένα ρόλο εφαρμογής μέσω προγραμματισμού και να εκχωρήσετε τον νέο ρόλοΕπιλογήpermissions on a table:
  1. Ξεκινήστε την Access.
  2. Open the Northwind sample Access project.
  3. Στο παράθυρο "βάση δεδομένων", κάντε κλικ στο κουμπίΛειτουργικές μονάδεςunderδύο διαστάσεων, και στη συνέχεια κάντε κλικ στο κουμπίΝέαto open a new module in the Visual Basic Environment.

    ΣΗΜΕΙΩΣΗΣτην Access 2007, κάντε κλικ στο κουμπίModuleΣτοΆλλοομάδα από τοCreateTAB.
  4. Type or paste the following code into the new module:
    Public Function AddNewAppRole(RoleName As String, PW As String) As Boolean
    On Error GoTo EH:
    If CurrentProject.IsConnected Then
    Dim sTSQL As String
        'Create the command
    sTSQL = "EXEC sp_addapprole '" & RoleName & "','" & PW & "'"
        'Send the command
    Application.CurrentProject.Connection.Execute sTSQL
    AddNewAppRole = True
    Else
    AddNewAppRole = False
    End If
    Exit Function
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical
    AddNewAppRole = False
    End Function
    					
  5. Save the module, and then exit the Visual Basic Environment.
  6. Create a copy of theΟι πελάτεςtable, and then save it astNewTable. Για να το κάνετε αυτό, ακολουθήστε τα εξής βήματα: (Use the tools in the Windows Recovery Environment to repair Windows Vista. To do this, follow these steps:):
    1. In the Database window, right-click theΟι πελάτεςο πίνακας και στη συνέχεια κάντε κλικΑποθήκευση ωςαπό το μενού συντόμευσης.

      ΣΗΜΕΙΩΣΗIn Access 2007, click theΟι πελάτεςtable in the navigation pane, clickΚουμπί του Microsoft Office, τοποθετήστε το δείκτηΑποθήκευση ως, και στη συνέχεια κάντε κλικ στο κουμπίSave Object As.
    2. ΣτοΑποθήκευση ωςπαράθυρο διαλόγου, πληκτρολογήστεtNewTableΣτοSave Table 'Customers' Toπλαίσιο και στη συνέχεια κάντε κλικOk.
  7. Στο παράθυρο "βάση δεδομένων", κάντε κλικ στο κουμπίΦόρμεςunderδύο διαστάσεωνΚάντε κλικΝέα, και στη συνέχεια κάντε κλικ στο κουμπίOkto open a new form in Design view.

    ΣΗΜΕΙΩΣΗΣτην Access 2007, κάντε κλικ στο κουμπίForm DesignΣτοΦόρμεςομάδα από τοCreateTAB.
  8. Add a command button to the new form.
  9. Ορισμός τουΜε κλικ (OnClick)property of the new command button to the following event procedure:
    On Error GoTo EH:
    'Code only works if ADP is connected.
    If CurrentProject.IsConnected Then
        Dim bNewAppRole As Boolean, strTSQL As String
        Dim strRoleName As String, strPW As String
        strRoleName = "AppRoleName"
        strPW = "Password"
        'Call function to create app role.
        bNewAppRole = AddNewAppRole(strRoleName, strPW)
        'Test to see if it failed.
        If bNewAppRole = False Then
            Exit Sub
        End If
        MsgBox "New Application role '" & strRoleName & "' created", vbInformation
        'Create command to grant permissions.
        strTSQL = "Grant Select on tNewTable to " & strRoleName
        'Send the command.
        Application.CurrentProject.Connection.Execute strTSQL
        MsgBox "Select permissions granted on tNewTable for " & strRoleName
    Else
    MsgBox "ADP must be connected to SQL Server"
    End If
    Exit Sub
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical
    					
  10. Close the Visual Basic Environment to return to the form.
  11. Save the form, and then switch the form to theForm view.
  12. Click the command button to run the underlying code.

    Notice that you receive two message boxes to indicate success. You receive one after the application role is created, and the second one after the new role permissions to tNewTable are granted.

Implementing the Application role

The main complication when you are using application roles in Access projects is that Access uses three connections to SQL Server to handle various tasks. Ideally, to apply an application role to the whole project, you would have to executesp_setapprolein the context of all three connections. The objects handled by each connection are as follows:

  1. Used for determining which objects appear in the Database window and for miscellaneous database administrative tasks.

    Used for opening tables, views, stored procedures, functions, and the record sources for forms and subreports (but not for the main report itself).

    Used for obtaining the record sources for combo boxes, list boxes, and reports.
  2. Used for opening tables, views, stored procedures, functions, and the record sources for forms and subreports (but not for the main report itself).

    Used for obtaining the record sources for combo boxes, list boxes, and reports.
  3. Used for obtaining the record sources for combo boxes, list boxes, and reports.

Although connections #2 and #3 can be accessed fairly easily, there is no method available for executing the stored procedure in the context of connection #1. Fortunately, this connection is the least important of the three and is easily worked around by constructing your own user interface (for example, a switchboard-type form) for handling database objects instead of relying on the built-in Database window.

The following steps use the Northwind sample Access project to demonstrate how to apply an application role against connections #2 and #3:

  1. Στο παράθυρο "βάση δεδομένων", κάντε κλικ στο κουμπίΦόρμεςunderδύο διαστάσεωνΚάντε κλικΝέα, και στη συνέχεια κάντε κλικ στο κουμπίOkto open a new form in Design view.

    ΣΗΜΕΙΩΣΗΣτην Access 2007, κάντε κλικ στο κουμπίForm DesignΣτοΦόρμεςομάδα από τοCreateTAB.
  2. Add a list box to the newly created form, and then set theNAMEproperty of the list box tolst_AppRole.
  3. Add a command button to the form.
  4. Ορισμός τουΜε κλικ (OnClick)property of the new command button to the following event procedure:
    On Error GoTo EH
        'This avoids a message that no records were returned.
    DoCmd.SetWarnings False
    Dim TSQL
    TSQL = "EXEC sp_setapprole 'AppRoleName', {Encrypt N 'Password'}, 'odbc'"
        'This sets the app role on Connection #2.
    Application.CurrentProject.Connection.Execute TSQL
        'This sets the app role on Connection #3.
    lst_approle.RowSource = TSQL
    lst_approle.Requery
    DoCmd.SetWarnings True
    MsgBox "The application Role is now in effect.", vbInformation
    Exit Sub
    EH:
    MsgBox Err.Number & ": " & Err.Description, vbCritical
    					
  5. Close the Visual Basic Environment to return to the form.
  6. Save the form, and then switch the form to theForm view.
  7. Click the command button to run the underlying code.

    Notice that you receive a message box that indicates success.
  8. Στο παράθυρο "βάση δεδομένων", κάντε κλικ στο κουμπίTablesunderδύο διαστάσεων, and then open thetNewTableTABLE.

    ΣΗΜΕΙΩΣΗIn Access 2007, double-clicktNewTabletable in the navigation pane.
  9. Modify a record and try to save the changes.
Notice that as you try to commit your changes, you receive an error message about not having enough permissions. This occurs because you gave the new application roleΕπιλογήδικαίωμα από τοtNewTableΠίνακας, αλλά όχιΕνημέρωσηΔικαιώματα.

Από τη σχεδίαση, η Access εμφανίζει μόνο αντικείμενα στο παράθυρο της βάσης δεδομένων για το οποίο ο χρήστης έχει τουλάχιστον Select ή εκτέλεση δικαιώματα. Η Access χρησιμοποιεί σύνδεση # 1 για να προσδιορίσετε ποια αντικείμενα ένας χρήστης έχει δικαιώματα. Μετά την εφαρμογή της εφαρμογής ρόλου στο παράθυρο συνδέσεις # 2 και # 3, η βάση δεδομένων εξακολουθεί να εμφανίζει τα ίδια αντικείμενα που είχε πριν, ακόμα και αν ο χρήστης δεν θα μπορεί να έχει δικαιώματα για όλα τα αντικείμενα ή μπορεί να έχετε δικαιώματα περισσότερα αντικείμενα, τα οποία δεν εμφανίζονται. Αυτό μπορεί να προκαλέσει απροσδόκητη συμπεριφορά όταν χρησιμοποιείτε το παράθυρο "βάση δεδομένων".

Για παράδειγμα, όταν ανοίγει ο πίνακας tNewTable, "φαίνεται" ότι ο χρήστης έχει δικαιώματα για να επεξεργαστείτε και να εισαγάγετε εγγραφές. Η εισαγωγή νέα εγγραφή εικονίδιο στο κάτω μέρος του πίνακα είναι ενεργοποιημένη και ο χρήστης έχει τη δυνατότητα να τοποθετήσετε μια εγγραφή σε λειτουργία επεξεργασίας. Δεν εμφανίζεται οπτική γρίφος για να δηλώσετε διαφορετικά μέχρι να προσπαθήσετε να ολοκληρώσει την επεξεργασία ή εισαγωγής, η οποία έχει ως αποτέλεσμα ένα μήνυμα λάθους. Η Access θεωρεί ότι έχετε δικαιώματα όταν στην πραγματικότητα δεν.

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

Άλλοι περιορισμοί και θέματα ασφαλείας

Subforms δεν λειτουργεί

Σε αντίθεση με τις με άλλα αντικείμενα της βάσης δεδομένων Access δεν χρησιμοποιεί πάντα την ίδια σύνδεση για να ανακτήσετε το αρχείο προέλευσης δεδομένων της δευτερεύουσας φόρμας. Η Access συχνά (αλλά όχι πάντα) δημιουργεί μια νέα σύνδεση με τον SQL Server μόνο για το χειρισμό του συνόλου εγγραφών της δευτερεύουσας φόρμας ή για την ανάκτηση δεδομένων πεδίου σύνδεσης που συνδέει τη δευτερεύουσα φόρμα στην κύρια φόρμα. Επειδή αυτή η νέα σύνδεση δεν έχει το ρόλο της εφαρμογής εφαρμόζονται, ένα σφάλμα δικαιώματα ενδέχεται να δημιουργηθούν αν δεν έχετε ρητά δικαιώματα στο αντικείμενο βάσης δεδομένων. Δυστυχώς, αυτό σημαίνει ότι δεν υπάρχει αξιόπιστος τρόπος χρήσης δεσμευμένων δευτερεύουσες φόρμες, όταν εφαρμόζονται οι ρόλοι της εφαρμογής. Η μόνη αποτελεσματική λύση είναι να μη διαθέτει πλήρως δεσμευμένο δευτερεύουσες φόρμες, με το χειρισμό δεδομένων μέσω προγράμματος χειρισμού. Είναι η πιο σοβαρή περιορισμός κατά τη χρήση ρόλων εφαρμογής της Access.

Αναφορές δεν λειτουργεί

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

Για να επιλύσετε αυτό το ζήτημα, χρησιμοποιείτε πάντα προτάσεις Transact-SQL ως προέλευση εγγραφών για φόρμες και εκθέσεις. Για παράδειγμα, χρησιμοποιήστε την εντολή "Επιλογή * από ViewName" αντί απλώς "ViewName" ή "Exec StoredProcedureName" αντί απλώς "StoredProcedureName". Με αυτόν τον τρόπο, η Access μεταβιβάζει τις προτάσεις Transact-SQL απευθείας στο διακομιστή SQL και ανακτά τα δεδομένα με βάση τα δικαιώματα από το ρόλο της εφαρμογής.

Ο ρόλος της δημόσιας βάσης δεδομένων

Ένα ρόλο εφαρμογής αποκτά τα δικαιώματα στο ρόλο της δημόσιας βάσης δεδομένων. By default in NorthwindCS, the Public role has full permissions to most objects. Therefore, an application role is generally ineffective. When you created the tNewTable table in the "Creating an Application Role" section, the Public role was not granted permission to the table, and you later saw the effects of the application role security context on that table. However, other tables may not show any difference under the application role because the Public role has permissions to those objects.

VBA security

Because the password for the Application role is embedded into the application from which it is called, a knowledgeable user would be able to read the application role name and password from the source code, and then use that information to gain access to SQL Server from another application. Therefore, it is a good idea to compile the ADP into an ADE file so that the source code is not viewable. At minimum, enforce a password on the VBA project.

Αναφορές

For additional information about a Microsoft Access 2000 version of this article, click the article number below to view the article in the Microsoft Knowledge Base:
318816ACC2000: How to Use Application Roles with Access Projects and SQL Server 2000 Desktop Engine (MSDE 2000)
For more information about GRANT, see theΣύνδεση SQL Server βιβλία. Για ναΣύνδεση SQL Server βιβλίαis available at the following Microsoft Web site:
http://www.microsoft.com/sql/techinfo/productdoc/2000/default.asp

Ιδιότητες

Αναγν. άρθρου: 308312 - Τελευταία αναθεώρηση: Σάββατο, 17 Σεπτεμβρίου 2011 - Αναθεώρηση: 5.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Λέξεις-κλειδιά: 
kbexpertiseinter kbinfo kbprogramming kbadp kbvba kbhowto kbmt KB308312 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:308312

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com