Έλεγχος πρόσβασης σε sql. Διαχείριση της ασφάλειας του SQL Server με χρήση της Microsoft Access (τεκμηρίωση)

Συσκευές 15.07.2019
Συσκευές

Το περιβάλλον του SQL Server παρέχει μια σειρά από διαφορετικές δομές ελέγχου, χωρίς τις οποίες είναι αδύνατο να γραφτούν αποτελεσματικοί αλγόριθμοι.

Η ομαδοποίηση δύο ή περισσότερων εντολών σε ένα μόνο μπλοκ γίνεται χρησιμοποιώντας τις λέξεις-κλειδιά BEGIN και END:

<блок_операторов>::=

Οι ομαδοποιημένες εντολές αντιμετωπίζονται ως μια ενιαία εντολή από τον διερμηνέα SQL. Ανάλογη ομαδοποίηση απαιτείται για κατασκευές πολυμεταβλητής διακλάδωσης, υπό όρους και κυκλικές κατασκευές. BEGIN...END τα μπλοκ μπορούν να είναι ένθετα.

Ορισμένες εντολές SQL δεν πρέπει να εκτελούνται με άλλες εντολές (όπως εντολές δημιουργίας αντιγράφων ασφαλείας, αλλαγές στη δομή του πίνακα, αποθηκευμένες διαδικασίες και παρόμοια), επομένως δεν μπορούν να συμπεριληφθούν μαζί σε μια πρόταση BEGIN...END.

Συχνά ένα συγκεκριμένο μέρος ενός προγράμματος πρέπει να εκτελείται μόνο εάν ικανοποιείται κάποια λογική συνθήκη. Η σύνταξη της δήλωσης υπό όρους φαίνεται παρακάτω:

<условный_оператор>::=

IF log_expression

(sql_statement | statement_block)

(sql_statement | statement_block) ]

Οι βρόχοι οργανώνονται χρησιμοποιώντας την ακόλουθη κατασκευή:

<оператор_цикла>::=

WHILE log_expression

(sql_statement | statement_block)

(sql_statement | statement_block)

Ο βρόχος μπορεί να σταματήσει αναγκαστικά εκτελώντας την εντολή BREAK στο σώμα του. Εάν πρέπει να ξεκινήσετε ξανά τον βρόχο χωρίς να περιμένετε να εκτελεστούν όλες οι εντολές στο σώμα, πρέπει να εκτελέσετε την εντολή ΣΥΝΕΧΕΙΑ.

Για να αντικαταστήσετε πολλές απλές ή ένθετες εντολές υπό όρους, χρησιμοποιήστε την ακόλουθη κατασκευή:

<оператор_поливариантных_ветвлений>::=

CASE input_value

ΠΟΤΕ (compare_value |

log_expression ) ΤΟΤΕ

output_expression [,...n]

[ ΑΛΛΟ αλλιώς_out_expression ]

Εάν η τιμή εισόδου και η τιμή σύγκρισης ταιριάζουν, τότε η κατασκευή επιστρέφει την τιμή εξόδου. Εάν η τιμή της παραμέτρου εισόδου δεν βρεθεί σε καμία από τις γραμμές WHEN...THEN, τότε θα επιστραφεί η τιμή που καθορίστηκε μετά τη λέξη-κλειδί ELSE.

Βασικά αντικείμενα της δομής βάσης δεδομένων διακομιστή SQL

Ας δούμε τη λογική δομή της βάσης δεδομένων.

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

Λογικά, τα δεδομένα στον SQL Server είναι οργανωμένα σε αντικείμενα. Τα κύρια αντικείμενα βάσης δεδομένων του SQL Server περιλαμβάνουν τα ακόλουθα αντικείμενα.

Μια σύντομη επισκόπηση των κύριων αντικειμένων της βάσης δεδομένων.

Πίνακες

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

· γραμμές? κάθε γραμμή (ή εγγραφή) αντιπροσωπεύει ένα σύνολο χαρακτηριστικών (ιδιοτήτων) μιας συγκεκριμένης παρουσίας ενός αντικειμένου.

· στήλες; κάθε στήλη (πεδίο) αντιπροσωπεύει ένα χαρακτηριστικό ή μια συλλογή χαρακτηριστικών. Ένα πεδίο γραμμής είναι το ελάχιστο στοιχείο ενός πίνακα. Κάθε στήλη σε έναν πίνακα έχει συγκεκριμένο όνομα, τύπο δεδομένων και μέγεθος.

Αναπαράσταση

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

Αποθηκευμένες διαδικασίες

Οι αποθηκευμένες διαδικασίες είναι μια ομάδα εντολών SQL που συνδυάζονται σε μια ενότητα. Αυτή η ομάδα εντολών μεταγλωττίζεται και εκτελείται ως ενιαία μονάδα.

Πυροδοτήσεις

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

Λειτουργίες

Οι συναρτήσεις στις γλώσσες προγραμματισμού είναι κατασκευές που περιέχουν κώδικα που εκτελείται συχνά. Η συνάρτηση εκτελεί ορισμένες ενέργειες με τα δεδομένα και επιστρέφει κάποια τιμή.

Ευρετήρια

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


©2015-2019 ιστότοπος
Όλα τα δικαιώματα ανήκουν στους δημιουργούς τους. Αυτός ο ιστότοπος δεν διεκδικεί την πνευματική ιδιοκτησία, αλλά παρέχει δωρεάν χρήση.
Ημερομηνία δημιουργίας σελίδας: 08-08-2016

Rick Dobson, Ph.D. Επιλεκτική μετάφραση S. A. Ledenev

Αυτό το άρθρο εξηγεί τον τρόπο διαχείρισης της ασφάλειας διακομιστή SQL χρησιμοποιώντας την Access με τη βιβλιοθήκη SQL Distributed Management Objects (SQL-DMO) στη Visual Basic για Εφαρμογές (VBA).

Εισαγωγή

Αυτό το άρθρο απευθύνεται κυρίως σε προγραμματιστές έργων ADP. Μπορεί να είστε εξοικειωμένοι με 2 πράγματα σχετικά με την ασφάλεια του διακομιστή SQL. Πρώτον, η ασφάλεια δεν είναι μια επιλογή όπως ήταν στο Jet. Δεύτερον, το μοντέλο ασφαλείας του SQL Server είναι διαφορετικό από το μοντέλο ασφαλείας της Access. Ακόμα κι αν έχετε μια πρόχειρη κατανόηση της ασφάλειας του SQL Server, αυτό το άρθρο θα σας διδάξει πώς να τον ρυθμίσετε για την προστασία των πόρων του έργου σας.

Αυτό το άρθρο μπορεί επίσης να είναι χρήσιμο για διαχειριστές διακομιστή SQL. Οι λύσεις που προσφέρονται εδώ μπορούν να τους βοηθήσουν να διαχειριστούν την ασφάλεια του διακομιστή χρησιμοποιώντας την Access. Αυτό το άρθρο μπορεί να βοηθήσει τους διαχειριστές να μάθουν πώς να διαχειρίζονται την ασφάλεια του διακομιστή χωρίς να χρησιμοποιούν τα γραφικά εργαλεία του Enterprise Manager ή να εκτελούν σενάρια Transact SQL (T-SQL) από το Query Analyzer. Μαθαίνοντας πώς να διαχειρίζεστε την ασφάλεια διακομιστή χρησιμοποιώντας την Access, οι διαχειριστές έχουν τη δυνατότητα να δημιουργήσουν μια ταχύτερη λύση.

Το άρθρο μπορεί να χωριστεί χονδρικά σε δύο μέρη σχετικά με την ασφάλεια του SQL Server 7.0 και του SQL Server 2000. Αρχικά, συζητείται η έννοια της ασφάλειας του SQL Server, εστιάζοντας στον τρόπο διαχείρισης της ασφάλειας χρησιμοποιώντας την Access. Αυτές οι πληροφορίες επαρκούν για την ανάπτυξη εφαρμογών πολλών χρηστών με διαφορετικές ομάδες χρηστών που έχουν σαφώς καθορισμένα δικαιώματα χρήσης αντικειμένων διακομιστή. Το δεύτερο μέρος του άρθρου παρουσιάζει λύσεις λογισμικού που βασίζονται στη διαχείριση αντικειμένων SQL-DMO (SQL Distributed Management Objects) χρησιμοποιώντας Microsoft Visual Basic® for Applications (VBA). Επειδή το SQL-DMO έχει ένα ιεραρχικό μοντέλο κατασκευής αντικειμένων πολύ παρόμοιο με το μοντέλο κατασκευής αντικειμένων του Microsoft Office, το μόνο που χρειάζεται είναι να μάθετε περισσότερα για τα αντικείμενα, τις ιδιότητες, τις μεθόδους και τα συμβάντα SQL-DMO σχετικά με την ασφάλεια. Επιπλέον, οι προγραμματιστές της Access 2002 δεν μπορούν να κάνουν χωρίς προγραμματισμό των συναρτήσεων διαμόρφωσης ασφαλείας στο VBA, καθώς δεν είναι διαθέσιμες από το μενού Ασφάλεια βάσης δεδομένων.

Έννοια ασφάλειας του SQL Server

Αυτή η ενότητα αποτελείται από 4 κύρια μέρη. Η εισαγωγή ξεκινά με μια περιγραφή του ελέγχου ταυτότητας - η διαδικασία ελέγχου ενός χρήστη για το δικαίωμα πρόσβασης στη βάση δεδομένων διακομιστή. Χρησιμοποιώντας το Enterprise Manager, ο SQL Server παρέχει δύο τύπους ελέγχου ταυτότητας. Το πρώτο μέρος της ενότητας δείχνει τις διαφορές και τις ομοιότητες μεταξύ τους.

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

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

Το Μέρος 4 μιλά για ρόλους βάσης δεδομένων που καθορίζονται από τον χρήστη.

Αυθεντικοποίηση

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

Ο SQL Server υποστηρίζει δύο τύπους ελέγχου ταυτότητας: SQL Server και Microsoft Windows® (ή Windows NT® με SQL Server 7.0). Αυτοί οι δύο τύποι καθορίζουν ποιος εκτελεί την επαλήθευση σύνδεσης: διακομιστής SQL ή Windows. Με τον έλεγχο ταυτότητας των Windows, οι χρήστες έχουν αξιόπιστους λογαριασμούς για πρόσβαση στον διακομιστή SQL. Αυτοί οι λογαριασμοί επαληθεύονται από τα Windows, αλλά ο διακομιστής SQL "γνωρίζει" το όνομα του λογαριασμού. Ο έλεγχος ταυτότητας των Windows επιτρέπει στους χρήστες να συνδεθούν στα Windows και στον διακομιστή SQL εισάγοντας μόνο έναν κωδικό πρόσβασης. Με τον έλεγχο ταυτότητας του SQL Server, ο ίδιος ο διακομιστής SQL εκτελεί την εξουσιοδότηση. Με οποιονδήποτε τύπο ελέγχου ταυτότητας, ο διακομιστής SQL πρέπει να γνωρίζει τις εξουσιοδοτημένες συνδέσεις.

Υπάρχουν πλεονεκτήματα και μειονεκτήματα τόσο στον πρώτο όσο και στον δεύτερο τύπο, αλλά ο έλεγχος ταυτότητας των Windows είναι προτιμότερος. Τα Windows έχουν μια πιο περίπλοκη διαδικασία εξουσιοδότησης και απαλλάσσουν τον διαχειριστή του διακομιστή SQL από τη διαχείριση λογαριασμών. Από την άλλη πλευρά, δεν υποστηρίζουν όλα τα λειτουργικά συστήματα που υποστηρίζουν τον διακομιστή SQL τον έλεγχο ταυτότητας των Windows. Για παράδειγμα, το Microsoft Data Engine (MSDE) εγκατεστημένο με το Microsoft Office 2000 και το Microsoft SQL Server 2000 Desktop Engine (MSDE 2000) εγκατεστημένο με το Office XP: και τα δύο μπορούν να εκτελεστούν σε Windows 98, τα οποία δεν υποστηρίζουν έλεγχο ταυτότητας των Windows. Ή ο SQL Server 7.0 και το MSDE που εκτελούνται σε Windows 95. Ορισμένοι οργανισμοί μπορεί να προτιμούν τη δυνατότητα ελέγχου της πρόσβασης σε πόρους της βάσης δεδομένων σε επίπεδο DBA παρά σε πιο παγκόσμιο επίπεδο διαχειριστή των Windows.

Οποιαδήποτε παρουσία του SQL Server μπορεί να έχει οποιονδήποτε από τους δύο τύπους ελέγχου ταυτότητας που μπορούν να οριστούν στο Enterprise Manager (θα καλύψω τον τρίτο τύπο αργότερα σε αυτό το άρθρο). Η τεκμηρίωση του SQL Server ορίζει τον όρο σύνδεση μικτής λειτουργίας σε έναν SQL Server, ο οποίος υποστηρίζει έλεγχο ταυτότητας Windows και SQL Server. Εάν ο διακομιστής υποστηρίζει μόνο έλεγχο ταυτότητας Windows, τότε ο διακομιστής έχει τύπο ελέγχου ταυτότητας Windows (ή Windows NT). Από προεπιλογή, το MSDE εγκαθίσταται με μεικτό τύπο ελέγχου ταυτότητας. Το MSDE 2000, από την άλλη πλευρά, εγκαθίσταται με έλεγχο ταυτότητας των Windows από προεπιλογή. Οι προγραμματιστές και οι διαχειριστές που χρησιμοποιούν το Enterprise Manager μπορούν να αλλάξουν τον τύπο ελέγχου ταυτότητας χρησιμοποιώντας εργαλεία γραφικών. Επίσης, οποιαδήποτε εφαρμογή μπορεί να χρησιμοποιήσει τη βιβλιοθήκη SQL-DMO για να αλλάξει τον τύπο ελέγχου ταυτότητας διακομιστή.

Συνδέσεις και σταθεροί ρόλοι διακομιστή

Το έργο ADP περιέχει ένα παράθυρο βάσης δεδομένων παρόμοιο με τις παραδοσιακές λύσεις Jet. Ωστόσο, το έργο ADP συνδέεται με τον διακομιστή μέσω μιας σύνδεσης OLE DB, σε αντίθεση με μια βάση δεδομένων Jet. Σε ένα έργο ADP, ο τύπος σύνδεσης καθορίζεται στο παράθυρο διαλόγου Ιδιότητες σύνδεσης δεδομένων. Για να καλέσετε αυτό το παράθυρο διαλόγου: από το παράθυρο της βάσης δεδομένων, επιλέξτε το μενού Αρχείο, επιλέξτε Σύνδεση από το μενού.

Το παράθυρο διαλόγου Επιλογές σύνδεσης σάς επιτρέπει να επιλέξετε τον διακομιστή βάσης δεδομένων, τη σύνδεση και τη βάση δεδομένων στην οποία θα συνδεθεί το έργο μέσω OLE DB. Υπάρχουν δύο τρόποι σύνδεσης στον διακομιστή. Η πρώτη επιλογή επιλέγει τη χρήση της ενσωματωμένης ασφάλειας των Windows NT. Αυτό ονομάζεται έλεγχος ταυτότητας των Windows. Κάνοντας αυτήν την επιλογή, δεν χρειάζεται να παρέχετε κωδικό πρόσβασης και κωδικό πρόσβασης. Αυτό συμβαίνει επειδή τα Windows εξουσιοδοτούν τον χρήστη κατά την εκκίνηση των Windows. Όταν είναι επιλεγμένη η επιλογή χρήσης εσωτερικής ασφάλειας, το έργο ADP στέλνει τη σύνδεση των Windows στον διακομιστή SQL όταν προσπαθεί να δημιουργήσει μια σύνδεση OLE DB σε αυτόν. Επιλέγοντας τη δεύτερη επιλογή (χρησιμοποιήστε ένα συγκεκριμένο όνομα χρήστη και κωδικό πρόσβασης), πρέπει να καθορίσετε τη σύνδεση του διακομιστή SQL. Στο πεδίο ονόματος χρήστη, πρέπει να εισαχθεί το τυπικό όνομα σύνδεσης διακομιστή SQL - η σύνδεση που υποστηρίζεται από αυτόν τον διακομιστή SQL. Ο κωδικός πρόσβασης είναι προαιρετικός, αλλά συνιστάται ανεπιφύλακτα η χρήση κωδικού πρόσβασης, καθώς μαζί με τη σύνδεση, ο κωδικός πρόσβασης παρέχει ένα επιπλέον επίπεδο ασφάλειας.

