Πώς μπορείτε να ενεργοποιήσετε τους λογαριασμούς που δεν είναι διαχειριστές για την εκτέλεση της εκτεταμένης αποθηκευμένης διαδικασίας "xp_cmdshell" στον SQL Server 2000


Σύνοψη


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

ΕΙΣΑΓΩΓΗ


Η xp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία ενεργοποιεί ένα κέλυφος εντολών των Windows μέσα από τον Microsoft SQL Server 2000. Όταν η xp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία εκτελεστεί από ένα μέλος του ρόλου του σταθερού διακομιστή διαχειριστής , η διαδικασία των Windows του κελύφους εντολών εκτελείται με το περιβάλλον ασφαλείας του λογαριασμού υπηρεσίας Windows του SQL Server. Για παράδειγμα, εάν ο SQL Server εκτελείται σε μια σύνδεση των Windows που έχει δικαιώματα διαχειριστή στον υπολογιστή, ο χρήστης που ανοίγει μια γραμμή εντολών με την xp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία θα λάβει πρόσβαση στα Windows ως τοπικός διαχειριστής. Από προεπιλογή, το δικαίωμα εκτέλεσης της xp_cmdshell εκτεταμένης αποθηκευμένης διαδικασίας εκχωρείται μόνο σε μέλη του ρόλου του σταθερού διακομιστή " διαχειριστής ". Αυτό το δικαίωμα βοηθά στην αποτροπή της κλιμάκωσης των δικαιωμάτων. Όταν θέλετε να ξεκινήσετε νέες διεργασίες των Windows με μειωμένο επίπεδο δικαιωμάτων, μπορείτε να χρησιμοποιήσετε το λογαριασμό διακομιστή μεσολάβησης του SQL Server Agent για να ρυθμίσετε τις παραμέτρους ενός λογαριασμού των Windows με το κατάλληλο επίπεδο δικαιωμάτων.

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


Όταν προσπαθείτε να εκτελέσετε την xp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία από μια σύνδεση SQL Server που δεν είναι μέλος του ρόλου διακομιστή διαχειριστής και ο λογαριασμός διακομιστή μεσολάβησης του SQL Server Agent δεν έχει ρυθμιστεί σωστά, ενδέχεται να λάβετε μηνύματα σφάλματος παρόμοια με τα εξής:
MSG 50001, επίπεδο 1, κατάσταση 50001 xpsql. cpp: σφάλμα 997 από το GetProxyAccount στη line 499
MSG 50001, επίπεδο 1, κατάσταση 50001 xpsql. cpp: σφάλμα 317 από το GetProxyAccount στη line 499
MSG 50001, επίπεδο 1, κατάσταση 50001 xpsql. cpp: σφάλμα 0 από το GetProxyAccount στη θέση 499
MSG 50001, επίπεδο 1, κατάσταση 50001 xpsql. cpp: σφάλμα 87 από το GetProxyAccount στη line 499
Εάν πρέπει να επιτρέψετε στους χρήστες μη διαχειριστή να εκτελέσουν την xp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία στον SQL Server 2000, πρέπει να ρυθμίσετε τις παραμέτρους του λογαριασμού διακομιστή μεσολάβησης και του λογαριασμού ΕΚΚΊΝΗΣΗς του SQL Server ώστε να είναι μέλος της τοπικής ομάδας διαχειριστών. Όταν ο SQL Server εκτελεί εργασίες ή εντολές για χρήστες που δεν είναι μέλη του ρόλου του σταθερού διακομιστή του φορέα, ο παράγοντας SQL Server και η xp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία χρησιμοποιούν το λογαριασμό διακομιστή μεσολάβησης. Τα διαπιστευτήρια ασφαλείας των Windows για το λογαριασμό διακομιστή μεσολάβησης αποθηκεύονται στη βάση δεδομένων των μυστικών αρχών ασφαλείας (LSA). Μόνο οι διαχειριστές των Windows μπορούν να έχουν πρόσβαση σε αυτές τις πληροφορίες. Επομένως, εάν ο λογαριασμός εκκίνησης του SQL Server δεν είναι μέλος της τοπικής ομάδας διαχειριστών, ο χρήστης δεν μπορεί να αποθηκεύσει ή να ανακτήσει τα διαπιστευτήρια ασφαλείας των Windows για να συνδεθεί ως λογαριασμός διακομιστή μεσολάβησης και η xp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία αποτυγχάνει. Για να ενεργοποιήσετε τους χρήστες που δεν είναι διαχειριστές να εκτελέσουν την xp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία, ο λογαριασμός ΕΚΚΊΝΗΣΗς του SQL Server πρέπει να είναι μέλος της τοπικής ομάδας διαχειριστών. Για να ρυθμίσετε τις παραμέτρους ενός λογαριασμού διακομιστή μεσολάβησης για συνδέσεις SQL Server που δεν είναι μέλη του ρόλου σταθερού διακομιστή του διαχειριστής , χρησιμοποιήστε μία από τις ακόλουθες μεθόδους.

