ในการค้นหาข้อมูลภายในของ FILESTREAM


14

เมื่อฟีเจอร์ FILESTREAM เปิดใช้งานบน Microsoft SQL Server 2012 SQL Server จะสร้างการแชร์ "ที่ซ่อนอยู่" บนระบบ การแบ่งปันถูกกำหนดดังนี้:

Sharename          FILESTREAM_SHARE
Path               \\?\GLOBALROOT\Device\RsFx0320\<localmachine>\FILESTREAM_SHARE
Remark             SQL Server FILESTREAM share
Maximum users      unlimited
Users Caching      Manual caching of documents 
Permissions        NT-AUTHORITY\Authenticated Users, FULL

ชื่อที่เป็นชื่อของหุ้นที่คุณให้เมื่อเริ่มแรกการกำหนดค่า FILESTREAM ในการกำหนดค่าเซิร์ฟเวอร์ SQL ผู้จัดการ แต่มันมีไว้เพื่ออะไร?

จนถึงตอนนี้

ฉันอ่านเอกสาร FILESTREAM ทั้งหมดที่มีอยู่เริ่มต้นที่:

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

ฐานข้อมูลที่เปิดใช้งาน FILESTREAM

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

หน้าจอสคริปต์ฐานข้อมูลที่เปิดใช้งาน FILESTREAM

สคริปต์เพื่อสร้างฐานข้อมูลที่เปิดใช้งาน FILESTREAM ใช่ฉันรู้ว่าเส้นทางทั้งหมดอยู่ใน C :; มันเป็นเพียงตัวอย่าง

กระดาษสีขาวโดย Paul Randall และคณะ อธิบายต่อไปว่า ...

ข้อมูล FILESTREAM ถูกเก็บไว้ในระบบไฟล์ในชุดของไดเรกทอรี NTFS เรียกว่า data container ซึ่งสอดคล้องกับกลุ่มไฟล์พิเศษในฐานข้อมูล การเข้าถึงการทำธุรกรรมข้อมูล FILESTREAM ถูกควบคุมโดย SQL Server และไดรเวอร์ฟิลเตอร์ระบบไฟล์ที่ติดตั้งเป็นส่วนหนึ่งของการเปิดใช้งาน FILESTREAM ที่ระดับ Windows การใช้ฟิลเตอร์ไดรเวอร์ระบบไฟล์ยังอนุญาตให้เข้าถึงข้อมูล FILESTREAM จากระยะไกลผ่านเส้นทาง UNC SQL Server รักษาลิงค์ของเรียงลำดับจากแถวตารางไปยังไฟล์ FILESTREAM ที่เกี่ยวข้อง ซึ่งหมายความว่าการลบหรือเปลี่ยนชื่อไฟล์ FILESTREAM โดยตรงผ่านระบบไฟล์จะส่งผลให้ฐานข้อมูลเสียหาย

... เพิ่มเติมเอกสาร (หน้า 14) ที่พวกเขาดำเนินการกับ ...

มีไดรเวอร์ตัวกรองระบบไฟล์ FILESTREAM เดียวสำหรับแต่ละวอลุ่ม NTFS ที่มีที่เก็บข้อมูล FILESTREAM และยังมีอีกหนึ่งตัวสำหรับ SQL Server แต่ละเวอร์ชันที่มีที่เก็บข้อมูล FILESTREAM บนไดรฟ์ข้อมูล ไดรเวอร์ฟิลเตอร์แต่ละตัวมีหน้าที่ในการจัดการคอนเทนเนอร์ข้อมูล FILESTREAM ทั้งหมดสำหรับโวลุ่มนั้นสำหรับอินสแตนซ์ทั้งหมดที่ใช้ SQL Server รุ่นใดรุ่นหนึ่ง

ตัวอย่างเช่นไดรฟ์ข้อมูล NTFS ที่จัดการโฮสต์สำหรับสาม FILESTREAM ข้อมูลคอนเทนเนอร์หนึ่งสำหรับแต่ละอินสแตนซ์ของ SQL Server 2008 สามจะมีโปรแกรมควบคุมตัวกรองระบบแฟ้ม SQL Server 2008 FILESTREAM เดียวเท่านั้น