Αν και η εισαγωγή μιας σύνδεσης είναι το κλειδί κατά τη δημιουργία μιας σύνδεσης OLE DB σε ένα έργο ADP, η σύνδεση από μόνη της δεν επαρκεί για να εκχωρήσει δικαιώματα για την εκτέλεση εργασιών στον διακομιστή ή στη βάση δεδομένων. Υπάρχει η έννοια της ιδιότητας μέλους σύνδεσης σε σταθερούς ρόλους διακομιστή, η οποία επιτρέπει στο έργο ADP να εκτελεί ορισμένες λειτουργίες διακομιστή, όπως η δημιουργία νέων βάσεων δεδομένων και η διαχείριση συνδέσεων. Ανάλογα με την έκδοση του διακομιστή SQL στον οποίο συνδέεται το έργο ADP, υπάρχουν επτά ή οκτώ σταθεροί ρόλοι διακομιστή. Ο SQL Server 7.0 και το MSDE παρέχουν επτά σταθερούς ρόλους διακομιστή, ενώ ο SQL Server 2000 και το MSDE 2000 παρέχουν οκτώ. Το SQL Server Books Online (BOL) περιέχει ολοκληρωμένη τεκμηρίωση σχετικά με τους σταθερούς ρόλους διακομιστή, συμπεριλαμβανομένων των εκφράσεων T-SQL για την εκχώρηση και την αφαίρεση συνδέσεων από τη συμμετοχή ρόλων. Για παράδειγμα, η ενότητα Ρόλοι του BOL μιλά για σταθερά πεδία διακομιστή και ένα αντίστοιχο σύνολο δικαιωμάτων για πρόσβαση σε βάσεις δεδομένων, όπως προβολή και εγγραφή σε πίνακες.

Ο παρακάτω πίνακας παρέχει μια γρήγορη επισκόπηση των ονομάτων ρόλων σταθερών διακομιστών και μια σύντομη περιγραφή τους. Μπορείτε να εκτελέσετε την αποθηκευμένη διαδικασία του συστήματος sp_helpsrvrole για να αποκτήσετε μια λίστα με ονόματα ρόλων σταθερών διακομιστή. Η εκτέλεση της αποθηκευμένης διαδικασίας του συστήματος sp_srvrolepermission εμφανίζει μια λεπτομερή λίστα λειτουργιών για κάθε ρόλο σταθερού διακομιστή. Υπάρχουν διαφορές μεταξύ των ρόλων σταθερού διακομιστή στις εκδόσεις 7.0 και 2000 του SQL Server. Για παράδειγμα, ο bulkadmin είναι ένας νέος ρόλος στον SQL Server 2000. Επιπλέον, η δήλωση DROP DATABASE ήταν διαθέσιμη μόνο για τον ρόλο sysadmin στον SQL Server 7.0 και ο SQL Server 2000 επιτρέπει στα μέλη του ρόλου dbcreator να εκτελούν επίσης αυτή τη διαδικασία.

Διορθώθηκε το όνομα ρόλου διακομιστή

Περιγραφή του ρόλου του σταθερού διακομιστή

sysadmin Εκτελέστε οποιαδήποτε έκφραση διακομιστή ή βάσης δεδομένων
Διαχειριστής διακομιστή Διαχείριση διακομιστή, διαμόρφωση, εκκίνηση, διακοπή.
setupadmin Διαχείριση συνδεδεμένων διακομιστών και δικαίωμα εκτέλεσης αποθηκευμένων διαδικασιών στο στάδιο εκκίνησης διακομιστή.
ασφάλεια διαχειριστής Διαχείριση στοιχείων σύνδεσης και κωδικών πρόσβασης. Μπορεί να δώσει το δικαίωμα δημιουργίας νέων βάσεων δεδομένων.
Διαχειριστής επεξεργασίας Εκτέλεση της εντολής KILL.
dbcreator Δημιουργία, αλλαγή, μετονομασία και διαγραφή βάσεων δεδομένων.
diskadmin Διαχείριση αρχείων στο δίσκο.
bulkadmin Εκτέλεση εντολών BULK INSERT.

Η σύνδεση sa είναι μια ειδική σύνδεση διακομιστή SQL. Αυτή η σύνδεση είναι μέλος της ομάδας sysadmin και παρέχει το δικαίωμα εκτέλεσης οποιωνδήποτε λειτουργιών στον διακομιστή. Ο SQL Server δημιουργεί αυτήν τη σύνδεση κατά την εγκατάσταση και δεν μπορεί να διαγραφεί. Αμέσως μετά την ολοκλήρωση της εγκατάστασης, η σύνδεση sa δεν έχει κωδικό πρόσβασης. Είναι απαραίτητο να ορίσετε έναν κωδικό πρόσβασης για το sa για να διασφαλίσετε την ασφάλεια του διακομιστή της βάσης δεδομένων σας, ειδικά για διακομιστές με μεικτούς τύπους ελέγχου ταυτότητας. Θυμηθείτε: οι διακομιστές με έλεγχο ταυτότητας Windows δεν δέχονται ούτε επεξεργάζονται συνδέσεις διακομιστή SQL.

Κατά την εγκατάσταση του διακομιστή SQL σε Windows 98 ή Windows ME, ο διακομιστής εγκαθίσταται πάντα με έναν μικτό τύπο ελέγχου ταυτότητας, ώστε να μπορεί να δέχεται συνδέσεις διακομιστή SQL. Οι προεπιλεγμένοι τύποι ελέγχου ταυτότητας διαφέρουν για τον SQL Server 7.0 και το MSDE από τον SQL Server 2000 και τον MSDE 2000 που είναι εγκατεστημένοι σε Windows 2000 και Windows NT. Για τον SQL Server 7.0 και το MSDE, η προεπιλεγμένη διαδικασία εγκατάστασης εγκαθιστά τον διακομιστή με μεικτό τύπο ελέγχου ταυτότητας. Αντίθετα, ο SQL Server 2000 και ο MSDE 2000 εγκαθίστανται με έλεγχο ταυτότητας Windows από προεπιλογή. Επιπλέον, η διαδικασία εγκατάστασης της Έκδοσης 2000 εκχωρεί μέλη της ομάδας διαχειριστών των Windows στο ρόλο του σταθερού διακομιστή sysadmin. Επομένως, αυτές οι συνδέσεις είναι παρόμοιες με τη σύνδεση sa, η οποία έχει τον πλήρη έλεγχο του διακομιστή.

Χρήστες και σταθεροί ρόλοι βάσης δεδομένων

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

Ο SQL Server μπορεί να εκχωρήσει στους χρήστες βάσης δεδομένων την ιδιοκτησία της βάσης δεδομένων και δικαιώματα χρήσης αντικειμένων βάσης δεδομένων. Ο SQL Server παρέχει εκχώρηση αδειών εντός της βάσης δεδομένων σε δύο ανεξάρτητα επίπεδα. Στο πρώτο επίπεδο, μπορείτε να εκχωρήσετε ένα ή περισσότερα συμπλέγματα δικαιωμάτων σε έναν χρήστη. Η τεκμηρίωση του SQL Server ορίζει αυτά τα συμπλέγματα ως σταθερούς ρόλους βάσης δεδομένων. Τα ονομάζω συμπλέγματα δικαιωμάτων επειδή μπορούν να συνδυάσουν δικαιώματα σε πολλά αντικείμενα βάσης δεδομένων. Για παράδειγμα, ένας σταθερός ρόλος (db_datareader) σάς επιτρέπει να διαβάζετε δεδομένα από οποιονδήποτε πίνακα στη βάση δεδομένων—όχι μόνο έναν ή δύο συγκεκριμένους πίνακες. Στο δεύτερο επίπεδο, μπορείτε να εκχωρήσετε δικαιώματα σε επίπεδο συγκεκριμένων αντικειμένων βάσης δεδομένων. Ο SQL Server σάς επιτρέπει να συνδυάσετε και τις δύο μεθόδους: ένας χρήστης μπορεί να είναι μέλος ενός ή περισσότερων σταθερών ρόλων βάσης δεδομένων και επίσης να έχει συγκεκριμένα δικαιώματα σε συγκεκριμένα αντικείμενα βάσης δεδομένων. Θα καλύψω τα δικαιώματα διαχείρισης σε συγκεκριμένα αντικείμενα βάσης δεδομένων στην επόμενη ενότητα.

Δύο ειδικοί χρήστες μπορούν να συσχετιστούν με περισσότερα από ένα στοιχεία σύνδεσης. Αυτοί είναι οι χρήστες του dbo και των επισκεπτών. Ο χρήστης dbo είναι μέλος του ρόλου του σταθερού διακομιστή sysadmin και μπορεί να δημιουργήσει αντικείμενα στον διακομιστή, όπως βάσεις δεδομένων ή πίνακες βάσεων δεδομένων. Ένας χρήστης του οποίου η σύνδεση δεν ανήκει στον ρόλο του σταθερού διακομιστή sysadmin μπορεί επίσης να δημιουργήσει αντικείμενα βάσης δεδομένων, όπως πίνακες.

Η ορατότητα των αντικειμένων στο παράθυρο βάσης δεδομένων έργου ADP εξαρτάται από το εάν η σύνδεση του έργου ανήκει στον ρόλο του σταθερού διακομιστή sysadmin. Εάν η σύνδεση του έργου ADP είναι μέλος του ρόλου sysadmin, το παράθυρο βάσης δεδομένων εμφανίζει όλα τα αντικείμενα που ανήκουν στον χρήστη dbo, χωρίς παρενθέσεις μετά τα ονόματά τους. Για χρήστες dbo, όλα τα αντικείμενα που ανήκουν σε χρήστες εκτός του dbo εμφανίζονται με το όνομα χρήστη που περικλείεται σε παρένθεση μετά το όνομα του αντικειμένου της βάσης δεδομένων. Εάν η σύνδεση του έργου ADP δεν ανήκει στον ρόλο του sysadmin, τα ονόματα των αντικειμένων που ανήκουν σε αυτόν τον χρήστη εμφανίζονται στο παράθυρο της βάσης δεδομένων χωρίς παρενθέσεις. Τα ονόματα των αντικειμένων των οποίων ο ιδιοκτήτης είναι dbo εμφανίζονται με το επίθημα (dbo). Τα αντικείμενα των οποίων οι κάτοχοι δεν είναι χρήστης σύνδεσης έργου ADP ή χρήστης dbo δεν εμφανίζονται στο παράθυρο βάσης δεδομένων.

Οι περισσότερες συνδέσεις έχουν χρήστες για κάθε βάση δεδομένων στην οποία έχουν πρόσβαση. Ωστόσο, μια σύνδεση μπορεί να έχει πρόσβαση σε μια βάση δεδομένων ακόμη και χωρίς χρήστη σε αυτήν τη βάση δεδομένων, εάν η βάση δεδομένων έχει έναν αποκλειστικό χρήστη. Το όνομα αυτού του χρήστη είναι επισκέπτης, ο οποίος είναι χρήστης για συνδέσεις χωρίς λογαριασμούς βάσης δεδομένων. Ο επισκέπτης χρήστης δεν συσχετίζεται με καμία σύνδεση. Μπορείτε να εκχωρήσετε δικαιώματα στον επισκέπτη χρήστη όπως και σε κάθε άλλο χρήστη στη βάση δεδομένων. Αυτό σας επιτρέπει να διαμορφώσετε δικαιώματα για συνδέσεις που δεν έχουν συγκεκριμένους χρήστες σε μια συγκεκριμένη βάση δεδομένων.

Τα μέλη του ρόλου του σταθερού διακομιστή sysadmin έχουν απεριόριστα δικαιώματα σε οποιαδήποτε βάση δεδομένων στον διακομιστή. Επομένως, τα μέλη αυτού του ρόλου μπορούν να έχουν πρόσβαση στη βάση δεδομένων ακόμα κι αν η βάση δεδομένων δεν έχει χρήστες.

Ένας από τους γρηγορότερους και ευκολότερους τρόπους για να παραχωρήσετε σε έναν χρήστη δικαιώματα για την εκτέλεση λειτουργιών σε μια βάση δεδομένων είναι η ανάθεση του χρήστη σε ένα μέλος σταθερών ρόλων βάσης δεδομένων. Υπάρχουν εννέα σταθεροί ρόλοι βάσης δεδομένων στον SQL Server και είναι οι ίδιοι για τον SQL Server 7.0 και τον SQL Server 2000. Τα ονόματα και οι σύντομες περιγραφές των σταθερών ρόλων βάσης δεδομένων εμφανίζονται στον παρακάτω πίνακα. Μπορείτε να εκτελέσετε την αποθηκευμένη διαδικασία του συστήματος sp_helpdbfixedrole για να αποκτήσετε μια λίστα με σταθερά ονόματα ρόλων βάσης δεδομένων. Η κλήση της αποθηκευμένης διαδικασίας του συστήματος sp_dbfixedrolepermission θα επιστρέψει ένα σύνολο πίνακα με συγκεκριμένα δικαιώματα για κάθε σταθερό ρόλο βάσης δεδομένων.

Διορθώθηκε το όνομα ρόλου βάσης δεδομένων

Περιγραφή του ρόλου της σταθερής βάσης δεδομένων

db_owner Απεριόριστα δικαιώματα στη βάση δεδομένων.
db_accessadmin Για να προσθέσετε και να αφαιρέσετε χρήστες βάσης δεδομένων.
db_datareader Για ανάγνωση από πίνακες και προβολές βάσης δεδομένων.
db_datawriter Για προσθήκη (εισαγωγή), επεξεργασία (ενημέρωση) και διαγραφή (διαγραφή) εγγραφών πινάκων και προβολών βάσης δεδομένων.
db_ddladmin Για να εκτελέσετε οποιαδήποτε δήλωση SQL Data Definition Language (ή να εκτελέσετε αυτές τις λειτουργίες χρησιμοποιώντας ένα GUI) σε μια βάση δεδομένων.
db_securityadmin Για τη διαχείριση της ιδιότητας μέλους ρόλου χρήστη, της άδειας πρόσβασης αντικειμένου και της ιδιοκτησίας της βάσης δεδομένων.
db_backupoperator Για να δημιουργήσετε αντίγραφα ασφαλείας (backing) και να επαναφέρετε από αυτά (restoring) βάσεις δεδομένων.
db_denydatareader Για να αρνηθείτε (ή να ανακαλέσετε) την άδεια να κάνετε οποιοδήποτε SELECT από ένα συγκεκριμένο αντικείμενο βάσης δεδομένων.
db_denydatawriter Για άρνηση (ή ανάκληση) άδειας σε οποιαδήποτε δήλωση INSERT, UPDATE ή DELETE που εκτελείται σε ένα συγκεκριμένο αντικείμενο βάσης δεδομένων.