Μέθοδος 1: χρήση του SQL Server Enterprise Manager

Ρύθμιση παραμέτρων του λογαριασμού των Windows

Για να καθορίσετε το λογαριασμό των Windows για να ενεργοποιήσετε τους χρήστες που δεν είναι διαχειριστές να εκτελέσουν την xp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία, ακολουθήστε τα παρακάτω βήματα:
  1. Ξεκινήστε το SQL Server Enterprise Manager.
  2. Στον SQL Server Enterprise Manager, αναπτύξτε το στοιχείο Microsoft SQL Serverκαι, στη συνέχεια, αναπτύξτε το στοιχείο SQL Server Group.
  3. Αναπτύξτε την παρουσία του SQL Server για τον οποίο θέλετε να ρυθμίσετε το λογαριασμό του διακομιστή μεσολάβησης.
  4. Αναπτύξτε τη Διαχείριση, κάντε δεξί κλικ στην επιλογή παράγοντας SQL Serverκαι, στη συνέχεια, κάντε κλικ στην επιλογή Ιδιότητες.
  5. Στο παράθυρο διαλόγου ιδιότητες του παράγοντα διακομιστή SQL , κάντε κλικ στην καρτέλα σύστημα εργασίας .
  6. Στην περιοχή λογαριασμός διακομιστή μεσολάβησης βήματος μη-διαχειριστής, κάντε κλικ για να καταργήσετε την επιλογή του πλαισίου ελέγχου μόνο οι χρήστες με προνόμια μπορούν να εκτελέσουν το CmdExec και το ActiveScripting για τα βήματα εργασίας .
  7. Στο παράθυρο διαλόγου λογαριασμός διακομιστή μεσολάβησης του SQL Server Agent, πληκτρολογήστε το όνομα του λογαριασμού των Windows στο πλαίσιο όνομα χρήστη.
  8. Στο πλαίσιο Κωδικός πρόσβασης , πληκτρολογήστε τον κωδικό πρόσβασης των Windows.
  9. Στο πλαίσιο Domain , πληκτρολογήστε τον τομέα στον οποίο είναι μέλος ο λογαριασμός των Windows και, στη συνέχεια, κάντε κλικ στο κουμπί OK δύο φορές.

Προσθήκη λογαριασμού σύνδεσης SQL Server

Για να προσθέσετε ένα λογαριασμό σύνδεσης SQL Server στον οποίο θέλετε να εκχωρήσετε δικαιώματα για την εκτέλεση της xp_cmdshell εκτεταμένης αποθηκευμένης διαδικασίας, ακολουθήστε τα παρακάτω βήματα:
  1. Στο SQL Server Enterpise Manager, αναπτύξτε το στοιχείοασφάλεια.
  2. Στο παράθυρο συνδέσεις , κάντε δεξί κλικ στο λογαριασμό ΣΎΝΔΕΣΗς του SQL Server στον οποίο θέλετε να εκχωρήσετε δικαιώματα και, στη συνέχεια, κάντε κλικ στην επιλογήΙδιότητες.Σημείωση Εάν ο λογαριασμός δεν έχει ήδη προστεθεί, μπορείτε να δημιουργήσετε ένα λογαριασμό διακομιστή μεσολάβησης των Windows ως λογαριασμό σύνδεσης.
  3. Στο παράθυρο διαλόγου Ιδιότητες σύνδεσης SQL Server , κάντε κλικ στην καρτέλα πρόσβαση βάσης δεδομένων .
  4. Στη λίστα Καθορισμός της βάσης δεδομένων στην οποία είναι δυνατή η πρόσβαση από αυτήν τη λίστα σύνδεσης, κάντε κλικ για να επιλέξετε το πλαίσιο ελέγχου άδεια για την κύρια βάση δεδομένων και, στη συνέχεια, κάντε κλικ στο κουμπί OK.
  5. Αναπτύξτε το στοιχείο βάσεις δεδομένων, αναπτύξτε το στοιχείοκύριακαι, στη συνέχεια, επιλέξτε επέκταση αποθηκευμένων διαδικασιών.
  6. Εντοπίστε και, στη συνέχεια, κάντε δεξί κλικ στηνxp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία και, στη συνέχεια, κάντε κλικ στην επιλογήΙδιότητες.
  7. Στο παράθυρο διαλόγου Ιδιότητες εκτεταμένης αποθηκευμένης διαδικασίας , κάντε κλικ στην επιλογή δικαιώματα.
  8. Κάντε κλικ για να επιλέξετε το πλαίσιο ελέγχου exec για το λογαριασμό σύνδεσης SQL Server στον οποίο θέλετε να εκχωρήσετε δικαιώματα εκτέλεσης και, στη συνέχεια, κάντε κλικ στο κουμπί OK δύο φορές.

