วิธีการเปิดใช้งานบัญชีผู้ใช้ที่ไม่ใช่ sysadmin เพื่อดำเนินการกระบวนงานที่เก็บไว้ "xp_cmdshell" ขยายใน SQL Server ๒๐๐๐


สรุป


บทความนี้จะอธิบายวิธีการกำหนดค่าบัญชีผู้ใช้พร็อกซี Microsoft Windows Server Agent ที่จะใช้โดยการเข้าสู่ระบบ SQL ที่ไม่ใช่สมาชิกของบทบาทเซิร์ฟเวอร์แบบคงที่ของsysadmin นอกจากนี้บทความประกอบด้วยการอ้างอิงไปยังข้อมูลเพิ่มเติมเพื่อช่วยให้คุณแก้ไขปัญหาที่อาจเกิดขึ้นเมื่อคุณพยายามตั้งค่าบัญชีผู้ใช้พร็อกซี

ข้อความนำ


Xp_cmdshellขยายกระบวนงานที่เก็บไว้เรียกคำสั่ง Windows shell จากภายใน Microsoft SQL Server ๒๐๐๐ เมื่อมีการดำเนินการกระบวนงานที่เก็บไว้ของ xp_cmdshell เพิ่มเติมโดยสมาชิกของบทบาทเซิร์ฟเวอร์ sysadmin ของ Sysadmin กระบวนการ Windows ของคำสั่ง shell จะทำงานกับบริบทการรักษาความปลอดภัยของบัญชีผู้ใช้ Windows service ของ SQL server ตัวอย่างเช่นถ้า SQL Server กำลังทำงานภายใต้การเข้าสู่ระบบ Windows ที่มีสิทธิ์ระดับผู้ดูแลระบบบนคอมพิวเตอร์ผู้ใช้ที่เปิดพร้อมท์คำสั่งด้วยกระบวนงานที่เก็บไว้ของ xp_cmdshell ขยายจะได้รับสิทธิ์การเข้าถึง Windows ในฐานะผู้ดูแลระบบภายในเครื่อง ตามค่าเริ่มต้นสิทธิ์ในการเรียกใช้กระบวนงานที่เก็บไว้ของ xp_cmdshell ขยายจะได้รับอนุญาตเฉพาะสมาชิกของบทบาทเซิร์ฟเวอร์ที่เป็น sysadmin แบบคงที่เท่านั้น สิทธิ์นี้จะช่วยให้การเลื่อนระดับสิทธิ์ เมื่อคุณต้องการเริ่มกระบวนการใหม่ของ Windows ด้วยสิทธิ์ที่ลดลงคุณสามารถใช้บัญชีพร็อกซีของบริษัทตัวแทนของเซิร์ฟเวอร์ SQL เพื่อกำหนดค่าบัญชีผู้ใช้ Windows ที่มีสิทธิ์ในระดับที่เหมาะสมได้

ข้อมูลเพิ่มเติม