Η ανάθεση χρηστών σε σταθερούς ρόλους βάσης δεδομένων επηρεάζει τις λειτουργίες που μπορούν να εκτελέσουν οι χρήστες. Είναι δυνατό να αλλάξετε τον αντίκτυπο της συμμετοχής ενός χρήστη σε έναν σταθερό ρόλο βάσης δεδομένων εκχωρώντας δικαιώματα στον χρήστη σε συγκεκριμένα αντικείμενα βάσης δεδομένων. Για απλότητα, αυτή η ενότητα δεν καλύπτει αυτό, αλλά η επόμενη ενότητα καλύπτει την εκχώρηση δικαιωμάτων σε συγκεκριμένα αντικείμενα και τους ρόλους βάσης δεδομένων που ορίζονται από το χρήστη. Το παράθυρο βάσης δεδομένων δεν εμφανίζει πίνακες εκτός εάν ο χρήστης για τη σύνδεση του έργου ADP είναι μέλος του ρόλου σταθερής βάσης δεδομένων db_datareader. Ένας χρήστης χωρίς συμμετοχή στον ρόλο db_backupoperator δεν μπορεί να εκτελέσει τις εντολές του μενού Backup ή Restore (μενού Tools, υπομενού Database Utilities). Κατά συνέπεια, οι χρήστες που δεν είναι μέλη του ρόλου της σταθερής βάσης δεδομένων db_ddladmin δεν μπορούν να δημιουργήσουν πίνακες ή άλλα αντικείμενα στη βάση δεδομένων. Χρησιμοποιώντας το παράθυρο βάσης δεδομένων, ένας χρήστης χωρίς συμμετοχή στο ρόλο db_ddladmin μπορεί να επεξεργαστεί αντικείμενα διακομιστή, όπως πίνακες και προβολές, ή να δημιουργήσει νέα, τα επεξεργασμένα και τα δημιουργημένα αντικείμενα δεν θα αποθηκευτούν στη βάση δεδομένων.

Τα μέλη του ρόλου σταθερής βάσης δεδομένων db_owner μπορούν να εκτελέσουν όλες τις λειτουργίες που παρέχονται από τη συμμετοχή σε οποιονδήποτε άλλο ρόλο βάσης δεδομένων. Επειδή οι συνδέσεις σε αυτόν τον ρόλο μπορούν να δημιουργήσουν βάσεις δεδομένων χωρίς συμμετοχή στο ρόλο του σταθερού διακομιστή sysadmin, τα μέλη της ομάδας db_owner δεν απαιτείται να είναι χρήστες dbo. Στη συνέχεια, τα μέλη του ρόλου του σταθερού διακομιστή sysadmin μπορούν να εκτελέσουν οποιεσδήποτε λειτουργίες στη βάση δεδομένων μπορεί να εκτελέσει ένα μέλος της ομάδας db_owner. Επιπλέον, οι πίνακες και οι προβολές που δημιουργούνται από τον χρήστη dbo έχουν βελτιωμένη ορατότητα σε σύγκριση με πίνακες και προβολές που δημιουργούνται από μέλη του ρόλου db_owner που δεν είναι μέλη του ρόλου του σταθερού διακομιστή sysadmin.

Καθορισμένοι από τον χρήστη ρόλοι βάσης δεδομένων και εκχωρήσεις αδειών

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

Τα έξι ονόματα δικαιωμάτων αντικειμένων και οι περιγραφές τους εμφανίζονται στον παρακάτω πίνακα. Μπορείτε να εκχωρήσετε αυτά τα δικαιώματα σε συγκεκριμένα αντικείμενα βάσης δεδομένων. Εάν θέλετε να εκχωρήσετε δικαιώματα σε όλα τα αντικείμενα, θα πρέπει να εκχωρήσετε δικαιώματα σε κάθε αντικείμενο βάσης δεδομένων. Ωστόσο, είναι προτιμότερο να χρησιμοποιείτε σταθερούς ρόλους βάσης δεδομένων εάν χρειάζεται να εκχωρήσετε άδεια σε όλα τα αντικείμενα βάσης δεδομένων. Για παράδειγμα, εάν θέλετε να δώσετε άδεια στο SELECT σε όλους τους πίνακες και τις προβολές (συμπεριλαμβανομένων εκείνων που δεν έχουν δημιουργηθεί ακόμη), είναι πιο εύκολο να εκχωρήσετε στον χρήστη τον ρόλο σταθερής βάσης δεδομένων db_datareader. Εάν ο στόχος σας είναι να περιορίσετε την άδεια SELECT μόνο σε μία ή δύο υπάρχουσες προβολές, τότε δημιουργήστε έναν ρόλο βάσης δεδομένων που ορίζεται από το χρήστη, εκχωρήστε άδεια SELECT σε αυτές τις προβολές και συμπεριλάβετε σε αυτόν τον ρόλο τους χρήστες στους οποίους πρέπει να δοθούν ειδικά δικαιώματα.

Όνομα άδειας

Περιγραφή άδειας

ΕΠΙΛΕΓΩ Προβολή εγγραφών σε πίνακα ή προβολή.
ΕΙΣΑΓΕΤΕ Προσθήκη νέων εγγραφών σε πίνακα ή προβολή.
ΕΚΣΥΓΧΡΟΝΙΖΩ Αλλαγή των περιεχομένων των εγγραφών πίνακα ή προβολής.
ΔΙΑΓΡΑΦΩ Διαγραφή εγγραφών από πίνακες ή προβολές.
ΒΙΒΛΙΟΓΡΑΦΙΚΕΣ ΑΝΑΦΟΡΕΣ Σας επιτρέπει να δημιουργείτε ξένα κλειδιά για ένα πρωτεύον κλειδί ή ένα μοναδικό ευρετήριο σε έναν πίνακα ή μια συνάρτηση που επιστρέφει σειρά που ορίζεται από το χρήστη.
ΕΚΤΕΛΕΣΗ Εκτελέστε μια αποθηκευμένη διαδικασία ή μια λειτουργία που ορίζεται από το χρήστη.

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

Επειδή είναι δυνατό για έναν χρήστη να συμπεριληφθεί σε πολλούς σταθερούς και καθορισμένους από το χρήστη ρόλους βάσης δεδομένων, είναι δυνατές διενέξεις δικαιωμάτων μεταξύ ρόλων. Μπορείτε να χρησιμοποιήσετε αυτές τις διενέξεις για να βελτιώσετε το σύστημα ασφαλείας σας. Για παράδειγμα, ένας χρήστης περιλαμβάνεται στον ρόλο σταθερής βάσης δεδομένων db_datareader, που του δίνει το δικαίωμα να εκτελεί ερωτήματα SELECT σε όλους τους πίνακες και τις προβολές της βάσης δεδομένων. Ωστόσο, μπορείτε να αρνηθείτε την ανάγνωση από τον πίνακα πωλήσεων σε έναν χρήστη που έχει άδεια ανάγνωσης δεδομένων από όλους τους πίνακες, προκειμένου να του αποκρύψει ευαίσθητες πληροφορίες στον πίνακα πωλήσεων. Αντίστοιχα, τα μέλη του ρόλου σταθερής βάσης δεδομένων db_denydatareader δεν μπορούν να εκδώσουν ερωτήματα SELECT σε οποιονδήποτε πίνακα στη βάση δεδομένων, ακόμα κι αν οι χρήστες περιλαμβάνονται σε έναν ρόλο βάσης δεδομένων που ορίζεται από το χρήστη που παρέχει άδεια ανάγνωσης από ορισμένους συγκεκριμένους πίνακες. Η άδεια που απορρίφθηκε πάντα υπερισχύει της χορηγηθείσας άδειας.

Ο SQL Server διευκολύνει τη διαχείριση της ασφάλειας εκχωρώντας δικαιώματα σε ομάδες χρηστών μέσω της συμμετοχής τους σε ρόλους βάσης δεδομένων που καθορίζονται και σταθεροποιούνται από τον χρήστη. Να θυμάστε ότι κάθε χρήστης αντιστοιχεί συνήθως σε μια συγκεκριμένη σύνδεση. Με τη σειρά τους, οι συνδέσεις μπορούν να αντιστοιχούν σε συγκεκριμένους χρήστες των Windows. Ωστόσο, μία σύνδεση μπορεί επίσης να είναι μέλος της ομάδας χρηστών των Windows. Επομένως, εάν έχετε ήδη μια ομάδα Windows για την οποία θέλετε να ορίσετε τις ίδιες ρυθμίσεις ασφαλείας, τότε δημιουργήστε μια σύνδεση για την ομάδα των Windows. Στη συνέχεια, δημιουργήστε έναν χρήστη για αυτήν τη σύνδεση. Τυχόν δικαιώματα που ορίζετε για αυτόν τον χρήστη ισχύουν για όλα τα μέλη της αντίστοιχης ομάδας των Windows.

Προγραμματισμός ασφαλείας SQL Server

Το SQL-DMO είναι μια εφαρμογή κοντέινερ (Automation application), σκοπός της οποίας είναι η διαχείριση του SQL Server. Επειδή το SQL-DMO είναι ένα API για τον SQL Server Enterprise Manager, μπορείτε να προγραμματίσετε τα πάντα στο SQL-DMO που μπορούν να σας παρέχουν τα εργαλεία γραφικών του Enterprise Manager, συμπεριλαμβανομένης της διαχείρισης όλων των πτυχών της ασφάλειας του SQL Server. Αυτή η πτυχή του SQL-DMO είναι ιδιαίτερα χρήσιμη για έργα που χρησιμοποιούν MSDE και MSDE 2000, επειδή δεν περιλαμβάνουν Enterprise Manager. Επιπλέον, οι προγραμματιστές της Access 2002 θα πρέπει να μάθουν ορισμένες λύσεις λογισμικού για τη διαχείριση της ασφάλειας, καθώς η Access 2002 δεν έχει τη δυνατότητα διαχείρισης της ασφάλειας μέσω μενού (όπως έκανε η Access 2000).

Στην Access, μπορείτε να προγραμματίσετε χρησιμοποιώντας SQL-DMO όπως ακριβώς χρησιμοποιείτε οποιοδήποτε άλλο αντικείμενο COM. Το έργο VBA πρέπει να χρησιμοποιεί τη βιβλιοθήκη SQL-DMO. Microsoft SQLDMO Object Library είναι το όνομα αυτής της βιβλιοθήκης αντικειμένων. Προσθέστε έναν σύνδεσμο στη βιβλιοθήκη χρησιμοποιώντας την εντολή Αναφορές (μενού Εργαλεία). Το αρχείο DLL της βιβλιοθήκης περιλαμβάνεται στα MSDE και MSDE 2000. Άλλες εκδόσεις του SQL Server περιλαμβάνουν το DLL και ένα αρχείο Βοήθειας που μπορείτε να ανοίξετε απευθείας από το παράθυρο του Visual Basic Editor (VBE). Όσοι χρησιμοποιούν Microsoft Office XP Developer Edition μπορούν να εγκαταστήσουν μια έκδοση του SQL Server που περιλαμβάνει ένα αρχείο βοήθειας για το SQL-DMO.

Το σχήμα δείχνει ένα τμήμα του ιεραρχικού μοντέλου SQL-DMO με αντικείμενα για παραδείγματα κώδικα που βρίσκονται περαιτέρω στο κείμενο. Παρατηρήστε ότι το αντικείμενο SQLServer βρίσκεται στην κορυφή της ιεραρχίας. Πολλές εφαρμογές μπορούν να συνδεθούν στον SQL Server μέσω του αντικειμένου SQLServer. Οι απόγονοι του αντικειμένου SQLServer είναι συλλογές αντικειμένων για συνδέσεις και βάσεις δεδομένων, καθώς και μεμονωμένα αντικείμενα όπως το IntegratedSecurity, τα οποία παρέχουν τη δυνατότητα διαχείρισης της ασφάλειας του SQL Server. Το ακόλουθο παράδειγμα χρησιμοποιεί την ιδιότητα SecurityMode του αντικειμένου IntegratedSecurity για να δείξει πώς να ορίσετε τη λειτουργία ελέγχου ταυτότητας του SQL Server. Τα μέλη της συλλογής βάσεων δεδομένων είναι μεμονωμένες βάσεις δεδομένων, καθεμία από τις οποίες έχει τις δικές της συλλογές και αντικείμενα. Μία από αυτές τις συλλογές είναι η συλλογή Χρήστες. Μια άλλη συλλογή χρησιμοποιείται για σταθερούς και καθορισμένους από το χρήστη ρόλους βάσης δεδομένων (DatabaseRoles). Η συμμετοχή μεμονωμένων χρηστών στη συλλογή DatabaseRoles καθορίζει την ικανότητα των χρηστών να διαβάζουν και να τροποποιούν αντικείμενα στις συλλογές Πίνακες και Προβολές.

Σχέδιο. Ένα τμήμα του μοντέλου αντικειμένου SQL-DMO που σχετίζεται με την ασφάλεια του SQL Server

Πριν μιλήσουμε για SQL-DMO, είναι σημαντικό να γνωρίζουμε ότι το DLL για SQL-DMO είναι διαφορετικό για τον SQL Server 7 και τον SQL Server 2000. Οι δύο εκδόσεις του SQL-DMO διαφέρουν σε τουλάχιστον δύο πτυχές. Πρώτον, η έκδοση για τον SQL Server 2000 περιλαμβάνει νέα αντικείμενα που εισάγονται στον SQL Server 2000, καθώς και βελτιώσεις σε παραδοσιακά. Το SQL-DMO για SQL Server 2000 περιλαμβάνει επίσης παραδοσιακά αντικείμενα διαχείρισης SQL Server 7.0. Τα ονόματα αντικειμένων για το 2000 συνήθως τελειώνουν με 2 (για παράδειγμα, SQLServer2 για νέα αντικείμενα, αντί για SQLServer για παραδοσιακά). Δεύτερον, δεν είναι δυνατή η διαχείριση προγραμμάτων που χρησιμοποιούν SQL-DMO για SQL Server 2000 από τον SQL Server 7.0 (ακόμη και αν τα προγράμματα χρησιμοποιούν παραδοσιακά ονόματα αντικειμένων SQL-DMO). Ωστόσο, μπορείτε να διαχειριστείτε τον SQL Server 2000 χρησιμοποιώντας τη βιβλιοθήκη SQL-DMO για τον SQL Server 7.0. Αυτός ο περιορισμός είναι αποτέλεσμα αλλαγών στις μορφές αρχείων της βιβλιοθήκης κατά τη μετεγκατάσταση σε μια νέα έκδοση. Η σύνταξη του σεναρίου SQL-DMO δεν έχει αλλάξει.

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

Σύνδεση σε διακομιστή SQL

Όπως μπορείτε να συνδεθείτε στον SQL Server με δύο τρόπους χρησιμοποιώντας το παράθυρο διαλόγου Ιδιότητες σύνδεσης σε ένα έργο ADP, μπορείτε να συνδεθείτε στον SQL Server με δύο τρόπους μέσω του SQL-DMO. Μία μέθοδος αντιστοιχεί στον έλεγχο ταυτότητας με χρήση SQL Server. Χρησιμοποιώντας αυτήν τη μέθοδο, ο κώδικάς σας πρέπει να στείλει το όνομα διακομιστή, τη σύνδεση και τον κωδικό πρόσβασης μέσω SQL-DMO στον διακομιστή. Μπορείτε να χρησιμοποιήσετε την παράμετρο ονόματος διακομιστή για να καθορίσετε διαφορετικές παρουσίες του SQL Server στον τοπικό σας σταθμό εργασίας ή σε άλλο σταθμό εργασίας στο δίκτυο. Το SQL-DMO σας επιτρέπει επίσης να συνδεθείτε καθορίζοντας μόνο το όνομα διακομιστή. Σε αυτήν την περίπτωση, το SQL-DMO στέλνει το αναγνωριστικό του εξουσιοδοτημένου χρήστη στα Windows στην παρουσία του διακομιστή SQL. Για να χρησιμοποιήσετε αυτήν τη μέθοδο, πρέπει να ορίσετε την ιδιότητα LoginSecure του διακομιστή σε True.

Η ακόλουθη λίστα εμφανίζει ένα ζεύγος διαδικασιών που επιδεικνύουν τη σύνταξη για τη σύνδεση σε μια παρουσία του SQL Server χρησιμοποιώντας μια σύνδεση SQL Server. Η πρώτη διαδικασία ορίζει τρεις παραμέτρους συμβολοσειράς για το όνομα διακομιστή (srvname), τη σύνδεση (suid) και τον κωδικό πρόσβασης (pwd). Στη συνέχεια, τα στέλνει στη δεύτερη διαδικασία, η οποία ξεκινά με την προετοιμασία του αντικειμένου SQLServer. Αυτό το αντικείμενο αντιπροσωπεύει μια παρουσία διακομιστή. Στη συνέχεια, η δεύτερη διαδικασία καλεί τη μέθοδο Connect του αντικειμένου SQLServer. Αυτή η μέθοδος λαμβάνει τρεις παραμέτρους ως είσοδο. Παρουσιάζεται η σύνταξη για τη μετάδοση μεταβλητών ονόματος διακομιστή, σύνδεσης και κωδικού πρόσβασης.