Μέθοδος 2: εκτέλεση δέσμης ενεργειών Transact-SQL

Εκτελέστε την ακόλουθη δέσμη ενεργειών Transact-SQL για να ενεργοποιήσετε το λογαριασμό των Windows για να εκτελέσετε την xp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία:
-- Set database to master.USE masterGO-- Add a valid Windows account as proxy account.EXECUTE xp_sqlagent_proxy_account N'SET'                        , N'<DomainName>'                        , N'<WindowsAccount>'                        , N'<WindowsPassword>'GO-- Get the proxy account to determine whether it is set up correctly. EXECUTE xp_sqlagent_proxy_account N'GET'GO-- Enable non-system administrators to run the job and to execute xp_cmdshell.EXECUTE msdb..sp_set_sqlagent_properties @sysadmin_only = 0GO
Σημείωση Σε αυτήν τη δέσμη ενεργειών, <DomainName> είναι ο τομέας στον οποίο είναι μέλος ο λογαριασμός των Windows. <WindowsAccount> είναι το όνομα του λογαριασμού των Windows. <WindowsPassword> είναι ο κωδικός πρόσβασης για το λογαριασμό των Windows. Για να προσθέσετε το λογαριασμό σύνδεσης SQL Server στον οποίο θέλετε να εκχωρήσετε δικαιώματα εκτέλεσης της xp_cmdshell εκτεταμένης αποθηκευμένης διαδικασίας, εκτελέστε την ακόλουθη δέσμη ενεργειών Transact-SQL:
USE masterGO-- Grant database access to the SQL Server login account that you want to provide access.EXEC sp_grantdbaccess '<SQLLogin>'GO-- Grant execute permission on xp_cmdshell to the SQL Server login account.GRANT exec ON xp_cmdshell TO <SQLLogin>GO
Σημείωση Σε αυτήν τη δέσμη ενεργειών, <SQLLogin> είναι η σύνδεση SQL Server στην οποία θέλετε να εκχωρήσετε δικαιώματα εκτέλεσης της xp_cmdshell εκτεταμένης αποθηκευμένης διαδικασίας.Σημείωση Ο λογαριασμός διακομιστή μεσολάβησης είναι ο λογαριασμός των Windows στο περιβάλλον ασφαλείας του οποίου εκτελούνται οι εργασίες του παράγοντα διακομιστή SQL ή οι εντολές γραμμής εντολών. Όταν ρυθμίζετε το λογαριασμό των Windows για το λογαριασμό διακομιστή μεσολάβησης του SQL Server Agent, πρέπει να εκχωρήσετε στο λογαριασμό το δικαίωμα χρήστη "σύνδεση με το επίπεδο των Windows" ως εργασία δέσμης.

Αναφορές


Για περισσότερες πληροφορίες σχετικά με την xp_cmdshell εκτεταμένη αποθηκευμένη διαδικασία, ανατρέξτε στο θέμα "αναφορά Transact-SQL" στον SQL Server Books Online. Για περισσότερες πληροφορίες σχετικά με το λογαριασμό διακομιστή μεσολάβησης του SQL Server Agent, επισκεφθείτε τις ακόλουθες τοποθεσίες Web του Microsoft Developer Network (MSDN):Για περισσότερες πληροφορίες σχετικά με τον τρόπο με τον οποίο μπορείτε να καθορίσετε τα κατάλληλα δικαιώματα στο λογαριασμό διακομιστή μεσολάβησης, κάντε κλικ στον αριθμό του άρθρου παρακάτω για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
283811 Πώς μπορείτε να αλλάξετε τον SQL Server ή το λογαριασμό υπηρεσίας παράγοντα διακομιστή SQL χωρίς να χρησιμοποιήσετε το SQL Enterprise Manager στον SQL Server 2000 ή το SQL Server Configuration Manager στον SQL Server 2005