เมื่อคุณพยายามดำเนินการ xp_cmdshell ขยายกระบวนงานที่เก็บไว้จากการเข้าสู่ระบบ SQL server ที่ไม่ใช่สมาชิกของบทบาทเซิร์ฟเวอร์ sysadmin และบัญชีผู้ใช้พร็อกซีของบริษัทตัวแทนการเซิร์ฟเวอร์ SQL ยังไม่ได้รับการตั้งค่าอย่างถูกต้องคุณอาจได้รับข้อความแสดงข้อผิดพลาดที่คล้ายกับข้อความต่อไปนี้:
Msg ๕๐๐๐๑ระดับ1รัฐ๕๐๐๐๑ xpsql: ข้อผิดพลาด๙๙๗จาก GetProxyAccount บนบรรทัด๔๙๙
Msg ๕๐๐๐๑ระดับ1รัฐ๕๐๐๐๑ xpsql: ข้อผิดพลาด๓๑๗จาก GetProxyAccount บนบรรทัด๔๙๙
Msg ๕๐๐๐๑ระดับ1รัฐ๕๐๐๐๑ xpsql: ข้อผิดพลาด0จาก GetProxyAccount บนบรรทัด๔๙๙
Msg ๕๐๐๐๑ระดับ1รัฐ๕๐๐๐๑ xpsql: ข้อผิดพลาด๘๗จาก GetProxyAccount บนบรรทัด๔๙๙
ถ้าคุณต้องการอนุญาตให้ผู้ใช้ที่ไม่ใช่ sysadmin เรียกใช้กระบวนงานที่เก็บไว้ของ xp_cmdshell ขยายใน SQL Server ๒๐๐๐คุณจะต้องกำหนดค่าบัญชีผู้ใช้พร็อกซีและบัญชีผู้ใช้เริ่มต้นของ sql server เพื่อเป็นสมาชิกของกลุ่มผู้ดูแลระบบภายใน เมื่อ SQL Server ดำเนินการงานหรือคำสั่งสำหรับผู้ใช้ที่ไม่ใช่สมาชิกของบทบาทเซิร์ฟเวอร์ของ sysadmin ถาวรบริษัทตัวแทนการเซิร์ฟเวอร์ SQL และกระบวนงานที่เก็บไว้ xp_cmdshell ขยายจะใช้บัญชีผู้ใช้พร็อกซี ข้อมูลประจำตัวด้านความปลอดภัยของ Windows สำหรับบัญชีพร็อกซีจะถูกเก็บไว้ในฐานข้อมูลความลับของหน่วยงานด้านความปลอดภัยภายในเครื่อง (LSA) เฉพาะผู้ดูแลระบบ Windows เท่านั้นที่สามารถเข้าถึงข้อมูลนี้ได้ ถ้าบัญชีผู้ใช้เริ่มต้นของ SQL Server ไม่ใช่สมาชิกของกลุ่มผู้ดูแลระบบภายในผู้ใช้ไม่สามารถจัดเก็บหรือเรียกใช้ข้อมูลประจำตัวด้านความปลอดภัยของ Windows เพื่อเข้าสู่ระบบบัญชีผู้ใช้พร็อกซีและกระบวนงานที่เก็บไว้ของ xp_cmdshell ขยายล้มเหลว เมื่อต้องการเปิดใช้งานผู้ใช้ที่ไม่ใช่ sysadmin เพื่อเรียกใช้กระบวนงานที่เก็บไว้ xp_cmdshell ขยายบัญชีผู้ใช้เริ่มต้นระบบ SQL Server จะต้องเป็นสมาชิกของกลุ่มผู้ดูแลระบบภายใน เมื่อต้องการกำหนดค่าบัญชีผู้ใช้พร็อกซีสำหรับการเข้าสู่ระบบ SQL Server ที่ไม่ใช่สมาชิกของบทบาทเซิร์ฟเวอร์ sysadmin แบบถาวรให้ใช้วิธีการใดวิธีการหนึ่งต่อไปนี้

วิธีที่ 1: ใช้ตัวจัดการองค์กรของ SQL Server

กำหนดค่าบัญชีผู้ใช้ Windows

เมื่อต้องการตั้งค่าบัญชีผู้ใช้ Windows เพื่อเปิดใช้งานผู้ใช้ที่ไม่ใช่ sysadmin เพื่อดำเนินการกระบวนงานที่เก็บไว้ของ xp_cmdshell ขยายให้ทำตามขั้นตอนต่อไปนี้:
  1. เริ่มตัวจัดการองค์กรของ SQL Server
  2. ใน SQL Server Enterprise Manager ขยายMICROSOFT SQL serverแล้วขยายกลุ่ม SQL server
  3. ขยายอินสแตนซ์ของ SQL Server ที่คุณต้องการตั้งค่าบัญชีผู้ใช้พร็อกซี
  4. ขยายการจัดการคลิกขวาที่บริษัทตัวแทนการเซิร์ฟเวอร์ SQLแล้วคลิกคุณสมบัติ
  5. ในกล่องโต้ตอบคุณสมบัติของบริษัทตัวแทนของ SQL Serverให้คลิกแท็บระบบงาน
  6. ภายใต้บัญชีผู้ใช้พร็อกซีขั้นตอนของงานที่ไม่ใช่ SysAdminให้คลิกเพื่อล้างกล่องกาเครื่องหมายเฉพาะผู้ใช้ที่มี SysAdmin priviledges สามารถดำเนินการ CmdExec และ ActiveScripting ขั้นตอนของงาน
  7. ในกล่องโต้ตอบบัญชีพร็อกซีของบริษัทตัวแทนการเซิร์ฟเวอร์ SQLให้พิมพ์ชื่อบัญชีผู้ใช้ Windows ในกล่องชื่อผู้ใช้
  8. ในกล่อง รหัสผ่าน ให้พิมพ์รหัสผ่านของ Windows
  9. ในกล่อง โดเมน ให้พิมพ์โดเมนที่บัญชีผู้ใช้ Windows เป็นสมาชิกแล้วคลิก ตกลง สองครั้ง

