ฉันจะตรวจสอบการตั้งค่าความปลอดภัยของ SQL Server Endpoint ได้อย่างไร


10

ฉันอยู่ในกระบวนการสร้างสภาพแวดล้อมการทดสอบสำหรับพนักงานพัฒนาเซิร์ฟเวอร์ SQL ของเรา

ในการผลิตเรามี SQL Server 3 ตัวSQL01มีฐานข้อมูลหลายตัวที่ทำมิเรอSQL02ร์ SQL03ทำหน้าที่เป็นพยานใน "ความปลอดภัยสูงพร้อมการล้มเหลวอัตโนมัติ" หรือการกำหนดค่าแบบซิงโครนัส

ฉันใช้ VMWare P2V เพื่อทำเวอร์ชวลไลเซชันทั้งสามเครื่องบนฮาร์ดแวร์แยกต่างหากกำหนดค่า SID ของเครื่องอีกครั้งและทำการซ่อนที่อยู่ IP ของเซิร์ฟเวอร์การผลิตของเราจากเครื่องใหม่เหล่านี้

ตอนแรกฉันลืมที่จะ blackhole เครื่องจักรพยานการผลิตดังนั้นฐานข้อมูลในเครื่องทดสอบยังคงใช้SQL03เครื่องเป็นพยาน TEST03สังเกตเห็นปัญหาที่ฉันตัดสินใจที่จะกำหนดค่าฐานข้อมูลในการทดสอบที่จะชี้ไปที่พยานทดสอบเสมือนจริงขึ้นใหม่เรียกว่า

ในการกำหนดค่าฐานข้อมูลใหม่เพื่อใช้พยานคนใหม่ฉันได้ป้อนคำสั่งต่อไปนี้บนเซิร์ฟเวอร์หลักTEST01:

ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';

การตอบสนองที่ไม่คาดคิด:

The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'.  The database mirroring configuration was
not changed.  Verify that the server is connected, and try again.

ฉันสับสนมากที่ข้อความแสดงข้อผิดพลาดนี้เนื่องจากการกำหนดค่าทำงานบนเครื่องที่ใช้งานจริงและยังไม่ได้รับการแก้ไข แต่อย่างใดในเครื่องทดสอบ

เพื่อให้ได้งานนี้ฉันต้องสร้างLOGINพยานทดสอบ:

CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];

และGRANTมันCONNECTสิทธิปลายทางในคำถาม:

GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];

จากนั้นฉันสามารถชี้ฐานข้อมูลที่มิร์เรอร์บนสภาพแวดล้อมการทดสอบไปยังพยานการทดสอบใหม่ได้สำเร็จ

ฉันจะตรวจสอบจุดสิ้นสุดการเป็นพยานการผลิตเพื่อดูว่าการรักษาความปลอดภัยเกี่ยวข้องกับอะไร?

ฉันคิดว่าต้องมีแคตตาล็อกระบบบางอย่างที่ฉันสามารถตรวจสอบได้ แต่ Books-on-Line ดูเหมือนจะไม่มีอะไรเฉพาะเจาะจงสำหรับ Endpoints และ Bing ก็ดี Bingless ...


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

SELECT ep.endpoint_id, p.class_desc, p.permission_name, ep.name, sp.name 
FROM sys.server_permissions p
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id
WHERE class = '105';

ผลตอบแทน:

endpoint_id class_desc  permission_name endpoint_name   principal_name
2           ENDPOINT    CONNECT TSQL    Local Machine   public
3           ENDPOINT    CONNECT TSQL    Named Pipes     public
4           ENDPOINT    CONNECT TSQL    Default TCP     public
5           ENDPOINT    CONNECT TSQL    Default VIA     public

และ:

SELECT name, endpoint_id, protocol_desc, type_desc, role_desc 
FROM sys.database_mirroring_endpoints;

ผลตอบแทน:

name        endpoint_id  protocol_desc  type_desc           role_desc 
Mirroring   65536        TCP            DATABASE_MIRRORING  WITNESS

ดูเหมือนจะไม่มีรายการsys.server_permissionsสำหรับวัตถุปลายทางของการทำมิเรอร์ ไม่major_idและไม่minor_idตรงกับ 65536 นอกจากนี้ยังไม่มีฐานข้อมูลระบบใด ๆ ที่มีการอ้างอิงถึงปลายทาง

ฉันกำลังสูญเสีย

คำตอบ:


7