Sub CallSQLDMOSQLServerLogin()
Dim srvname As String
Dim suid As String
Dim pwd As String

"Καθορισμός ορισμών για σύνδεση διακομιστή SQL
suid = "your_login_name"
pwd = "your_password"

"Κλήση της διαδικασίας σύνδεσης χρησιμοποιώντας τη μέθοδο σύνδεσης διακομιστή SQL
SQLDMOSQLServerLogin srvname, suid, pwd

Sub SQLDMOSQLServerLogin(srvname As String, _

"Παράδειγμα διακομιστή

"Κλήση της μεθόδου Connect για σύνδεση χρησιμοποιώντας τη μέθοδο σύνδεσης διακομιστή SQL

"Εκκαθάριση μεταβλητών
srv1.Αποσύνδεση
Ορισμός srv1 = Τίποτα

Το ακόλουθο παράδειγμα κώδικα δείχνει τη σύνταξη για τη σύνδεση σε μια παρουσία του SQL Server χρησιμοποιώντας τη σύνδεση των Windows.
με βάση το αναγνωριστικό χρήστη των Windows. Σε αυτήν τη δεύτερη μέθοδο σύνδεσης με τον διακομιστή, δεν χρειάζεται να καθορίσετε ούτε σύνδεση ούτε κωδικό πρόσβασης.
Το SQL-DMO αποδέχεται αυτόματα το αναγνωριστικό χρήστη των Windows και συνδέει τον χρήστη με το διακομιστή με τη σύνδεση
για αναγνωριστικό χρήστη. Ορίστε την ιδιότητα LoginSecure σε True πριν καλέσετε τη μέθοδο Connect. Η προεπιλεγμένη τιμή αυτής της ιδιότητας είναι False.

Sub CallSQLDMOWindowsLogin()
Dim srvname As String
"Ορίστε το όρισμα για τη σύνδεση των Windows
srvname = "YOUR_SERVER_NAME"

SQLDMOWindowsLogin srvname

Sub SQLDMOWindowsLogin(srvname As String)
Dim srv1 Ως SQLDMO.SQLServer

"Παράδειγμα διακομιστή
Ορισμός srv1 = Νέος SQLDMO.SQLServer

"Ρυθμίστε την ιδιότητα LoginSecure πριν καλέσετε
"Μέθοδος σύνδεσης με το όνομα διακομιστή ως όρισμα
srv1.LoginSecure = True
srv1.Σύνδεση srvname

"Εκκαθάριση μεταβλητών
srv1.Αποσύνδεση
Ορισμός srv1 = Τίποτα

Αλλαγή της λειτουργίας ελέγχου ταυτότητας

Ένα από τα σημαντικότερα οφέλη που παρέχει το SQL-DMO στους προγραμματιστές MSDE και MSDE 2000 είναι ότι παρέχει μια δυνατότητα που διαφορετικά δεν θα ήταν διαθέσιμη σε αυτούς. Αυτό συμβαίνει επειδή το Enterprise Manager δεν περιλαμβάνεται στο πακέτο εγκατάστασης MSDE ή MSDE 2000. Για παράδειγμα, το στοιχείο πελάτη SQL Server Enterprise Manager επιτρέπει στους διαχειριστές να αλλάζουν γραφικά τη λειτουργία ελέγχου ταυτότητας διακομιστή: έλεγχος ταυτότητας των Windows ή μικτή λειτουργία. Το έργο ADP δεν παρέχει αυτήν την επιλογή. Ωστόσο, οι ακόλουθες δύο διαδικασίες θα σας επιτρέψουν να αλλάξετε τη λειτουργία ελέγχου ταυτότητας του διακομιστή χωρίς καν να μπορείτε να χρησιμοποιήσετε το Enterprise Manager.

Η πρώτη διαδικασία καθορίζει την τιμή μιας παραμέτρου και τη στέλνει στη δεύτερη διαδικασία. Αυτή η παράμετρος καθορίζει μία από τις δύο λειτουργίες ελέγχου ταυτότητας. Τα σχόλια της διαδικασίας εμφανίζουν τα ονόματα δύο προκαθορισμένων σταθερών σύμφωνα με τη λειτουργία ελέγχου ταυτότητας. Ο έλεγχος ταυτότητας μεικτής λειτουργίας είναι η προεπιλεγμένη λειτουργία. Το SQL-DMO σάς επιτρέπει να ορίσετε μια λειτουργία ελέγχου ταυτότητας που δεν είναι διαθέσιμη ακόμη και στο Enterprise Manager. Με άλλα λόγια, μπορείτε να χρησιμοποιήσετε το SQL-DMO για να πείτε στον διακομιστή να αποδέχεται μόνο τις συνδέσεις του SQL Server.

Η δεύτερη διαδικασία συνδέεται με το διακομιστή χρησιμοποιώντας ένα αναγνωριστικό χρήστη των Windows. Στη συνέχεια, ορίζει την ιδιότητα SecurityMode του αντικειμένου IntegratedSecurity για τον διακομιστή στην τιμή της παραμέτρου που του μεταβιβάστηκε από την πρώτη διαδικασία. Εάν η τιμή αυτής της ιδιότητας αλλάξει τη λειτουργία ελέγχου ταυτότητας, η λειτουργία δεν θα αλλάξει μέχρι να σταματήσετε και να επανεκκινήσετε τον διακομιστή. Ωστόσο, η κλήση της μεθόδου Stop του αντικειμένου διακομιστή δεν μπορεί να σταματήσει αμέσως τον διακομιστή. Πρέπει να περιμένετε μέχρι να σταματήσει ο διακομιστής. Χρησιμοποιώντας την ιδιότητα Κατάσταση του αντικειμένου διακομιστή, το πρόγραμμά σας μπορεί να παρακολουθεί για ένα μήνυμα ότι ο διακομιστής έχει σταματήσει. Η διαδικασία χρησιμοποιεί έναν βρόχο, περιμένοντας να αλλάξει η τιμή Status σε SQLDMOSvc_Stopped. Στη συνέχεια, η διαδικασία εκτελεί τη μέθοδο Start του αντικειμένου SQLServer. Η κλήση αυτής της μεθόδου θα ορίσει μια νέα λειτουργία ελέγχου ταυτότητας για το διακομιστή.

Sub CallChangeServerAuthenticationMode()
Dim constAuth As Byte

"Ρύθμιση constAuth σε:
" SQLDMOSecurity_Integrated για αλλαγή σε λειτουργία
"Έλεγχος ταυτότητας των Windows
" SQLDMOSecurity_Mixed για αλλαγή σε μικτή λειτουργία ελέγχου ταυτότητας

"Ορίστε την προεπιλεγμένη τιμή για το constAuth
constAuth = SQLDMOSecurity_Mixed

"καλέστε μια διαδικασία για να αλλάξετε τη λειτουργία ελέγχου ταυτότητας
ChangeServerAuthenticationMode constAuth

Sub ChangeSeverAuthenticationMode(constAuth As Byte)
Dim srv1 Ως SQLDMO.SQLServer

"Ορίστε το όνομα διακομιστή.
"προεπιλογή YOUR_SERVER_NAME
srvname = "YOUR_SERVER_NAME"

"μια παρουσία του αντικειμένου SQLServer για τη σύνδεση
"χρησιμοποιούμε έλεγχο ταυτότητας των Windows
Ορισμός srv1 = Νέος SQLDMO.SQLServer
srv1.LoginSecure = True
srv1.Σύνδεση srvname

"Ορίστε την ιδιότητα SecurityMode για Windows
"ή μεικτό έλεγχο ταυτότητας
srv1.IntegratedSecurity.SecurityMode = constAuth
srv1.Αποσύνδεση

«Καλούμε την εντολή να σταματήσει και να περιμένει
«μέχρι να σταματήσει
srv1.Stop
Κάντε μέχρι srv1.Status = SQLDMOSvc_Stopped
Βρόχος

"Κάνουμε επανεκκίνηση του διακομιστή με έναν μικτό τύπο ελέγχου ταυτότητας
srv1.Start True, srvname

"Καθάρισε
srv1.Αποσύνδεση
Ορισμός srv1 = Τίποτα

Έναρξη του έργου ADP

Μερικές φορές είναι απαραίτητο να ανοίξετε μέσω προγραμματισμού ένα έργο ADP από την εφαρμογή SQL-DMO. Η τεχνολογία ανοίγματος έργου ADP δεν απαιτεί τη χρήση SQL-DMO, ωστόσο, η εφαρμογή SQL-DMO μπορεί να εκμεταλλευτεί αυτή τη δυνατότητα. Το τελευταίο παράδειγμα κώδικα σε αυτό το άρθρο (ακριβώς πριν από την τελευταία ενότητα) δείχνει πώς να δημιουργήσετε έναν νέο χρήστη. Η ανάγκη ανοίγματος ενός έργου ADP βασίζεται στη δημιουργία μιας συμβολοσειράς σύνδεσης κατά την εγκατάσταση μιας εφαρμογής που βασίζεται σε ένα έργο ADP.

Το ακόλουθο παράδειγμα κώδικα δείχνει πώς να ανοίξετε ένα υπάρχον έργο ADP. Στον παρακάτω κώδικα, το όνομα του έργου ADP είναι msdn_test_security.adp. Το δείγμα κώδικα σάς επιτρέπει να ανοίξετε ένα έργο ADP σε λειτουργία ελέγχου ταυτότητας των Windows ή σε λειτουργία ελέγχου ταυτότητας SQL Server. Και πάλι χρησιμοποιούνται δύο διαδικασίες. Η λίστα των παραμέτρων στην πρώτη διαδικασία - CallOpenADPWindowsOrSQLServer - είναι σχετικά μεγάλη, γεγονός που οφείλεται στην ανάγκη καθορισμού του ονόματος διακομιστή, της βάσης δεδομένων, της διαδρομής και του ονόματος του αρχείου έργου ADP, της σύνδεσης και του κωδικού πρόσβασης του SQL Server, καθώς και μιας λογικής μεταβλητής . Η μεταβλητή Boolean καθορίζει εάν το έργο ανοίγει με έλεγχο ταυτότητας Windows ή SQL Server. Κατά τον καθορισμό του ελέγχου ταυτότητας των Windows, δεν υπάρχει ανάγκη για σύνδεση και κωδικό πρόσβασης, επειδή το έργο ADP αναφέρεται αυτόματα στο αναγνωριστικό χρήστη των Windows. Η δεύτερη διαδικασία χρησιμοποιεί αυτές τις παραμέτρους για να ανοίξει ένα έργο ADP.

Πριν περιγράψουμε τη δεύτερη διαδικασία, θα ήταν χρήσιμο να εξηγήσουμε ορισμένα χαρακτηριστικά του κώδικα. Πρώτον, η διαδικασία που ανοίγει το έργο ADP εκτελείται ήδη στη συνεδρία Access. Επομένως, πρέπει να δημιουργήσουμε μια νέα παρουσία της Access για το έργο που σκοπεύουμε να ανοίξουμε. Για τη δημιουργία μιας συνεδρίας Access, χρησιμοποιείται μια κλάση OLE.

Δεύτερον, οποιοδήποτε υπάρχον έργο ADP ανοίγει πάντα με τις παραμέτρους σύνδεσης διακομιστή αποθηκευμένες κατά το προηγούμενο άνοιγμα. Επομένως, το πρόγραμμα πρέπει να ανοίξει το έργο χρησιμοποιώντας τις παλιές παραμέτρους σύνδεσης και στη συνέχεια να αλλάξει αυτές τις παραμέτρους. Οι νέες ρυθμίσεις σύνδεσης μπορούν να αντιστοιχιστούν μόνο σε ανοιχτό έργο. Μετά το κλείσιμο του έργου, οι νέες παράμετροι σύνδεσης αποθηκεύονται μέχρι ο χρήστης να τις αλλάξει στο παράθυρο διαλόγου Παράμετροι σύνδεσης. (Ωστόσο, το μοντέλο αντικειμένου του Office σάς επιτρέπει να αποκρύψετε και να απενεργοποιήσετε την εντολή μενού Σύνδεση στο μενού Αρχείο.)

Τρίτον, μια περίοδος σύνδεσης με ένα ανοιχτό έργο ADP θα διαρκέσει όσο ζει η μεταβλητή που αντιπροσωπεύει αυτή τη συνεδρία. Χρησιμοποιήστε τη Δημόσια περιγραφή στον ορισμό της περιόδου λειτουργίας για το έργο που ανοίγει. Η μεταβλητή δηλώνεται στην ενότητα περιγραφή της ενότητας. Αυτό θα επιτρέψει στη συνεδρία να ζει όσο ζει το έργο που την ανοίγει, δηλαδή ο κώδικάς μας. Η μεταβλητή συνεδρίας Access στο παράδειγμα ονομάζεται appAccess και η ακόλουθη δήλωση βρίσκεται στην ενότητα ορισμών τυπικής λειτουργικής μονάδας. Εφόσον η δήλωση πρέπει να βρίσκεται στην κορυφή της ενότητας, δεν θα τη δείτε στον κωδικό ούτε για την πρώτη ούτε για τη δεύτερη διαδικασία.

Δημόσια εφαρμογή Πρόσβαση ως Access.Application

Η δεύτερη διαδικασία, OpenADPWindowsOrSQLServer, ξεκινά με ένα μήνυμα που ρωτά εάν θα αφήσετε ανοιχτή τη συνεδρία μετά την ολοκλήρωση της διαδικασίας. Εάν ο χρήστης απαντήσει "όχι", η διαδικασία θα ορίσει τις παραμέτρους σύνδεσης για το έργο και στη συνέχεια θα κλείσει τη συνεδρία χωρίς να υπάρχει ευκαιρία να δει τις αλλαγές. Στη συνέχεια, το έργο ξεκινά μια νέα περίοδο λειτουργίας Access χρησιμοποιώντας τη συνάρτηση CreateObject. Τα ορίσματα αυτής της συνάρτησης ποικίλλουν ανάλογα με την έκδοση της Access που χρησιμοποιείτε (ο κώδικας περιγράφει τις ιδιαιτερότητες της χρήσης της Access 2000 ή της Access 2002). Μετά τη δημιουργία μιας περιόδου λειτουργίας για ένα έργο, η διαδικασία καλεί τη μέθοδο OpenAccessProject για να προσθέσει το έργο ADP στη συνεδρία. Το όρισμα αυτής της μεθόδου είναι μια διαδρομή μαζί με το όνομα του αρχείου έργου. Η επέκταση .adp είναι προαιρετική. Μετά το άνοιγμα του έργου, η διαδικασία παρακάμπτει τις ρυθμίσεις σύνδεσής του χρησιμοποιώντας τη μέθοδο OpenConnection του αντικειμένου CurrentProject. Η διαδικασία επαναπροσδιορίζει τις συνδέσεις χρησιμοποιώντας δύο διαφορετικές συμβολοσειρές σύνδεσης ανάλογα με την τιμή της μεταβλητής bolWindowsLogin. Αυτή η μεταβλητή Boolean ορίζεται από την πρώτη διαδικασία για να υποδείξει ποιος τύπος εξουσιοδότησης πρέπει να οριστεί για το έργο. Το τελευταίο βήμα της διαδικασίας κλείνει τη συνεδρία εάν ο χρήστης απάντησε ναι στην ερώτηση στο πλαίσιο μηνύματος πριν ανοίξει τη συνεδρία.

Sub CallOpenADPWindowsOrSQLServer()
Dim srvname As String
Dim dbname As String
Αχνό μονοπάτι As String
Dim prname As String
Dim suid As String
Dim pwd As String

"Ρύθμιση επιλογών για το άνοιγμα ενός έργου ADP
srvname = "YOUR_SERVER_NAME"
dbname = "Your_db_name"

suid = "your_login_name"
pwd = "your_password"


"για τον τρέχοντα χρήστη αντί για τη σύνδεση και τον κωδικό πρόσβασης διακομιστή SQL
bolWindowsLogin = Λάθος

"Κλήση της διαδικασίας για το άνοιγμα του έργου ADP prname
"με έλεγχο ταυτότητας Windows ή SQL Server

End Sub
Sub OpenADPWindowsOrSQLServer(srvname As String, dbname As String, _
prpath As String, prname As String, _
suid As String, pwd As String, bolWindowsΕίσοδος ως Boolean)

Dim bolΆνοιγμα ως Boolean
Dim strPrFilePath ως συμβολοσειρά
Dim sConnectionString As String

«Να αφήσει ανοιχτό το έργο αφού ολοκληρωθεί η διαδικασία;
Αν MsgBox("Θέλετε να αφήσετε το έργο ανοιχτό;", vbYesNo) = vbYes Τότε
bolLeaveOpen = Σωστό
Τέλος εαν

"Ορισμός ενός αντικειμένου περιόδου λειτουργίας Access (χρησιμοποιήστε .9 για την Access 2000
"i.10 for Access 2002)
Ορισμός appAccess = CreateObject("Access.Application.9")

"Ανοίξτε το έργο με τη σύνδεση και τον κωδικό πρόσβασης της τελευταίας εκκίνησης
"και δείξτε το
strPrFilePath = prpath & prname
appAccess.OpenAccessProject strPrFilePath
appAccess.Visible = Αληθινό

"Ρύθμιση νέας σύνδεσης για έλεγχο ταυτότητας Windows ή SQL Server.
"και να χειριστείτε το σφάλμα προσπάθειας σύνδεσης με λάθος τρόπο
Εάν bolWindowsΕίσοδος Τότε
"PROVIDER=SQLOLEDB.1;INTEGRATED SECURITY=SSPI;" & _
"PERSIST SECURITY INFO=FALSE;INITIAL CATALOG=" & _
Αλλού
sConnectionString = "PROVIDER=SQLOLEDB.1;INITIAL CATALOG=" & _
dbname & ";ΠΗΓΗ ΔΕΔΟΜΕΝΩΝ=" & srvname
appAccess.CurrentProject.OpenConnection_
sConnectionString, _
suid, pwd
Τέλος εαν

«Κλείνουμε τη συνεδρία ή σταματάμε
"για να προβάλετε το παράθυρο διαλόγου Ρυθμίσεις σύνδεσης
Αν bolLeaveOpen = Λάθος Τότε
appAccess.CloseCurrentDatabase
Ορισμός appAccess = Τίποτα
Τέλος εαν

Προσθήκη και αφαίρεση στοιχείων σύνδεσης

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

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

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

Η δεύτερη διαδικασία, μετά τη σύνδεση στον διακομιστή, αρχικοποιεί το αντικείμενο σύνδεσης. Αυτό το αντικείμενο είναι μέλος της συλλογής Logins που φαίνεται στο σχήμα. Στη συνέχεια, η διαδικασία ορίζει τρεις παραμέτρους για τη σύνδεση: το όνομά της (όνομα_σύνδεσης), την προεπιλεγμένη βάση δεδομένων (defaulf_db_name) και τον κωδικό πρόσβασης (κωδικός πρόσβασης). Οι απλές πράξεις ανάθεσης λειτουργούν με τα δύο πρώτα ορίσματα. Για να ορίσετε έναν κωδικό πρόσβασης για τη σύνδεση διακομιστή SQL, καλείται η μέθοδος SetPassword του αντικειμένου σύνδεσης. Όταν ορίζετε έναν κωδικό πρόσβασης για νέα σύνδεση, χρησιμοποιήστε μια κενή συμβολοσειρά ως πρώτο όρισμα στη μέθοδο. καθορίστε τον κωδικό πρόσβασης για τη νέα σύνδεση ως δεύτερο όρισμα. Στο παράδειγμά μας, ο κωδικός πρόσβασης για το login_name ορίζεται ως "password" (χωρίς εισαγωγικά). Η προσθήκη του login_name login ολοκληρώνεται καλώντας τη μέθοδο Προσθήκη της συλλογής Logins.

Μπορείτε επίσης να χρησιμοποιήσετε τη μέθοδο SetPassword για να παρακάμψετε τον κωδικό πρόσβασης μιας υπάρχουσας σύνδεσης. Το πρώτο όρισμα της μεθόδου SetPassword σε αυτήν την περίπτωση είναι ο τρέχων κωδικός πρόσβασης. Ωστόσο, εάν δεν γνωρίζετε τον τρέχοντα κωδικό πρόσβασης, μπορείτε να καθορίσετε μια κενή συμβολοσειρά ως πρώτο όρισμα, όπως ακριβώς όταν δημιουργείτε έναν κωδικό πρόσβασης για μια νέα σύνδεση. Η δημιουργία ή η αλλαγή μιας σύνδεσης είναι δυνατή εάν η τρέχουσα σύνδεσή σας (υπό την οποία συνδεθήκατε στον διακομιστή) περιλαμβάνεται σε έναν από τους σταθερούς ρόλους διακομιστή: sysadmin ή Securityadmin. Δεν έχει σημασία πώς αλλάζετε τον κωδικό πρόσβασης: μέσω προγραμματισμού ή με άλλα μέσα. Το παράδειγμα χρησιμοποιεί τη σύνδεση sa, η οποία αποτελεί μέρος του ρόλου του σταθερού διακομιστή sysadmin.

Οι επόμενες γραμμές της δεύτερης διαδικασίας δημιουργούν μια σύνδεση για την ομάδα των Windows με το όνομα msdn_OS_users. Στην περίπτωσή μου, αυτή η ομάδα Windows των τριών αναγνωριστικών χρηστών των Windows, στην πραγματικότητα η ομάδα των Windows θα μπορούσε να είναι είτε μια ομάδα χρηστών τοπικού υπολογιστή είτε μια ομάδα χρηστών τομέα διακομιστή Windows. Η διαδικασία δημιουργίας σύνδεσης ξεκινά με την προετοιμασία ενός νέου αντικειμένου σύνδεσης (lgn1). Εάν προσπαθήσετε να επαναχρησιμοποιήσετε το lgn1 χωρίς επανεκκίνηση (μηδενισμός), θα εμφανιστεί ένα σφάλμα χρόνου εκτέλεσης που σας υπενθυμίζει ότι απαιτείται νέο αντικείμενο. Η διαδικασία χρησιμοποιεί ένα όνομα ομάδας Windows δύο τμημάτων. Το πρώτο μέρος είναι το όνομα διακομιστή των Windows, το δεύτερο είναι το όνομα της ομάδας διακομιστή των Windows. Η ανάστροφη κάθετο χρησιμεύει ως οριοθέτης. Η προεπιλεγμένη βάση δεδομένων για τη δεύτερη σύνδεση είναι και πάλι η βάση δεδομένων your_db_name. Δεδομένου ότι η δεύτερη σύνδεση δημιουργείται για έλεγχο ταυτότητας των Windows, δεν χρειάζεται να ορίσετε κωδικό πρόσβασης. Ωστόσο, πρέπει να ορίσετε την ιδιότητα Type σε SQLDMOLogin_NTGroup. Αυτή η τιμή αντιστοιχεί σε μια εσωτερική σταθερά που αντιστοιχεί στη σύνδεση της ομάδας των Windows. Κατά την προσθήκη μιας σύνδεσης SQL Server, δεν χρειάζεται να ορίσετε την ιδιότητα Type επειδή είναι η προεπιλογή για τις συνδέσεις του SQL Server. Η δημιουργία της δεύτερης σύνδεσης ολοκληρώνεται καλώντας τη μέθοδο Add της συλλογής Logins.

Μετά την προσθήκη δύο νέων συνδέσεων, η διαδικασία εκτυπώνει τα ονόματα και τους τύπους όλων των συνδέσεων διακομιστή. Η ιδιότητα Type αντιστοιχεί στην τιμή των εσωτερικών σταθερών. Για να είναι αναγνώσιμη η εμφάνιση των τύπων, χρησιμοποιείται μια συνάρτηση που μετατρέπει τις σταθερές σε αντίστοιχα ονόματα κειμένου.

Μετά την εκτύπωση των μελών της συλλογής Logins, η διαδικασία διαγράφει δύο νέα στοιχεία σύνδεσης με όνομα: login_name και YOUR_SERVER_NAME\msdn_OS_users. Αυτό το παράδειγμα δείχνει τη χρήση της συλλογής Logins, της μεθόδου Remove και της ιδιότητας Name της σύνδεσης που θέλετε να καταργήσετε. Για να επιβεβαιώσετε τη διαγραφή δύο συνδέσεων, η διαδικασία εμφανίζει ξανά τη λίστα των συνδέσεων από τη συλλογή Logins. Ανοίξτε το παράθυρο Άμεση και συγκρίνετε τις δύο λίστες συνδέσεων: αφού προσθέσετε και αφαιρέσετε δύο συνδέσεις.

Sub CallLoginDemo()
Dim srvname As String
Dim suid As String
Dim pwd As String

"ορίστε παραμέτρους για σύνδεση κατά τον έλεγχο ταυτότητας με διακομιστή SQL
srvname = "YOUR_SERVER_NAME"
suid="sa"
pwd="κωδικός πρόσβασης"

"Κλήση της διαδικασίας δημιουργίας σύνδεσης
ΣύνδεσηDemo srvname, suid, pwd

Sub LoginDemo(srvname As String, _

suid As String, pwd As String)
Dim srv1 Ως SQLDMO.SQLServer
Dim lgn1 Ως SQLDMO.Είσοδος

"Αρχικοποίηση του αντικειμένου διακομιστή
Ορισμός srv1 = Νέος SQLDMO.SQLServer

"Κλήση της μεθόδου Connect
srv1.Σύνδεση srvname, suid, pwd

"Αρχικοποίηση του αντικειμένου σύνδεσης
Ορίστε lgn1 = Νέο SQLDMO.Είσοδος

"Προσθήκη σύνδεσης SQL Server
lgn1.Name = "login_name"
lgn1.SetPassword "", "password"

srv1.Logins.Προσθήκη lgn1

"Εκκίνηση της σύνδεσης για επαναχρησιμοποίηση
Ορίστε lgn1 = Νέο SQLDMO.Είσοδος

"Προσθήκη σύνδεσης για την ομάδα των Windows
lgn1.Name = "YOUR_SERVER_NAME\msdn_OS_users"
lgn1.Database = "your_db_name"
lgn1.Type = SQLDMOLogin_NTGroup
srv1.Logins.Προσθήκη lgn1

"Έξοδος όλων των συνδέσεων μετά την προσθήκη δύο νέων
Debug.Print "Σύνδεση μετά την προσθήκη δύο νέων"

Επόμενο αρχείο καταγραφής1

"Διαγραφή νέων στοιχείων σύνδεσης που προστέθηκαν
srv1.Logins.Κατάργηση "YOUR_SERVER_NAME\msdn_OS_users"
srv1.Logins.Remove "login_name"

"Επανεμφάνιση όλων των συνδέσεων
Debug.Print vbCr & "Σύνδεση μετά τη διαγραφή δύο συνδέσεων"
Για κάθε lgn1 Σε srv1.Logins
Debug.Print DecodeLoginType(lgn1.Type), lgn1.Name
Επόμενο αρχείο καταγραφής1

"Εκκαθάριση μεταβλητών
srv1.Αποσύνδεση
Ορισμός srv1 = Τίποτα

Συνάρτηση DecodeLoginType(lgn_type As Byte) Ως συμβολοσειρά

Επιλέξτε Υπόθεση lgn_type
Περίπτωση 0
DecodeLoginType = "SQLDMOLogin_NTUser"
Περίπτωση 1
DecodeLoginType = "SQLDMOLogin_NTGroup"
Περίπτωση 2
DecodeLoginType = "SQLDMOLogin_Standard"
Υπόθεση Άλλη
DecodeLoginType = "Πληκτρολογήστε εκτός εύρους"
Τέλος Επιλογή

Δημιουργία σύνδεσης με χρήστη που είναι μέλος του ρόλου db_datareader

Η προσθήκη μέσω προγραμματισμού μιας νέας σύνδεσης και η αντιστοίχιση σε μια προεπιλεγμένη βάση δεδομένων δεν δημιουργεί χρήστη στη βάση δεδομένων για αυτήν τη σύνδεση. Επομένως, ένα έργο ADP που βασίζεται σε αυτήν τη σύνδεση δεν μπορεί να συνδεθεί με την προεπιλεγμένη βάση δεδομένων. Για να λειτουργήσει το έργο με τη βάση δεδομένων, πρέπει να δημιουργήσετε έναν χρήστη στη βάση δεδομένων για τη σύνδεσή σας.

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

Αφού συνδεθείτε στον διακομιστή και δημιουργήσετε ένα νέο όνομα_σύνδεσης, ο κώδικας δημιουργεί έναν νέο χρήστη. Στη συνέχεια, οι ιδιότητες Όνομα και Σύνδεση εκχωρούνται στον χρήστη. Η ιδιότητα Login σημαίνει τη σύνδεση με την οποία συνδέεται ο χρήστης - login_name στο παράδειγμά μας. Στη συνέχεια, ο χρήστης είναι έτοιμος να προστεθεί στη συλλογή Users της βάσης δεδομένων. Σημειώστε ότι η σύνταξη για την προσθήκη νέου χρήστη ακολουθεί τη σύνταξη για την ιεραρχία αντικειμένων. Η μέθοδος Προσθήκη για έναν νέο χρήστη εφαρμόζεται στη συλλογή Χρήστες, η οποία με τη σειρά της ανήκει στο αντικείμενο της βάσης δεδομένων. Η βάση δεδομένων είναι μέλος της συλλογής Βάσεων δεδομένων που ανήκει στο αντικείμενο διακομιστή (SQLserver). Μετά τη δημιουργία ενός χρήστη, απαιτούνται μία ή περισσότερες γραμμές για την προσθήκη του χρήστη στον ρόλο σταθερής βάσης δεδομένων db_datareader. Η μέθοδος για την προσθήκη ενός χρήστη σε έναν ρόλο ονομάζεται AddMember. Στην περίπτωσή μας, η μέθοδος AddMember του στοιχείου συλλογής DatabaseRoles προσθέτει έναν χρήστη σε έναν ρόλο βάσης δεδομένων. Αυτή η μέθοδος λαμβάνει ως παράμετρο την έκφραση συμβολοσειράς της ιδιότητας Name του αντικειμένου νέου χρήστη.

Μόλις ολοκληρωθεί η διαμόρφωση ασφαλείας της νέας σύνδεσης και του χρήστη, καλείται η διαδικασία OpenADPWindowsOrSQLServer. Οι προηγούμενες λίστες παρέχουν ένα παράδειγμα του τρόπου χρήσης αυτής της διαδικασίας. Στην περίπτωσή μας, το αρχείο msdn_test_security.adp ανοίγει με βάση το login_name. Για να ελέγξετε τη λειτουργικότητα της σύνδεσης, ανοίξτε τους πίνακες βάσης δεδομένων your_db_name. Επιπλέον, η λειτουργικότητα της νέας σύνδεσης μπορεί να ελεγχθεί στο παράθυρο διαλόγου Παράμετροι σύνδεσης, προσδιορίζοντας τη σύνδεση your_login.

Εάν προσπαθήσετε να εκτελέσετε ξανά τη διαδικασία MakeLoginWithDatareaderUser, η προσπάθεια θα αποτύχει. Αυτό συμβαίνει επειδή το login your_login υπάρχει ήδη. Θα παρουσιαστεί σφάλμα όταν προσπαθήσετε να το προσθέσετε ξανά. Μια προσπάθεια εκτέλεσης της διαδικασίας μπορεί να αποτύχει για έναν άλλο λόγο: Δεν έχετε κλείσει το έργο που είναι συνδεδεμένο στη βάση δεδομένων με αυτήν τη σύνδεση. Μπορείτε να γράψετε τυπικό χειρισμό σφαλμάτων VBA για να χειριστείτε σφάλματα χρόνου εκτέλεσης. Παρόμοια σφάλματα μπορεί να συνοδεύουν την εκτέλεση των προηγούμενων παραδειγμάτων. Επέλεξα να μην εμβαθύνω σε μια συζήτηση για τον εντοπισμό σφαλμάτων χρόνου εκτέλεσης, εστιάζοντας σε ζητήματα ασφάλειας διακομιστή SQL.

Sub MakeLoginWithDatareaderUser()
Dim srv1 Ως SQLDMO.SQLServer
Dim lgn1 Ως SQLDMO.Είσοδος
Dim usr1 Ως SQLDMO.User
Dim srvname As String
Dim suid As String
Dim pwd As String
Dim dbname As String
Αχνό μονοπάτι As String
Dim prname As String
Dim bolWindowsΕίσοδος ως Boolean

«Ορισμός των επιχειρημάτων
srvname = "YOUR_SERVER_NAME"
suid="sa"
pwd="κωδικός πρόσβασης"
dbname = "your_db_name"

"αρχικοποιήστε τον διακομιστή
Ορισμός srv1 = Νέος SQLDMO.SQLServer

"Καλέστε τη μέθοδο Connect για σύνδεση κατά τον έλεγχο ταυτότητας με τον διακομιστή SQL
srv1.Σύνδεση srvname, suid, pwd

"Αρχικοποιήστε και προσθέστε το αντικείμενο σύνδεσης
"στο διακομιστή srv1
suid = "όνομα_σύνδεσης"
Ορίστε lgn1 = Νέο SQLDMO.Είσοδος
lgn1.Όνομα = suid
lgn1.Βάση δεδομένων = dbname
lgn1.SetPassword "", pwd
srv1.Logins.Προσθήκη lgn1

"Αρχικοποιήστε και προσθέστε το αντικείμενο χρήστη
"στη βάση δεδομένων your_db_name
Ορίστε usr1 = Νέος SQLDMO.User
usr1.Name = suid
usr1.Login = lgn1.Name
srv1.Βάσεις δεδομένων(dbname).Χρήστες.Προσθήκη usr1
srv1.Databases(dbname).DatabaseRoles("db_datareader").AddMember usr1.Name

"Ορίστε παραμέτρους για το άνοιγμα ενός έργου ADP

prpath = "Path_to_project_file"
prname = "msdn_security_test"

"Αυτό το όρισμα ελέγχει τη χρήση της σύνδεσης των Windows
"για τον τρέχοντα χρήστη αντί για διακομιστή suid και pwd SQL
bolWindowsLogin = Λάθος

"Καλώντας τη διαδικασία ανοίγματος έργου prname
"με έλεγχο ταυτότητας Windows ή SQL Server
OpenADPWindowsOrSQLSserver srvname, dbname, _
prpath, prname, suid, pwd, bolWindowsLogin

«Αφήνουμε το αντικείμενο ανοιχτό για προβολή

συμπέρασμα

Η ασφάλεια του SQL Server βασίζεται σε διαφορετικές αρχές από αυτές που χρησιμοποιούνται από τους προγραμματιστές βάσεων δεδομένων Jet. Ωστόσο, το SQL Server Books Online τεκμηριώνει προσεκτικά τις οδηγίες ασφαλείας του SQL Server. Αυτό το άρθρο μεταφράζει τους βασικούς κανόνες BOL σε συγκεκριμένους κανόνες, σκοπός των οποίων είναι η χρήση ενός έργου Access με SQL Server. Τα παραδείγματα κώδικα σε αυτό το άρθρο δείχνουν τον τρόπο διαχείρισης της ασφάλειας του SQL Server χρησιμοποιώντας την Access.

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

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

Ρύθμιση του επιπέδου απομόνωσης σύνδεσης

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

ΡΥΘΜΙΣΗ ΕΠΙΠΕΔΟΥ ΑΠΟΜΟΝΩΣΗΣ ΣΥΝΑΛΛΑΓΗΣ ΕΠΑΝΑΛΗΠΤΙΚΗ ΑΝΑΓΝΩΣΗ Τα έγκυρα επίπεδα απομόνωσης είναι:

Διαβάστηκε αδέσμευτη; σειριοποιήσιμο

Διαβάστε δεσμευτεί; στιγμιότυπο

Επαναλαμβανόμενη ανάγνωση

Μπορείτε να ελέγξετε το τρέχον επίπεδο απομόνωσης χρησιμοποιώντας την εντολή Έλεγχος ακεραιότητας βάσης δεδομένων (DBCC):

ΕΠΙΛΟΓΕΣ ΧΡΗΣΗΣ DBCC

Τα αποτελέσματα θα είναι τα εξής (συντομογραφία):

Ορισμός τιμής επιλογής

επίπεδο απομόνωσης επαναλαμβανόμενη ανάγνωση

Τα επίπεδα απομόνωσης μπορούν επίσης να οριστούν σε επίπεδο ερωτήματος ή πίνακα χρησιμοποιώντας επιλογές κλειδώματος.

Χρήση απομόνωσης επιπέδου στιγμιότυπου βάσης δεδομένων

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

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

παρακολουθεί αποτελεσματικά την έκδοση εκδόσεων των σειρών στη βάση δεδομένων. Η έκδοση γραμμών είναι μια τεχνολογία που δημιουργεί αντίγραφα σειρών στη βάση δεδομένων TempDB για ενημέρωση. Εκτός από την κύρια φόρτωση της βάσης δεδομένων TempDB, η έκδοση σειρών προσθέτει επίσης ένα αναγνωριστικό σειράς 14 byte.

Χρήση της απομόνωσης στιγμιότυπου

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

ALTER DATABASE Aesop

ΕΝΕΡΓΟΠΟΙΗΣΗ ALLOW_SNAPSHOT_ISOLATION

| Για να ελέγξετε εάν η απομόνωση στιγμιότυπου είναι ενεργοποιημένη σε μια βάση δεδομένων, εκτελέστε το ακόλουθο ερώτημα SVS: SELECT name, snapshot_isolation_state_desc FROM [ * sysdatabases.

Τώρα η πρώτη συναλλαγή αρχίζει να διαβάζει και παραμένει ανοιχτή (δηλαδή δεν δεσμεύεται): ΧΡΗΣΙΜΟΠΟΙΗΣΤΕ Aesop

BEGIN TRAN SELECT Τίτλος FROM FABLE WHERE FablD = 2

Θα προκύψει το ακόλουθο αποτέλεσμα:

Αυτή τη στιγμή, η δεύτερη συναλλαγή αρχίζει να ενημερώνει την ίδια σειρά που άνοιξε από την πρώτη συναλλαγή:

ΡΥΘΜΙΣΗ ΕΠΙΠΕΔΟΥ ΑΠΟΜΟΝΩΣΗΣ ΣΥΝΑΛΛΑΓΗΣ Στιγμιότυπο.

ΞΕΚΙΝΗΣΤΕ ΤΗΝ ΕΝΗΜΕΡΩΣΗ Fable

SET Title = "Rocking with Snapshots"

ΠΟΥ FablD = 2;

ΕΠΙΛΟΓΗ * ΑΠΟ FABLE ΟΠΟΥ FablD = 2

Το αποτέλεσμα είναι το εξής:

Rocking με Στιγμιότυπα

Δεν είναι αυτό περίεργο; Η δεύτερη συναλλαγή μπόρεσε να ενημερώσει τη σειρά παρόλο που η πρώτη συναλλαγή παρέμεινε ανοιχτή. Ας επιστρέψουμε στην πρώτη συναλλαγή και ας δούμε τα αρχικά δεδομένα:

ΕΠΙΛΟΓΗ Τίτλου FROM FABLE WHERE FablD = 2

Το αποτέλεσμα είναι το εξής:

Αν ανοίξετε την τρίτη και την τέταρτη συναλλαγή, θα δουν την ίδια αρχική αξία του The Bald Knight:

Ακόμη και αφού η δεύτερη συναλλαγή πραγματοποιήσει τις αλλαγές, η πρώτη θα εξακολουθεί να βλέπει την αρχική τιμή και όλες οι επόμενες συναλλαγές θα βλέπουν τη νέα τιμή, Rocking with Snapshots.

Χρήση απομόνωσης Ανάγνωση δεσμευμένου στιγμιότυπου

Η απομόνωση Read Commited Snapshot είναι ενεργοποιημένη χρησιμοποιώντας παρόμοια σύνταξη:

ALTER DATABASE Aesop

ΕΝΕΡΓΟΠΟΙΗΣΗ READ_COMMITTED_SNAPSHOT

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

Επειδή το Read Commited είναι το προεπιλεγμένο επίπεδο απομόνωσης στον SQL Server, απαιτείται μόνο η ρύθμιση των παραμέτρων της βάσης δεδομένων.

Επίλυση διενέξεων γραφής

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

Χρήση επιλογών αποκλεισμού

Οι παράμετροι αποκλεισμού σάς επιτρέπουν να κάνετε προσωρινές προσαρμογές στη στρατηγική αποκλεισμού. Ενώ το επίπεδο απομόνωσης επηρεάζει τη σύνδεση στο σύνολό της, οι επιλογές κλειδώματος είναι συγκεκριμένες για κάθε πίνακα σε ένα συγκεκριμένο ερώτημα (Πίνακας 51.5). Η επιλογή WITH (lock_option) τοποθετείται μετά το όνομα του πίνακα στον όρο FROM του ερωτήματος. Για κάθε πίνακα, μπορείτε να καθορίσετε πολλές παραμέτρους, διαχωρισμένες με κόμμα.

Πίνακας 51.5. Επιλογές αποκλεισμού

Παράμετρος

μπλοκάρισμα

Περιγραφή

Επίπεδο απομόνωσης. Δεν ρυθμίζει και δεν συγκρατεί κλειδαριά. Ισοδυναμεί με κανένα μπλοκάρισμα

Προεπιλεγμένο επίπεδο απομόνωσης συναλλαγής

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

Επίπεδο απομόνωσης. Κρατάει ένα κοινόχρηστο κλείδωμα μέχρι να ολοκληρωθεί η συναλλαγή

Παράλειψη αποκλεισμένων σειρών αντί να περιμένετε

Ενεργοποιήστε το κλείδωμα σε επίπεδο σειράς αντί για επίπεδο σελίδας, έκτασης ή πίνακα

Ενεργοποιήστε το κλείδωμα σε επίπεδο σελίδας αντί για κλείδωμα σε επίπεδο πίνακα

Αυτόματη κλιμάκωση κλειδωμάτων σειρών, σελίδων και επιπέδων έκτασης στην ευαισθησία σε επίπεδο πίνακα

Παράμετρος

μπλοκάρισμα

Περιγραφή

Παράλειψη εφαρμογής ή συντήρησης κλειδαριών. Το ίδιο με το ReadUnCommitted

Ενεργοποιήστε ένα αποκλειστικό κλείδωμα τραπεζιού. Αποτροπή λειτουργίας άλλων συναλλαγών με τον πίνακα

Κρατήστε ένα κοινόχρηστο κλείδωμα έως ότου δεσμευτεί η συναλλαγή (ίδιο με το Serializable)

Χρησιμοποιώντας ένα κλείδωμα ενημέρωσης αντί για γενικό και κρατώντας το. Κλείδωμα άλλων εγγραφών στα δεδομένα μεταξύ αρχικών αναγνώσεων και εγγραφών

Διατήρηση αποκλειστικού κλειδώματος δεδομένων μέχρι να επιβεβαιωθεί η συναλλαγή

Το παρακάτω παράδειγμα χρησιμοποιεί μια επιλογή κλειδώματος στον όρο FROM της δήλωσης UPDATE για να αποτρέψει τον διαχειριστή από την κλιμάκωση της ευαισθησίας κλειδώματος:

ΧΡΗΣΙΜΟΠΟΙΗΣΤΕ το προϊόν OBXKites UPDATE

FROM Product WITH (RowLock)

SET ProductName = ProductName + ' Ενημερώθηκε 1

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

Περιορισμοί κλειδώματος σε επίπεδο ευρετηρίου

Τα επίπεδα απομόνωσης και οι ρυθμίσεις αποκλεισμού εφαρμόζονται στο επίπεδο σύνδεσης και αιτήματος. Ο μόνος τρόπος διαχείρισης κλειδαριών σε επίπεδο πίνακα είναι να περιοριστεί η ευαισθησία της κλειδαριάς με βάση συγκεκριμένους δείκτες. Χρησιμοποιώντας την αποθηκευμένη διαδικασία του συστήματος sp_indexoption, τα κλειδώματα σειρών ή/και σελίδων μπορούν να απενεργοποιηθούν για ένα συγκεκριμένο ευρετήριο χρησιμοποιώντας την ακόλουθη σύνταξη: sp_indexoption 'index_name 1 .

AllowRowlocks ή AllowPagelocks,

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

Η αποθηκευμένη διαδικασία Sp_indexoption έχει σχεδιαστεί για να τελειοποιήσει το σχήμα δεδομένων. γι' αυτό χρησιμοποιεί κλείδωμα σε επίπεδο ευρετηρίου. Για να περιορίσετε τις κλειδαριές στο πρωτεύον κλειδί ενός πίνακα, χρησιμοποιήστε το sp_help table_name για να βρείτε το όνομα του ευρετηρίου του πρωτεύοντος κλειδιού.

Η ακόλουθη εντολή διαμορφώνει τον πίνακα ProductCategory ως μια σπάνια ενημερωμένη κατηγοριοποίηση. Η εντολή sp_help εμφανίζει πρώτα το όνομα του ευρετηρίου πρωτεύοντος κλειδιού του πίνακα: sp_help ProductCategory

Το αποτέλεσμα (περικομμένο) είναι:

ευρετήριο ευρετήριο ευρετήριο

κλειδιά περιγραφής ονόματος

PK_____________ Κατηγορία προϊόντος 79A814 03 χωρίς συμπλέγματα, Κατηγορία προϊόντοςD

μοναδικό, πρωτεύον κλειδί που βρίσκεται στο PRIMARY

Δεδομένου του πραγματικού ονόματος του πρωτεύοντος κλειδιού, η αποθηκευμένη διαδικασία συστήματος μπορεί να ορίσει τις παραμέτρους κλειδώματος ευρετηρίου:

EXEC sp_indexoption

‘ProductCategory.РК__ ProductCategory_______ 7 9A814 03′,

'AllowRowlocks', FALSE EXEC sp_indexoption

‘ProductCategory.PK__ ProductCategory_______ 79A81403′,

'AllowPagelocks', FALSE

Διαχείριση χρόνων αναμονής κλειδώματος

Εάν μια συναλλαγή περιμένει ένα κλείδωμα, τότε αυτή η αναμονή θα συνεχιστεί μέχρι να καταστεί δυνατή η κλειδαριά. Από προεπιλογή δεν υπάρχει όριο χρονικού ορίου - θεωρητικά μπορεί να διαρκέσει για πάντα.

Ευτυχώς, μπορείτε να ορίσετε το χρονικό όριο λήξης κλειδώματος χρησιμοποιώντας την επιλογή σύνδεσης set lock_timeout. Ορίστε αυτήν την παράμετρο στον αριθμό των χιλιοστών του δευτερολέπτου ή εάν δεν θέλετε να περιορίσετε τον χρόνο, ορίστε την σε -1 (που είναι η προεπιλογή). Εάν αυτή η παράμετρος οριστεί στο 0, η συναλλαγή θα απορριφθεί αμέσως εάν υπάρξει φραγή. Σε αυτή την περίπτωση, η εφαρμογή θα είναι εξαιρετικά γρήγορη, αλλά αναποτελεσματική.

Το ακόλουθο αίτημα ορίζει το χρονικό όριο κλειδώματος σε δύο δευτερόλεπτα (2000 χιλιοστά του δευτερολέπτου):

SET Lock_Timeout 2 00 0

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

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

Αξιολόγηση της απόδοσης ισχυρισμού βάσης δεδομένων

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

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

προβολή και ενημέρωση δεδομένων από τον χρήστη. Μια καλή δοκιμή θα πρέπει να εκτελεί 20 παρουσίες ενός σεναρίου που φορτώνει συνεχώς τη βάση δεδομένων και, στη συνέχεια, να αφήσει την ομάδα δοκιμής να χρησιμοποιήσει την εφαρμογή. Ο αριθμός των κλειδαριών θα σας βοηθήσει να δείτε την οθόνη απόδοσης που συζητείται στο Κεφάλαιο 49.

Είναι καλύτερο να δοκιμάσετε τον ανταγωνισμό για πολλούς παίκτες αρκετές φορές κατά τη διαδικασία ανάπτυξης. Όπως λέει το εγχειρίδιο εξετάσεων MCSE, «μην αφήνετε το τεστ του πραγματικού κόσμου να προηγείται».

Κλειδαριές εφαρμογών

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

Πριν από αρκετά χρόνια έγραψα ένα πρόγραμμα για καλωδίωση σε έργα πυρηνικών σταθμών. Μόλις σχεδιάστηκε και δοκιμάστηκε η γεωμετρία της εγκατάστασης, οι μηχανικοί εισήγαγαν τη σύνθεση, τη θέση και τους τύπους των καλωδίων που χρησιμοποιήθηκαν. Αφού μπήκαν πολλά καλώδια, το πρόγραμμα διαμόρφωσε τη διαδρομή για την τοποθέτησή τους ώστε να είναι όσο το δυνατόν πιο σύντομη. Η διαδικασία έλαβε επίσης υπόψη ζητήματα ασφάλειας καλωδίωσης και διαχώρισε τα ασύμβατα καλώδια. Ταυτόχρονα, εάν εκτελούνταν πολλές διαδικασίες δρομολόγησης ταυτόχρονα, κάθε περίπτωση θα επιχειρούσε να δρομολογήσει τα ίδια καλώδια, με αποτέλεσμα εσφαλμένα αποτελέσματα. Ο αποκλεισμός εφαρμογών έχει γίνει μια εξαιρετική λύση σε αυτό το πρόβλημα.

Το κλείδωμα εφαρμογών ανοίγει έναν ολόκληρο κόσμο κλειδαριών SQL για χρήση σε εφαρμογές. Αντί να χρησιμοποιούν δεδομένα ως πόρο με δυνατότητα κλειδώματος, τα κλειδώματα εφαρμογών κλειδώνουν τη χρήση όλων των πόρων χρήστη που δηλώνονται στην αποθηκευμένη διαδικασία sp__GetAppLock.

Το κλείδωμα εφαρμογής μπορεί να εφαρμοστεί στις συναλλαγές. Σε αυτήν την περίπτωση, η λειτουργία αποκλεισμού μπορεί να είναι Shared, Update, Exclusive, IntentExclusice ή IntentShared. Η τιμή επιστροφής από τη διαδικασία υποδεικνύει εάν το κλείδωμα εφαρμόστηκε με επιτυχία.

0. Η κλειδαριά εγκαταστάθηκε με επιτυχία.

1. Η κλειδαριά αποκτήθηκε όταν μια άλλη διαδικασία απελευθέρωσε την κλειδαριά της.

999. Η κλειδαριά δεν τοποθετήθηκε για άλλο λόγο.

Η αποθηκευμένη διαδικασία sp_ReleaseApLock απελευθερώνει το κλείδωμα. Το ακόλουθο παράδειγμα δείχνει πώς μπορεί να χρησιμοποιηθεί ένα κλείδωμα εφαρμογής σε μια παρτίδα ή διαδικασία: ΔΗΛΩΣΤΕ @ShareOK INT EXEC @ShareOK = sp_GetAppLock

@Resource = 'CableWorm',

@LockMode = 'Αποκλειστικό'

ΑΝ @ShareOK< 0

...Σφάλμα χειρισμού κωδικού

... Κωδικός προγράμματος ...

EXEC sp_ReleaseAppLock @Resource = 'CableWorm'

Όταν προβάλλονται κλειδώματα εφαρμογών χρησιμοποιώντας το Management Studio ή το sp_Lock, εμφανίζονται με τύπο APP. Η ακόλουθη λίστα είναι μια συντομευμένη έξοδος του sp_Lock που εκτελείται ταυτόχρονα με τον παραπάνω κώδικα: spid dbid Objld Indld Τύπος πόρου Κατάσταση κατάστασης

57 8 0 0 APP Cabllf 94cl36 X GRANT

Υπάρχουν δύο μικρές διαφορές που πρέπει να σημειωθούν στον τρόπο χειρισμού των κλειδαριών εφαρμογών στον SQL Server:

Τα αδιέξοδα δεν εντοπίζονται αυτόματα.

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

Αδιέξοδα

Το αδιέξοδο είναι μια ειδική κατάσταση που εμφανίζεται μόνο όταν συναλλαγές με πολλαπλές εργασίες ανταγωνίζονται η μία για τους πόρους της άλλης. Για παράδειγμα, η πρώτη συναλλαγή έχει αποκτήσει ένα κλείδωμα στον πόρο Α και πρέπει να κλειδώσει τον πόρο Β, και ταυτόχρονα η δεύτερη συναλλαγή, η οποία έχει κλειδώσει τον πόρο Β, πρέπει να κλειδώσει τον πόρο Α.

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

Τα αδιέξοδα ήταν ένα σοβαρό πρόβλημα, αλλά ο SQL Server μπορεί πλέον να τα επιλύσει με επιτυχία.

Δημιουργία αδιεξόδου

Ο ευκολότερος τρόπος για να δημιουργήσετε μια κατάσταση αδιεξόδου στον SQL Server είναι να χρησιμοποιήσετε δύο συνδέσεις στο πρόγραμμα επεξεργασίας ερωτημάτων του Management Studio (Εικόνα 51.12). Η πρώτη και η δεύτερη συναλλαγή επιχειρούν να ενημερώσουν τις ίδιες σειρές, αλλά με την αντίθετη σειρά. Χρησιμοποιώντας το τρίτο παράθυρο για την εκτέλεση της διαδικασίας pGetLocks, μπορείτε να παρακολουθείτε τις κλειδαριές.

1. Δημιουργήστε ένα δεύτερο παράθυρο στο πρόγραμμα επεξεργασίας ερωτημάτων.

2. Τοποθετήστε τον κωδικό μπλοκ Βήμα 2 στο δεύτερο παράθυρο.

3. Τοποθετήστε τον κωδικό μπλοκ Βήμα 1 στο πρώτο παράθυρο και πατήστε το πλήκτρο .

4. Στο δεύτερο παράθυρο, εκτελέστε ομοίως τον κωδικό Βήμα 2.

5. Επιστρέψτε στο πρώτο παράθυρο και εκτελέστε τον κωδικό μπλοκ Βήμα 3.

6. Μετά από σύντομο χρονικό διάστημα, ο SQL Server θα εντοπίσει το αδιέξοδο και θα το επιλύσει αυτόματα.

Παρακάτω είναι το παράδειγμα κώδικα.

– Συναλλαγή 1 — Βήμα 1 ΧΡΗΣΗ OBXKites ΕΝΑΡΞΗ ΣΥΝΑΛΛΑΓΗΣ ΕΝΗΜΕΡΩΣΗ Επικοινωνία

SET LastName = 'Jorgenson'

WHERE Κωδικός Επικοινωνίας = 401′

Puc. 51.12. Δημιουργία κατάστασης αδιεξόδου στο Management Studio χρησιμοποιώντας δύο συνδέσεις (τα παράθυρά τους βρίσκονται στην κορυφή)

Τώρα η πρώτη συναλλαγή έχει αποκτήσει αποκλειστικό κλείδωμα στην εγγραφή με την τιμή 101 στο πεδίο ContactCode. Η δεύτερη συναλλαγή θα αποκτήσει ένα αποκλειστικό κλείδωμα στη σειρά με τιμή 1001 στο πεδίο ProductCode και, στη συνέχεια, θα επιχειρήσει να κλειδώσει αποκλειστικά την εγγραφή που έχει ήδη κλειδώσει από την πρώτη συναλλαγή (ContactCode=101).

– Συναλλαγή 2 — Βήμα 2 ΧΡΗΣΗ OBXKites ΕΝΗΜΕΡΩΣΗ ΣΥΝΑΛΛΑΓΗΣ ΕΝΗΜΕΡΩΣΗ ΣΕΤ προϊόντος Όνομα προϊόντος

= 'Κιτ επισκευής DeadLock'

WHERE ProductCode = '1001'

SET FirstName = 'Neals'

WHERE ContactCode = '101'

ΔΕΣΜΕΥΣΗ ΣΥΝΑΛΛΑΓΗΣ

Δεν υπάρχει ακόμη αδιέξοδο επειδή η συναλλαγή 2 περιμένει να ολοκληρωθεί η συναλλαγή 1, αλλά η συναλλαγή 1 δεν περιμένει ακόμη την ολοκλήρωση της συναλλαγής 2. απελευθερωθεί και η συναλλαγή 2 θα είναι μια χαρά θα μπορεί να μπλοκάρει το μπλοκ που χρειάζεται και να συνεχίσει τις ενέργειές της.

Το πρόβλημα παρουσιάζεται όταν η συναλλαγή 1 προσπαθεί να ενημερώσει μια σειρά με ProductCode=l. Ωστόσο, δεν θα λάβει το αποκλειστικό κλείδωμα που απαιτείται για αυτό, καθώς αυτή η εγγραφή κλειδώνεται από τη συναλλαγή 2:

– Συναλλαγή 1 – Βήμα 3 ΕΝΗΜΕΡΩΣΗ ΣΕΤ προϊόντος Όνομα προϊόντος

= 'DeadLock Identification Tester'

WHERE ProductCode = '1001'

ΔΕΣΜΕΥΣΗ ΣΥΝΑΛΛΑΓΗΣ

Η συναλλαγή 1 θα επιστρέψει το ακόλουθο μήνυμα κειμένου σφάλματος μετά από μερικά δευτερόλεπτα. Το αδιέξοδο που προκύπτει μπορεί επίσης να φανεί στο SQL Server Profiler (Εικόνα 51.13):

Διακομιστής: Msg 1205, Επίπεδο 13,

Κατάσταση 50, Συναλλαγή γραμμής 1 (Αναγνωριστικό διαδικασίας 51).

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

Η συναλλαγή 2 θα ολοκληρώσει το έργο της σαν να μην υπήρχε ποτέ το πρόβλημα:

(1 σειρές επηρεάζονται)

(1 σειρές επηρεάζονται)

Ρύζι. 51.13. Το SQL Server Profiler σάς επιτρέπει να παρακολουθείτε τα αδιέξοδα χρησιμοποιώντας το συμβάν Locks:Deadlock Graph και να αναγνωρίζετε τον πόρο που προκαλεί το αδιέξοδο

Αυτόματος εντοπισμός αδιεξόδου

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

που ολοκλήρωσε τη λιγότερη εργασία. Ο SQL Server ελέγχει συνεχώς για την ύπαρξη cross-locks. Η καθυστέρηση ανίχνευσης αδιεξόδου μπορεί να κυμαίνεται από μηδέν έως δύο δευτερόλεπτα (στην πράξη, το μεγαλύτερο διάστημα που χρειάστηκε να περιμένω για αυτό είναι πέντε δευτερόλεπτα).

Αντιμετώπιση αδιεξόδων

Όταν προκύψει αδιέξοδο, η σύνδεση που επιλέχθηκε ως θύμα αδιεξόδου πρέπει να δοκιμάσει ξανά τη συναλλαγή της. Δεδομένου ότι η εργασία πρέπει να γίνει εκ νέου, είναι καλό η συναλλαγή που κατάφερε να ολοκληρώσει τη μικρότερη ποσότητα εργασίας να επαναληφθεί - είναι αυτή που θα επαναληφθεί από την αρχή.

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

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

ΟΡΙΣΤΕ ΤΗΝ ΠΡΟΤΕΡΑΙΟΤΗΤΑ ΑΔΙΕΞΑΓΩΓΗΣ ΧΑΜΗΛΗ

Ελαχιστοποίηση αδιεξόδων

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

Προσπαθήστε να κρατάτε τις συναλλαγές σύντομες και χωρίς περιττό κωδικό. Εάν κάποιος κωδικός δεν χρειάζεται να υπάρχει σε μια συναλλαγή, πρέπει να συναχθεί από αυτήν.

Ποτέ μην κάνετε έναν κωδικό συναλλαγής να εξαρτάται από την είσοδο του χρήστη.

Προσπαθήστε να δημιουργήσετε πακέτα και διαδικασίες που αποκτούν κλειδαριές με την ίδια σειρά. Για παράδειγμα, ο πίνακας Α επεξεργάζεται πρώτα και μετά οι πίνακες Β, Γ κ.λπ. Έτσι, η μία διαδικασία θα περιμένει τη δεύτερη και τα αδιέξοδα δεν μπορούν να προκύψουν εξ ορισμού.

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

Μην αυξάνετε το επίπεδο μόνωσης εκτός εάν είναι απαραίτητο. Ένα αυστηρότερο επίπεδο απομόνωσης αυξάνει τη διάρκεια του lockdown.

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

Δούλεψα με το VS2008 Database Edition σε άλλη εταιρεία και είναι ένα καταπληκτικό προϊόν. Το αφεντικό μου μου ζήτησε να ρίξω μια ματιά στο SQL Compare by Redgate και να ψάξω για άλλα προϊόντα που μπορεί να είναι καλύτερα. Η σύγκριση SQL είναι επίσης ένα εξαιρετικό προϊόν. Ωστόσο, δεν φαίνεται να υποστηρίζουν το Perforce.

Χρησιμοποιήσατε ποικιλία προϊόντων για αυτό;

Ποια εργαλεία χρησιμοποιείτε για τη διαχείριση SQL;

Τι πρέπει να περιλαμβάνεται στις απαιτήσεις προτού η εταιρεία μου πραγματοποιήσει μια αγορά;

10 απαντήσεις

Δεν νομίζω ότι υπάρχει εργαλείο που να μπορεί να χειριστεί όλα τα μέρη. Το VS Database Edition δεν σας επιτρέπει να δημιουργήσετε έναν αξιοπρεπή μηχανισμό έκδοσης. Η εκτέλεση μεμονωμένων σεναρίων από το πρόγραμμα περιήγησης λύσεων δεν κλιμακώνεται αρκετά καλά σε μεγάλα έργα.

Τουλάχιστον χρειάζεστε

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

Η τελευταία σφαίρα είναι εκεί που συνήθως σπάνε τα πράγματα. Να γιατί. Για καλύτερη διαχείριση και παρακολούθηση έκδοσης, θέλετε να αποθηκεύσετε κάθε αντικείμενο db στο δικό του αρχείο δέσμης ενεργειών. Δηλαδή, κάθε πίνακας, αποθηκευμένη διαδικασία, προβολή, ευρετήριο κ.λπ. έχει το δικό του αρχείο.

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

2 επιλογές που χρησιμοποίησα:

    Εκτός από την αποθήκευση όλων των μεμονωμένων αντικειμένων βάσης δεδομένων στα δικά τους αρχεία, έχετε σενάρια έκδοσης, τα οποία είναι μια συνένωση μεμονωμένων σεναρίων. Το μειονέκτημα αυτού: έχετε κωδικό σε 2 σημεία με όλους τους κινδύνους και τα μειονεκτήματα. Δυνατότητα: Η εκτέλεση μιας κυκλοφορίας είναι τόσο εύκολη όσο η εκτέλεση ενός σεναρίου.

    γράψτε ένα μικρό εργαλείο που μπορεί να διαβάσει μεταδεδομένα σεναρίου από το μανιφέστο έκδοσης και να εκτελέσει το σενάριο eadch που καθορίζεται στο μανιφέστο στον διακομιστή προορισμού. Δεν υπάρχει κανένα μειονέκτημα σε αυτό, εκτός από το ότι πρέπει να γράψετε κώδικα. Αυτή η προσέγγιση δεν λειτουργεί για πίνακες που δεν μπορούν να απορριφθούν και να αναδημιουργηθούν (όταν είστε ζωντανοί και έχετε τα δεδομένα), επομένως θα έχετε σενάρια αλλαγής για τους πίνακες. Άρα θα είναι στην πραγματικότητα ένας συνδυασμός και των δύο προσεγγίσεων.

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

Η δημιουργία βάσεων δεδομένων είναι σε μεγάλο βαθμό ασήμαντη. Ρυθμίστε μια δέσμη CREATE σεναρίων, παραγγείλτε τα σωστά (δημιουργήστε βάση δεδομένων πριν από σχήματα, σχήματα πριν από πίνακες, πίνακες πριν από διαδικασίες, διαδικασίες κλήσης πριν από κλήσεις, κ.λπ.) και κάντε το. Η διαχείριση των αλλαγών της βάσης δεδομένων δεν είναι τόσο εύκολη:

  • Εάν προσθέσετε μια στήλη σε έναν πίνακα, δεν μπορείτε απλά να απορρίψετε τον πίνακα και να τον δημιουργήσετε με μια νέα στήλη, επειδή αυτό θα καταστρέψει όλα τα πολύτιμα δεδομένα παραγωγής σας.
  • Εάν ο Fred προσθέσει μια στήλη στον πίνακα XYZ και η Mary προσθέσει μια άλλη στήλη στον πίνακα XYZ, ποια στήλη προστίθεται πρώτη; Ναι, η σειρά των στηλών στους πίνακες δεν έχει σημασία [επειδή δεν χρησιμοποιείτε ποτέ SELECT *, σωστά;], εκτός και αν προσπαθείτε να διαχειριστείτε τη βάση δεδομένων και να παρακολουθήσετε την έκδοση εκδόσεων, οπότε έχετε δύο "πραγματικές" βάσεις δεδομένων που μην μοιάζετε μεταξύ τους, γίνετε πραγματικός πονοκέφαλος. Χρησιμοποιούμε τη σύγκριση SQL όχι για να διαχειριστούμε, αλλά για να ελέγξουμε και να παρακολουθήσουμε τα πράγματα, ειδικά κατά την ανάπτυξη, και οι λίγες περιπτώσεις "είναι διαφορετικές (αλλά δεν είναι magger)" που μπορούμε να μας αποτρέψουν από το να παρατηρήσουμε τις διαφορές που έχουν σημασία.
  • Ομοίως, όταν πολλά έργα (προγραμματιστές) λειτουργούν ταυτόχρονα και χωριστά σε μια κοινή βάση δεδομένων, μπορεί να γίνει πολύ περίπλοκο. Ίσως όλοι εργάζονται στο έργο Next Big Thing, όταν ξαφνικά κάποιος πρέπει να αρχίσει να εργάζεται για διορθώσεις σφαλμάτων για το έργο Last Big Thing. Πώς διαχειρίζεστε τις απαιτούμενες τροποποιήσεις κώδικα όταν η σειρά έκδοσης είναι μεταβλητή και ευέλικτη; (Πραγματικά αστείες στιγμές.)
  • Η αλλαγή δομών πινάκων σημαίνει αλλαγή δεδομένων, και αυτό μπορεί να γίνει εξαιρετικά περίπλοκο όταν πρέπει να αντιμετωπίσετε τη συμβατότητα προς τα πίσω. Προσθέτετε μια στήλη "DeltaFactor", εντάξει, τι κάνετε για να συμπληρώσετε αυτήν την εσωτερική τιμή για όλα τα υπάρχοντα (διαβάστε: παλαιού τύπου) δεδομένα σας; Προσθέτετε έναν νέο πίνακα αναζήτησης και την αντίστοιχη στήλη, αλλά πώς μπορείτε να τον συμπληρώσετε για υπάρχουσες σειρές; Αυτές οι καταστάσεις μπορεί να μην συμβαίνουν συχνά, αλλά όταν συμβαίνουν, πρέπει να το κάνετε μόνοι σας. Τα εργαλεία τρίτων απλά δεν μπορούν να προβλέψουν τις ανάγκες της επιχειρηματικής σας λογικής.

Ουσιαστικά έχω ένα σενάριο CREATE για κάθε βάση δεδομένων που ακολουθείται από μια σειρά από σενάρια ALTER καθώς η βάση του κώδικά μας αλλάζει με την πάροδο του χρόνου. Κάθε σενάριο ελέγχει αν μπορεί να εκτελεστεί: αυτό είναι το σωστό "είδος" της βάσης δεδομένων, τα απαραίτητα προ-σενάρια έχουν εκτελεστεί, αυτό το σενάριο εκτελείται ήδη. Μόνο όταν περάσουν οι έλεγχοι, το σενάριο θα εκτελέσει τις αλλαγές του.

Ως εργαλείο, χρησιμοποιούμε το SourceGear Fortress για τη διαχείριση βασικού πηγαίου κώδικα, το Redgate SQL Compare για γενική υποστήριξη και αντιμετώπιση προβλημάτων και μια σειρά αρχικών σεναρίων που βασίζονται σε SQLCMD για να αναπτύξουμε "μαζικά" σενάρια με αλλαγές σε πολλούς διακομιστές και βάσεις δεδομένων και να παρακολουθήσουμε ποιος έχει υποβάλει αίτηση ποια σενάρια βάσης δεδομένων σε ποια ώρα. Το τελικό αποτέλεσμα: όλες οι βάσεις δεδομένων μας είναι σταθερές και σταθερές και μπορούμε εύκολα να αποδείξουμε ποια έκδοση είναι ή ποια ήταν ανά πάσα στιγμή.

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

Συνήθως χρησιμοποιώ το MS Server Management Studio για να διαχειρίζομαι sql, να εργάζομαι με δεδομένα, να αναπτύσσω βάσεις δεδομένων και να το διορθώνω, εάν χρειάζεται να εξαγάγω κάποια δεδομένα σε script sql ή πρέπει να δημιουργήσω κάποιο σύνθετο αντικείμενο στη βάση δεδομένων, χρησιμοποιώ το EMS SQL Management Studio για SQL Διακομιστής γιατί εκεί μπορώ να δω πιο καθαρά ποια στενά τμήματα του κώδικα και η οπτική μου σχεδίαση σε αυτό το περιβάλλον με διευκολύνουν

Έχω ένα έργο ανοιχτού κώδικα (με άδεια χρήσης LGPL) που προσπαθεί να λύσει προβλήματα που σχετίζονται με τη σωστή έκδοση σχήματος DB για (και πέρα ​​από αυτό) SQL Server (2005/2008/Azure), bsn ModuleStore. Η όλη διαδικασία είναι πολύ κοντά στο concept που εξηγεί η ανάρτηση του Phillip Kelly εδώ.

Βασικά, ένα ξεχωριστό μέρος της εργαλειοθήκης μετατρέπει τη βάση δεδομένων του SQL Server σε αρχεία του σχήματος DB σε αρχεία με τυπική μορφοποίηση, επομένως τα περιεχόμενα του αρχείου αλλάζουν μόνο εάν το αντικείμενο έχει αλλάξει πραγματικά (σε αντίθεση με το σενάριο που γίνεται από το VS, το οποίο δημιουργεί επίσης σενάρια κ.λπ. , επισημαίνοντας όλα τα αλλαγμένα αντικείμενα, ακόμα κι αν είναι σχεδόν πανομοιότυπα).

Αλλά η εργαλειοθήκη υπερβαίνει αυτό εάν χρησιμοποιείτε .NET: σας επιτρέπει να ενσωματώνετε δέσμες ενεργειών SQL σε μια βιβλιοθήκη ή εφαρμογή (ως ενσωματωμένους πόρους) και στη συνέχεια να συγκρίνετε τα συγκριτικά ενσωματωμένα σενάρια με την τρέχουσα κατάσταση στη βάση δεδομένων. Οι αλλαγές εκτός πίνακα (αυτές που δεν είναι "καταστροφικές αλλαγές" όπως ορίζονται από τον Martin Fowler) μπορούν να εφαρμοστούν αυτόματα ή κατ' απαίτηση (για παράδειγμα, δημιουργία και διαγραφή αντικειμένων όπως προβολές, συναρτήσεις, αποθηκευμένες διαδικασίες, τύποι, ευρετήρια) και αλλαγή σεναρίων (τα οποία πρέπει να καταγραφούν χειροκίνητα) μπορούν να εφαρμοστούν στην ίδια διαδικασία. Δημιουργούνται επίσης νέοι πίνακες, καθώς και τα δεδομένα ρύθμισής τους. Μετά την ενημέρωση, το σχήμα της βάσης δεδομένων συγκρίνεται ξανά με τα σενάρια για να διασφαλιστεί ότι η ενημέρωση της βάσης δεδομένων είναι επιτυχής πριν γίνουν αλλαγές.

Λάβετε υπόψη ότι όλος ο κώδικας δέσμης ενεργειών και σύγκρισης εκτελούνται χωρίς SMO, ώστε να μην έχετε επώδυνη εξάρτηση από το SMO όταν χρησιμοποιείτε τη λειτουργική μονάδα bsn ModuleStore σε εφαρμογές.

Ανάλογα με τον τρόπο με τον οποίο θέλετε να αποκτήσετε πρόσβαση στη βάση δεδομένων, η εργαλειοθήκη προσφέρει ακόμη περισσότερα - υλοποιεί ορισμένες δυνατότητες ORM και προσφέρει μια πολύ ωραία και χρήσιμη προσέγγιση front-end για την κλήση αποθηκευμένων διαδικασιών, συμπεριλαμβανομένης της υποστήριξης διαφανούς XML με εγγενείς κλάσεις .NET XML, καθώς και για TVP (Πίνακες-τιμές παράμετροι) ως IEnumerable

Εδώ είναι το σενάριό μου για την παρακολούθηση αποθηκευμένων proc και udf και ενεργοποιήσεων σε έναν πίνακα.

    Δημιουργήστε έναν πίνακα για να αποθηκεύσετε τον υπάρχοντα πηγαίο κώδικα proc

    Εισαγάγετε έναν πίνακα με όλα τα υπάρχοντα δεδομένα ενεργοποίησης και σεναρίου

    Δημιουργήστε ένα έναυσμα DDL για να παρακολουθείτε τις αλλαγές σε αυτά

    /******* Αντικείμενο: Πίνακας . Ημερομηνία σεναρίου: 17/9/2014 11:36:54 π.μ. ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE . (Ταυτότητα (1, 1) όχι μηδενικό, (1000) null, (1000) null, (1000) null, (1000) null, null, ntext null, περιορισμός Πρωτογενών κλειδιού (ASC) OFF ,IGNORE_DUP_KEY = OFF ,ALLOW_ROW_LOCKS = ON ,ALLOW_PAGE_LOCKS = ON) ON ) ON GO ALTER TABLE . ΠΡΟΣΘΗΚΗ ΠΡΟΕΠΙΛΟΓΗΣ ΠΕΡΙΟΡΙΣΜΟΥ("") ΓΙΑ GO INSERT INTO. ( , , , , ,) SELECT "sa" ,"loginitialdata" ,r.ROUTINE_NAME ,r.ROUTINE_TYPE ,GETDATE() ,r.ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES r UNION SELECT "sa.NAMEit, log""" "view" ,GETDATE() ,v.VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS v UNION SELECT "sa" ,,"loginitialdata" ,o.NAME , "trigger" ,GETDATE() ,m.DEFINITION FROM sys.objects o JOIN sys. sql_modules m ON o.object_id = m.object_id WHERE o.type = "TR" GO CREATE TRIGGER ON DATABASE FOR CREATE_PROCEDURE ,ALTER_PROCEDURE ,DROP_PROCEDURE ,CREATE_INDEX_INDEX_RE,ALTER_ TRIGGER ,DROP_TRIGGER ,ALTER _TABLE ,ALTER_VIEW ,CREATE_VIEW ,DROP_VIEW AS BEGIN SET NOCOUNT ON DECLARE @data XML SET @data = Eventdata() INSERT INTO sysupdatelog VALUES (@data.value("(/EVENT_INSTANCE/LoginName)", "nvarchar(255)") ,@data.value(" /EVENT_INSTANCE /EventType)", "nvarchar(255)") ,@data.value("(/EVENT_INSTANCE/ObjectName)", "nvarchar(255)") ,@data.value("(/EVENT_INSTANCE/ObjectType)" , " nvarchar(255)") ,getdate() ,@data.value("(/EVENT_INSTANCE/TSQLCommand/CommandText)", "nvarchar(max)")) SET NOCOUNT OFF END GO SET ANSI_NULLS OFF GO SET QUOTERFF_ID ΕΝΕΡΓΟΠΟΙΗΣΤΕ ΤΗΝ ΕΝΕΡΓΟΠΟΙΗΣΗ ON DATABASE GO

Σελίδα 8 από 8

Ενσωμάτωση με αυτόματο συντονισμό SQL

Κατά τη διάρκεια των παραθύρων τεχνολογίας, η Oracle Database 11g εκτελεί αυτόματα το SQL Tuning Advisor, μέρος του πακέτου Tuning and Diagnostic. Αυτή η εργασία αυτόματης ρύθμισης SQL στοχεύει δηλώσεις SQL που επιβαρύνουν το σύστημα. Αυτές οι δηλώσεις καθορίζονται από δεδομένα απόδοσης εκτέλεσης που συλλέγονται σε στιγμιότυπα Αυτόματης Αποθήκης Φορτίου Εργασίας (AWR). Εάν το SQL Tuning Advisor βρει το καλύτερο σχέδιο εκτέλεσης για μια πρόταση SQL, θα προτείνει ένα προφίλ SQL. Για ορισμένες από αυτές τις εντολές SQL υψηλού φορτίου, σχέδια αναφοράς SQL ενδέχεται να έχουν ήδη δημιουργηθεί. Εάν υλοποιηθεί η σύσταση προφίλ SQL που έγινε από την εργασία SQL Automatic Tuning, τότε το σχέδιο εκτέλεσης που βρέθηκε από τον SQL Tuning Advisor θα προστεθεί ως το αποδεκτό σχέδιο αναφοράς SQL.

Μπορείτε να καλέσετε το SQL Tuning Advisor μη αυτόματα. Για να γίνει αυτό, αρκεί να δημιουργήσετε ένα SQL Tuning Set για έναν δεδομένο τελεστή SQL. Εάν ο Σύμβουλος συντονισμού SQL προτείνει ένα προφίλ SQL για μια δήλωση και αυτό υλοποιείται με μη αυτόματο τρόπο, τότε αυτό το προφίλ θα προστεθεί ως το αποδεκτό σχέδιο για τα σχέδια εκτέλεσης δηλώσεων αναφοράς SQL, εάν υπάρχει.

ΣΥΜΠΕΡΑΣΜΑ

Μια νέα επιλογή στη βάση δεδομένων Oracle 11g που ονομάζεται SQL Plan Management (SPM) παρέχει ελεγχόμενη εξέλιξη των σχεδίων εκτέλεσης. Όταν χρησιμοποιείτε SPM, το βελτιστοποιητή διαχειρίζεται αυτόματα σχέδια εκτέλεσης και διασφαλίζει ότι χρησιμοποιούνται μόνο γνωστά ή δοκιμασμένα σχέδια. Όταν βρεθεί ένα νέο σχέδιο για μια δήλωση SQL, δεν θα χρησιμοποιηθεί μέχρι να αποδειχθεί ότι έχει απόδοση συγκρίσιμη ή καλύτερη από το τρέχον σχέδιο.



Συνιστούμε να διαβάσετε

Μπλουζα