เพิ่มบัญชีผู้ใช้เข้าสู่ระบบ SQL Server

เมื่อต้องการเพิ่มบัญชีผู้ใช้การเข้าสู่ระบบ SQL Server ที่คุณต้องการให้สิทธิ์ในการดำเนินการกระบวนงานที่เก็บไว้ xp_cmdshell ขยายให้ทำตามขั้นตอนต่อไปนี้:
  1. ใน SQL Server Enterpise Manager ให้ขยายความปลอดภัย
  2. ในบานหน้าต่างล็อกอินให้คลิกขวาที่บัญชีผู้ใช้การเข้าสู่ระบบ SQL Server ที่คุณต้องการให้สิทธิ์จากนั้นคลิกคุณสมบัติหมายเหตุ ถ้ายังไม่ได้เพิ่มบัญชีผู้ใช้คุณสามารถสร้างบัญชีพร็อกซี Windows เป็นบัญชีผู้ใช้การเข้าสู่ระบบได้
  3. ในกล่องโต้ตอบคุณสมบัติการเข้าสู่ระบบ SQL Serverให้คลิกแท็บการเข้าถึงฐานข้อมูล
  4. ในการระบุฐานข้อมูลที่สามารถเข้าถึงได้โดยรายการการเข้าสู่ระบบนี้ให้คลิกเพื่อเลือกกล่องกาเครื่องหมายอนุญาตสำหรับฐานข้อมูลหลักแล้วคลิกตกลง
  5. ขยายฐานข้อมูลขยายต้นแบบแล้วคลิกขยายกระบวนงานที่เก็บไว้
  6. ค้นหาแล้วคลิกขวาที่xp_cmdshellขยายกระบวนงานที่เก็บไว้แล้วคลิกคุณสมบัติ
  7. ในกล่องโต้ตอบคุณสมบัติของกระบวนงานที่เก็บไว้แบบขยายให้คลิกสิทธิ์
  8. คลิกเพื่อเลือกกล่องกาเครื่องหมาย EXEC สำหรับบัญชีการเข้าสู่ระบบ SQL Server ที่คุณต้องการให้สิทธิ์ในการดำเนินการจากนั้นคลิก ตกลง สองครั้ง

วิธีที่ 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 คุณต้องตั้งค่าบัญชีผู้ใช้ Windows ระดับ "เข้าสู่ระบบเป็นชุดงาน" ที่ด้านขวาของผู้ใช้

อ้างอิง


สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกระบวนงานที่เก็บไว้ของ xp_cmdshell เพิ่มเติมให้ดูที่หัวข้อ "การอ้างอิง Transact SQL" ใน SQL Server Books Online สำหรับข้อมูลเพิ่มเติมเกี่ยวกับบัญชีผู้ใช้พร็อกซีของบริษัทตัวแทนการเซิร์ฟเวอร์ SQL แวะไปที่เว็บไซต์ของ Microsoft สำหรับนักพัฒนาเครือข่าย (MSDN) ต่อไปนี้:สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการตั้งค่าสิทธิ์ที่เหมาะสมบนบัญชีผู้ใช้พร็อกซีให้คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:
๒๘๓๘๑๑ วิธีการเปลี่ยนบัญชีผู้ใช้ sql Server หรือ sql server Agent service โดยไม่ใช้ตัวจัดการองค์กร SQL ใน SQL Server ๒๐๐๐หรือตัวจัดการการกำหนดค่า SQL Server ใน SQL Server ๒๐๐๕