หลังจากใช้เวลาส่วนหนึ่งในการจัดการฐานข้อมูลที่ย้ายมิเรอร์จากเซิร์ฟเวอร์หนึ่งไปอีกเซิร์ฟเวอร์หนึ่งในสภาพแวดล้อม DEV ของเราเพื่อเตรียมพร้อมสำหรับการย้ายไปยัง SQL Server 2012 ฉันพบเอกสาร MSDN นี้ซึ่งอธิบายว่าความปลอดภัย ENDPOINT พิจารณาจากประเภทบัญชี SQL Server ทำงานภายใต้ หาก SQL Server ใช้บัญชีโดเมนแสดงว่าบัญชีนั้นมีสิทธิ์เข้าถึงปลายทางโดยอัตโนมัติ หาก SQL Server ใช้บัญชีในตัวเช่น [บริการเครือข่าย] หรือ [ระบบภายในเครื่อง] ฯลฯ ดังนั้นจุดปลายทางจะต้องกำหนดค่าด้วยใบรับรองความปลอดภัยและผู้ถือใบรับรองเท่านั้นที่สามารถเข้าถึงจุดปลายได้

ส่วนที่เกี่ยวข้องจากเอกสาร:

การกำหนดประเภทการรับรองความถูกต้องสำหรับปลายทางการมิเรอร์ฐานข้อมูล

สิ่งสำคัญคือต้องเข้าใจว่าบัญชีบริการ SQL Server ของเซิร์ฟเวอร์อินสแตนซ์ของคุณกำหนดชนิดของการรับรองความถูกต้องที่คุณสามารถใช้สำหรับปลายทางการมิเรอร์ฐานข้อมูลของคุณดังนี้:

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

ถ้าอินสแตนซ์ของเซิร์ฟเวอร์ใด ๆ ที่กำลังโฮสต์แบบจำลองความพร้อมใช้งานสำหรับกลุ่มความพร้อมใช้งานเรียกใช้เป็นบัญชีที่แตกต่างกันการเข้าสู่ระบบแต่ละบัญชีจะต้องสร้างขึ้นในต้นแบบในอินสแตนซ์ของเซิร์ฟเวอร์อื่น จากนั้นเข้าสู่ระบบนั้นจะต้องได้รับการอนุญาตการเชื่อมต่อเพื่อเชื่อมต่อกับปลายทางการมิเรอร์ฐานข้อมูลของอินสแตนซ์ของเซิร์ฟเวอร์นั้น

หากอินสแตนซ์เซิร์ฟเวอร์ของคุณใช้การรับรองความถูกต้องของ Windows คุณสามารถสร้างปลายทางการมิเรอร์ฐานข้อมูลโดยใช้ Transact-SQL, PowerShell หรือตัวช่วยสร้างกลุ่มความพร้อมใช้งานใหม่

บันทึก:

ถ้าอินสแตนซ์เซิร์ฟเวอร์ที่ใช้โฮสต์การจำลองความพร้อมใช้งานไม่มีจุดสิ้นสุดการมิเรอร์ฐานข้อมูลตัวช่วยสร้างกลุ่มความพร้อมใช้งานใหม่สามารถสร้างปลายทางการมิเรอร์ฐานข้อมูลที่ใช้การรับรองความถูกต้องของ Windows โดยอัตโนมัติ

หากอินสแตนซ์ของเซิร์ฟเวอร์ใด ๆ ที่ทำงานภายใต้บัญชีในตัวเช่น Local System, Local Service หรือ Network Service หรือบัญชี nondomain คุณต้องใช้ใบรับรองสำหรับการตรวจสอบสิทธิ์ปลายทาง หากคุณกำลังใช้ใบรับรองสำหรับปลายทางการมิเรอร์ฐานข้อมูลของคุณผู้ดูแลระบบของคุณต้องกำหนดค่าแต่ละอินสแตนซ์เซิร์ฟเวอร์ให้ใช้ใบรับรองทั้งการเชื่อมต่อขาออกและขาเข้า

ไม่มีวิธีอัตโนมัติสำหรับการกำหนดค่าความปลอดภัยฐานข้อมูลการมิเรอร์โดยใช้ใบรับรอง คุณจะต้องใช้คำสั่ง CREATE ENDPOINT Transact-SQL หรือ New-SqlHadrEndpoint PowerShell cmdlet สำหรับข้อมูลเพิ่มเติมดูสร้าง ENDPOINT (Transact-SQL)

Remus Rusanu (ในคำตอบของเขา) ระบุวิธีการตรวจสอบความปลอดภัยอย่างถูกต้องในจุดสิ้นสุดการมิเรอร์ ในขณะที่:

