วัตถุประสงค์ของฐานข้อมูล 'เจ้าของ' คืออะไร?


46

วันนี้ในขณะที่การแก้ไขปัญหานายหน้าบริการฉันค้นพบว่าเจ้าของฐานข้อมูลคือการเข้าสู่ระบบ Windows ของพนักงานที่ออกจาก บริษัท การเข้าสู่ระบบของเขาถูกลบและทำให้การแจ้งเตือนการค้นหาล้มเหลว

แนวทางปฏิบัติที่ดีที่สุดในการจัดการกับสิ่งนี้คือการทำให้เจ้าของฐานข้อมูลเป็น เราเปลี่ยนและลบล้างคิว

คำถาม (ระดับประถมศึกษา) ของฉัน: เจ้าของฐานข้อมูลคืออะไรและวัตถุประสงค์ของมันคืออะไร


คุณเปลี่ยนเจ้าของฐานข้อมูลเป็น 'sa' ได้อย่างไร ฉันเป็น GIS Tech ที่ทำงานให้กับรัฐบาลท้องถิ่น GIS Tech เก่าถูกไล่ออกและมีคนน้อยมากที่รู้เกี่ยวกับ GIS ฉันดูเหมือนจะไม่อนุญาตให้ตัวเองแก้ไขฐานข้อมูลเพราะฉันไม่ใช่เจ้าของ ฉันจะเปลี่ยนความเป็นเจ้าของได้อย่างไร

คำตอบ:


53

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

ทฤษฎีไปเช่นนี้สิ่งที่จะได้รับสิทธิ์ในการเป็น'กำหนดสิทธิ์' Securables ทั้งหมดมีเจ้าของ เจ้าของที่ปลอดภัยมีการควบคุมที่ปลอดภัยอย่างแน่นอนและไม่สามารถปฏิเสธสิทธิพิเศษใด ๆ securables ระดับเช่นเป็นเจ้าของโดยเซิร์ฟเวอร์ว่าจ้าง (เข้าสู่ระบบ) ความปลอดภัยระดับฐานข้อมูลเป็นเจ้าของโดยผู้บริหารฐานข้อมูล (ผู้ใช้) อาจารย์ใหญ่มาในสองรสชาติ: หลัก (เอกลักษณ์) และรอง (สมาชิก) ระดับเซิร์ฟเวอร์ที่ปลอดภัยเป็นค่าเริ่มต้นที่เป็นเจ้าของโดยหลักการเซิร์ฟเวอร์หลักที่เข้าสู่ระบบในปัจจุบัน การรักษาความปลอดภัยระดับฐานข้อมูลนั้นเป็นเจ้าของโดยค่าเริ่มต้นโดยฐานข้อมูลปัจจุบันยกเว้นวัตถุที่ถูกผูกไว้กับสคีมาที่เป็นค่าเริ่มต้นจะเป็นเจ้าของโดยเจ้าของสคีมา Securables ทั้งหมดสนับสนุนอนุประโยค AUTHORIZATION ณ เวลาที่สร้างเพื่อบังคับใช้กับเจ้าของคนอื่นALTER AUTHORIZATION สามารถใช้ในภายหลังเพื่อเปลี่ยนเจ้าของที่ปลอดภัยใด ๆ

เนื่องจากฐานข้อมูลเป็นระดับเซิร์ฟเวอร์ที่ปลอดภัยจึงเป็นไปตามค่าเริ่มต้นโดยเจ้าของหลักที่ออกคำสั่ง CREATE DATABASE กล่าวคือ การเข้าสู่ระบบ NT ของพนักงานที่ออกเดินทาง

ดังนั้นคำถามของคุณคือ " ทำไม securables จึงต้องการเจ้าของ? " เพราะเจ้าของเป็นรากฐานของความไว้วางใจ มันเป็นเจ้าของที่ได้รับอนุญาตปฏิเสธและเพิกถอนการอนุญาตบนวัตถุ ระบบความปลอดภัยสามารถออกแบบโดยไม่มีเจ้าของความปลอดภัยได้หรือไม่? อาจเป็นไปได้ แต่จะต้องมีกลไกบางอย่างเพื่อแทนที่เจ้าของบทบาทที่เล่นในโมเดลปัจจุบัน ตัวอย่างเช่นพิจารณาว่า securables พ่อไม่มีเจ้าของ (เช่นแทนที่จะเป็นเจ้าของที่ปลอดภัยผู้สร้างดั้งเดิมจะได้รับการควบคุมมากกว่านั้น) มันเป็นไปได้ที่จะสร้างการเข้าถึงที่ปลอดภัยและเพิกถอนมันให้กับทุกคนรวมถึงตัวเขาเอง ความต้องการของเจ้าของช่วยหลีกเลี่ยงปัญหานี้เนื่องจากเจ้าของไม่สามารถล็อคตัวเองได้