คำถาม

  1. ดีใจที่รู้ว่า SQL Server มีทุกอย่างที่ดีและเชื่อมโยงกัน แต่สิ่งที่แชร์นั้นทำอะไรได้จริง? มันเป็นสิ่งที่เรียกว่า "ไดรเวอร์ระบบกรองไฟล์"?
  2. เมื่อเห็นว่าผู้ใช้ที่ได้รับการรับรองความถูกต้องสามารถเข้าถึง "แชร์" สิ่งที่เกี่ยวข้องกับความปลอดภัยคืออะไร
  3. Device RsFx0320 เป็นอุปกรณ์รุ่นก่อนสำหรับรูปแบบระบบไฟล์ที่ยืดหยุ่นซึ่งถูกนำมาใช้กับ Windows Server 2012 หรือไม่

หากคุณสามารถให้คำตอบสำหรับคำถามของฉันมันจะดีถ้าคุณสามารถให้การอ้างอิงแหล่งที่มา

คำตอบ:


5

เมื่อฟีเจอร์ FILESTREAM เปิดใช้งานบน Microsoft SQL Server 2012 SQL Server จะสร้างการแชร์ "ที่ซ่อนอยู่" บนระบบ

มันไม่ได้ทำตามค่าเริ่มต้นคุณต้องเลือกเพื่อเปิดใช้งานการแบ่งปัน สิ่งนี้ทำผ่าน SQL Server Configuration Manager หากคุณยกเลิกการเลือกEnable FILESTREAM for file I/O accessการแชร์จะถูกลบ

ป้อนคำอธิบายรูปภาพที่นี่

  1. ดีใจที่รู้ว่า SQL Server มีทุกอย่างที่ดีและเชื่อมโยงกัน แต่สิ่งที่แชร์นั้นทำอะไรได้จริง?

การแชร์อนุญาตให้ไคลเอนต์ (ในพื้นที่และระยะไกล) มีตำแหน่งที่ใช้ร่วมกันแบบเอกเทศเพื่อใช้สตรีม windows api สำหรับการเข้าถึงข้อมูล filestream สิ่งนี้ทำงานร่วมกับการตั้งค่าระดับอินสแตนซ์ของเซิร์ฟเวอร์ SQL สำหรับการเข้าถึง filestream ของFull Access Enabledการตั้งค่าการเข้าถึงอื่น ๆ ไม่ควรทำงานกับสตรีมมิ่ง API

ป้อนคำอธิบายรูปภาพที่นี่

  1. ... มันเป็น "โปรแกรมควบคุมตัวกรองระบบไฟล์" หรือไม่?

ไม่มันไม่ใช่. นี่เป็นเพียงไฟล์แชร์

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

จุดรวมของตัวกรองฟิลเตอร์คือการทำบางสิ่ง แต่สิ่งหนึ่งในนั้นคือการให้การเข้าถึงข้อมูลที่เก็บไว้ในเป้าหมาย filestream ผ่านทรานแซกชันหลากหลาย SQL Server, Transact SQL, Windows APIs นอกจากนี้ยังมีรายการอื่น ๆ อีกมากมาย - อย่างไรก็ตามการเข้าถึงที่ได้รับผ่านการแชร์นั้นกระทำผ่านไดร์เวอร์ตัวกรอง ในความเป็นจริงหากคุณพยายามเข้าถึงไฟล์ใน filestream และไม่ใช่ผู้ดูแลระบบหรือ SQL Server คุณไม่ควรเข้าถึงได้

ดังนั้นใช่นี้ทั้งเป็นและไม่ได้เป็นคนขับรถของตัวกรอง ครึ่งหนึ่งของไฟล์แชร์ windows ที่ถูกเปิดเผยผ่านฟิลเตอร์ไดรเวอร์ คุณสามารถดูนี่คือคุณดูคุณสมบัติเส้นทางของการแบ่งปัน

get-wmiobject -class Win32_share | where {$_.Description -like 'SQL Server*'} | ft name, path -autosize

2. การดูว่าผู้ใช้ที่ผ่านการรับรองความถูกต้องใด ๆ สามารถเข้าถึง "แชร์" อะไรคือความหมายของความปลอดภัย?