SELECT ep.name, sp2.name AS Grantee, sp.name AS Grantor, p.permission_name, ep.state_desc
FROM sys.server_permissions p 
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantor_principal_id = sp.principal_id
    INNER JOIN sys.server_principals sp2 ON p.grantee_principal_id = sp2.principal_id
WHERE p.class_desc = 'ENDPOINT' AND ep.type_desc = 'DATABASE_MIRRORING'

อย่างไรก็ตามในกรณีของฉันใน SQL Server 2005 จุดสิ้นสุดการมิเรอร์ดั้งเดิมไม่ปรากฏในผลลัพธ์ของแบบสอบถามนี้ - ฉันถือว่านี่เป็นเพราะความปลอดภัยเริ่มต้นช่วยให้การเชื่อมต่อการเข้าถึงบัญชี SQL Server ทำงานภายใต้ (ตามที่อธิบายไว้ข้างต้น)

ดังนั้นคำตอบที่ยอมรับได้สำหรับคำถามคุณจะรู้ได้อย่างไรว่าใครมีการเชื่อมต่อกับ ENDPOINT คือผลรวมของการค้นหาข้างต้นและบัญชี SQL Server กำลังใช้งานพร้อมกับใบรับรองที่เป็นไปได้ที่คุณกำหนดค่าด้วยการเข้าถึงจุดสิ้นสุด .


4

ฉันเพิ่งตั้งค่าฐานข้อมูลในการผลิตและสงสัยว่าสิ่งเดียวกันทำให้ฉันต้องเปรียบเทียบการกำหนดค่ากับเซสชันการมิรเรอร์อื่นเพื่อให้แน่ใจว่าฉันจับคู่ถูกต้อง

sys.dm_db_mirroring_connectionsควรให้สิ่งที่คุณต้องการ มันมีprincipal_nameที่:

ชื่อของล็อกอินที่ตรวจสอบความถูกต้องสำหรับการอนุญาตการเชื่อมต่อ สำหรับการพิสูจน์ตัวจริงของ Windows ค่านี้เป็นชื่อผู้ใช้ระยะไกล สำหรับการตรวจสอบใบรับรองค่านี้เป็นเจ้าของใบรับรอง

หากคุณกำลังทำงานกับเซสชันที่หยุดชั่วคราวแม้ว่าฉันไม่แน่ใจว่านี่จะยังส่งคืนข้อมูลให้เชื่อว่ามีเพียงการเชื่อมต่อที่ใช้งานอยู่


ขอบคุณฌอน นั่นแสดงชื่อผู้ใช้ระยะไกลที่เชื่อมต่อกับปลายทางจริง ๆ แต่ไม่ได้ตอบคำถามเกี่ยวกับการตั้งค่าความปลอดภัยที่อนุญาตให้ผู้ใช้นั้นเชื่อมต่อในการผลิต แต่ไม่ใช่ในการทดสอบ ฉันขอขอบคุณความช่วยเหลือต่อไป!
Max Vernon

3

ดูเอกสารประกอบหนังสือออนไลน์สำหรับ sys.database_mirroring_endpoints

sys.server_permissionsสำหรับสิทธิ์วัตถุเซิร์ฟเวอร์คุณมองไปที่สถานที่ตามปกติ เช่นเดียวกับทุกกรณีเมื่อความปลอดภัยของ Windows เกี่ยวข้องกับสิ่งต่าง ๆ ที่ซับซ้อนมากขึ้นเนื่องจากการเป็นสมาชิกกลุ่ม windows และคุณต้องพิจารณาลำดับชั้นสิทธิ์ด้วย


ฉันดูที่อย่างไรก็ตามสิ่งที่ฉันต้องการคือรายการของการเข้าสู่ระบบที่มีการเชื่อมต่อการเข้าถึงปลายทาง sys.database_mirroring_endpoints ไม่ปรากฏเพื่อแสดงว่า - ยกเว้นว่าฉันทำอะไรหายไป!
Max Vernon

1
sys.server_permissionsสำหรับสิทธิ์วัตถุเซิร์ฟเวอร์คุณมองไปที่สถานที่ตามปกติ เช่นเดียวกับทุกกรณีเมื่อความปลอดภัยของ Windows เกี่ยวข้องกับสิ่งต่าง ๆ ที่ซับซ้อนมากขึ้นเนื่องจากการเป็นสมาชิกกลุ่ม windows และคุณต้องพิจารณาลำดับชั้นสิทธิ์ด้วย
Remus Rusanu

3
โอกาสใดที่คุณสามารถอธิบายรายละเอียดเล็กน้อยในคำตอบนั้น
jcolebrand
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.