ผลข้างเคียงที่รู้จักกันน้อยของ CREATE DATABASE ในการสร้างความปลอดภัย (ฐานข้อมูล) ที่เป็นเจ้าของโดยการเข้าสู่ระบบ NT ดั้งเดิมได้เผาไหม้จำนวนมากมาก่อน กฎนั้นเหมือนกันสำหรับทุก ๆ การรักษาความปลอดภัย แต่มีปัจจัยบางอย่างที่ทำให้ปัญหาของเจ้าของฐานข้อมูลแย่ลง:

  • การรักษาความปลอดภัยระดับเซิร์ฟเวอร์อื่น ๆ (ปลายทาง, บทบาทเซิร์ฟเวอร์, การเข้าสู่ระบบ) นั้นไม่ค่อยมีใครใช้, ย้ายไปไหนมาไหน ฯลฯ
  • ความปลอดภัยระดับฐานข้อมูลมักจะจบลงด้วยการเป็นเจ้าของโดยdbo(ผู้บริหารฐานข้อมูล) หรือผู้บริหารฐานข้อมูลอื่น ๆ และทำให้เจ้าของอยู่ในฐานข้อมูล
  • การมีฐานข้อมูลความเป็นเจ้าของเริ่มต้นเป็นเงินต้นหลักของ NT สร้างปัญหาการกักกัน (เจ้าของเป็น SID NT ที่จัดการโดย AD และไม่เดินทางไปกับไฟล์ฐานข้อมูลบัญชี NT สามารถใช้งานได้อย่างง่ายดาย ฯลฯ )
  • สิ่งที่สำคัญที่สุด: EXECUTE AS contextเจ้าของฐานข้อมูลมีผลข้างเคียงที่สำคัญโดยเฉพาะ ปัญหานี้ในภายหลังคือสิ่งที่เผาผลาญผู้ใช้ส่วนใหญ่ เนื่องจาก Service Broker ใช้งาน EXECUTE AS อย่างกว้างขวาง (การส่งข้อความมีบริบท EXECUTE AS โดยปริยายรวมถึงการเปิดใช้งานคิวที่มีอย่างชัดเจน) โดยปกติแล้วผู้ใช้ Service Broker จะค้นพบปัญหานี้ก่อน

BTW, รุ่งโรจน์สำหรับการตรวจสอบและแก้ไขปัญหาเดิมของคุณ :)


13

ฐานข้อมูลownerเป็นบิตของการย้อนเวลากลับไปก่อนที่สคีมา (เหมาะสม) ถูกนำมาใช้ใน SQL Sever 2005

โดยทั่วไปฐานข้อมูลการใช้เป็นค่าเริ่มต้นdbo(เจ้าของฐานข้อมูล) ของฐานข้อมูลกับฐานข้อมูลของตัวเองเป็นวัตถุฐานข้อมูล

จากเอกสารSQL Server 2000 ...

dboเป็นผู้ใช้ที่มีนัยสิทธิ์ในการดำเนินกิจกรรมทั้งหมดในฐานข้อมูล

ใน SQL Server รุ่นก่อนหน้าเมื่อสคีมาไม่สามารถ "เป็นเจ้าของ" วัตถุ ( หรือค่อนข้างควรระบุว่าวัตถุทั้งหมดตารางมุมมอง ฯลฯ เป็นเจ้าของโดยdboและไม่มีสคีมาอื่น ๆ ) จำเป็นสำหรับ "ผู้ใช้" เพื่อเป็นเจ้าของ ... ควรดำเนินการต่อโดยไม่บอกสาเหตุที่บางสิ่งจำเป็นต้องมีฐานข้อมูล (หรือการอนุญาตโดยทั่วไปจะค่อนข้างยาก)

ดังนั้นในทางเทคนิคใน SQL Server รุ่นเก่ากว่า (หรือฐานข้อมูลที่อัปเกรดแล้ว) ไม่ใช่ตาราง "Foo" มันเป็นตาราง "dbo.Foo" ... ด้วยการdboเป็นเจ้าของ

ด้วยการกำเนิดของ SQL Server 2005 คุณสามารถมีวัตถุฐานข้อมูล schema ที่เป็นเจ้าของเช่นว่าคุณมี schema ชื่อ "bar" และตารางชื่อ "Foo" ... สิ่งนี้จะกลายbar.Fooเป็นใน ...

SELECT * FROM bar.Foo WHERE etc = 'blah`;

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

ดังนั้นจึงเป็นการดีที่สุดที่จะเปลี่ยนเป็นsaบัญชีหรือบางที (จากประสบการณ์ของฉัน) เป็นบัญชีโดเมนที่สามารถจัดการโดยทีมงาน / IT ขององค์กร

บทความนี้แสดงให้เห็นถึงความแตกต่างระหว่างวิธีการทำสิ่งเก่า ๆ กับ "เจ้าของ" และระบบการเป็นเจ้าของแบบ "สคีมา" ที่ใหม่กว่า

เพื่อให้เข้าใจถึงความแตกต่างระหว่างเจ้าของและสคีมาใช้เวลาทบทวนการเป็นเจ้าของวัตถุ เมื่อวัตถุถูกสร้างขึ้นใน SQL Server 2000 หรือรุ่นก่อนหน้าวัตถุจะต้องมีเจ้าของ ส่วนใหญ่เจ้าของจะเป็น "dbo" หรือที่รู้จักกันว่าเป็นเจ้าของฐานข้อมูล


@RemusRusanu โดยใช้ตัวอย่าง 'schema vs. owner' เป็นวิธีการอธิบายแนวคิดว่าทำไม 'เจ้าของ' จึงมีอยู่ใน SQL Server ฉันขอขอบคุณคำตอบของคุณเช่นกัน! ระบุไว้อย่างดี ... แต่ฉันไม่เชื่อ "ดังนั้นจึง" ลดตัวอย่าง / คำตอบนี้ลง :)
Justin Jenkins
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.