คุณสามารถเปลี่ยนการอนุญาตและต้องการการตั้งค่าที่เหมาะสม ผลกระทบด้านความปลอดภัยนั้นเป็นของการแบ่งปันไฟล์อื่น ๆ

3. อุปกรณ์ RsFx0320 เป็นอุปกรณ์รุ่นก่อนในรูปแบบระบบไฟล์ที่ยืดหยุ่นซึ่งถูกนำมาใช้กับ Windows Server 2012 หรือไม่

ไม่นี่เป็นชื่อของฟิลเตอร์ไดรเวอร์รุ่นที่ระบุ ยกตัวอย่างเช่นที่นี่เป็นระบบที่มี 2016 RsFx0410หนึ่งโหลด ReFS เป็นระบบไฟล์ซึ่งเป็นฟิลเตอร์ไดรเวอร์ที่อยู่ระหว่างระบบไฟล์และไดร์เวอร์มินิพอร์ต อันที่จริงมันค่อนข้างสับสนว่านี่เป็นไดร์เวอร์ตัวกรองแบบเก่าซึ่งแสดงโดย. 10 เมื่อสิ้นสุดความสูง ... อืม คุณจะสังเกตเห็นว่ามันมีระดับความสูงค่อนข้างต่ำซึ่งโดยทั่วไปจะไม่ได้รับการยอมรับสำหรับไดรเวอร์ฟิลเตอร์ของบุคคลที่สาม

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณสามารถให้คำตอบสำหรับคำถามของฉันมันจะดีถ้าคุณสามารถให้การอ้างอิงแหล่งที่มา

ฉันไม่มีแหล่งที่มาสำหรับเรื่องนี้ แต่ได้สำรองข้อมูลของฉันผ่านหน้าจอและตัวเลือกการกำหนดค่าที่เปลี่ยนการตั้งค่า ทุกอย่างในคำตอบนี้สามารถพบได้โดยดูจากผลิตภัณฑ์และรู้ว่าหน้าต่างทำงานอย่างไร (เช่นไดรเวอร์ฟิลเตอร์)


ขอบคุณสำหรับคำตอบของข้อ 1, 2 และ 3 ฉันขอขอบคุณอย่างยิ่งสำหรับคำอธิบายของคุณเกี่ยวกับตัวกรองไดรเวอร์ คำพูดของคุณที่จุดเริ่มต้นถูกบันทึกไว้อย่างถูกต้อง แต่ฉันตระหนักดีว่าการแชร์จะถูกสร้างขึ้นเฉพาะเมื่อฉันเปิดใช้งานตัวเลือกในตัวเลือก FILESTREAM ฉันได้อ่านเอกสารจำนวนมากเกี่ยวกับการกำหนดค่า / การตั้งค่า FILESTREAM และสิ่งที่อยู่ภายใน
John aka hot2use

2

นี่คือคำถามของคุณ:

1. เป็นเรื่องดีที่รู้ว่า SQL Server มีทุกสิ่งที่ดีและเชื่อมโยงกัน แต่สิ่งที่แชร์นั้นทำอะไรได้จริง? มันเป็นสิ่งที่เรียกว่า "ไดรเวอร์ระบบกรองไฟล์"?

การเข้าถึงสตรีมไฟล์เซิร์ฟเวอร์ SQL เป็นเรื่องเกี่ยวกับการเข้าถึงไฟล์ การแชร์ให้ตำแหน่งนั้นผ่านการแชร์ไฟล์

คุณสามารถเห็นสิ่งนี้ได้ง่ายๆด้วยรหัส C # โดยใช้ OpenSqlFilestream

https://docs.microsoft.com/en-us/sql/relational-databases/blob/access-filestream-data-with-opensqlfilestream

อย่างที่คุณเห็นไม่มี FILE_SHARE_READ สำหรับ CreateFile และไม่มีไฟล์มายากลไม่มีไฟล์ย่อย:

try
    {
        if ( (srcHandle = CreateFile(
            srcFilePath,
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL,
            OPEN_EXISTING,
            FILE_FLAG_SEQUENTIAL_SCAN,
            NULL)) == INVALID_HANDLE_VALUE )
            throw szErrMsgSrc;

หมายเหตุ: สาเหตุที่ไม่มีเซิร์ฟเวอร์ภายใน / ตัวเลือก FILESTREAM ในเครือ - ฉันไม่มีเงื่อนงำ ฟังดูเหมือนคนบางคนอาจชอบความปลอดภัยในระดับนั้น

2. การดูว่าผู้ใช้ที่ผ่านการรับรองความถูกต้องใด ๆ สามารถเข้าถึง "แชร์" อะไรคือความหมายของความปลอดภัย?

ว้าวคำถามที่ดี ปรากฏว่าการอนุญาตให้ใช้งานร่วมกันนั้นมีให้สำหรับผู้ใช้ที่ได้รับการรับรองความถูกต้องใด ๆ แต่การอนุญาต NTFS ที่เกี่ยวข้องควรปรับแต่งความปลอดภัยให้ดี แต่นี่ดูเหมือนจะเป็นช่องโหว่ให้ฉัน ฉันต้องตรวจสอบเพิ่มเติมว่าการปรับแต่งสิทธิ์ NTFS เป็นอย่างไร แต่ฉันไม่ชอบการอนุญาตการแชร์ไฟล์ทั่วไป มาที่ Microsoft ผู้ใช้ที่ได้รับการรับรองความถูกต้องทั้งหมดหรือไม่ ถูกหรือผิดฉันคิดว่า Microsoft มีแนวโน้มที่จะเพิกเฉยต่อการแชร์ / การมุ่งเน้นสิทธิ์ NTFS

การจัดหา "ผู้ใช้ที่ได้รับการรับรองความถูกต้อง" นั้นเป็นหัวข้อที่ถกเถียงกันมาหลายปี นี่คือหนึ่งในบล็อกที่ดีที่สุดที่ฉันได้อ่านทั้งด้านหลังและด้านหลังของ "ผู้ใช้ที่ผ่านการตรวจสอบสิทธิ์" มันยึดติดอยู่กับ Windows เป็นอย่างมากฉันไม่คิดว่าพวกเขาจะเคยพูดว่าเป็นความเสี่ยงที่ถูกต้องตามกฎหมาย - จนกว่าผลิตภัณฑ์ใหม่ของพวกเขาจะออกมาและกำจัดออกไป

https://social.technet.microsoft.com/Forums/windowsserver/en-US/bb74fa7c-89bd-476d-88bf-e88cd66618e6/why-is-authenticated-users-in-the-local-users-group-by- เริ่มต้นได้อย่างไรฟอรั่ม = winserversecurity

3. อุปกรณ์ RsFx0320 เป็นอุปกรณ์รุ่นก่อนในรูปแบบระบบไฟล์ที่ยืดหยุ่นซึ่งถูกนำมาใช้กับ Windows Server 2012 หรือไม่

ดูเหมือนว่าใช้ SQL แทนที่จะเป็น O / S RsFx0320.sys คือ SQL 2008 ดังที่เห็นด้านล่าง SQL 2012 คือ RsFx0201.sys และ SQL 2014 คือ RsFx0300.sys:

https://support.microsoft.com/en-us/help/2961258/fix-cannot-access-the-data-in-filetable-after-you-upgrade-from-sql-ser

Microsoft แสดงสิ่งที่สามารถเกิดขึ้นได้เมื่อคุณอัปเกรดจาก 2012 เป็น 2014:

To work around this issue, change manually the path property of the resource <AvailabilityGroupName>_FSShare to point to the correct driver: From
'\\?\GLOBALROOT\Device\RsFx0201\<localmachine>\{AvailabilityGroupID}' to '\\?\GLOBALROOT\Device\RsFx0300\<localmachine>\{AvailabilityGroupID}'

ขอบคุณสำหรับคำตอบสำหรับคำถามของฉัน 2 & 3 ฉันตระหนักถึงคำตอบของคุณ 1 ว่าฉันสามารถเข้าถึงข้อมูลผ่านส่วนแบ่งนั้นได้ แต่ฉันสงสัยว่าจะทำอย่างไรจึงมีชื่อ "ในการค้นหาข้อมูลภายในของ FILESTREAM "
John aka hot2use
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.