it-swarm.asia

ما هو الغرض من 'مالك' قاعدة البيانات؟

اليوم أثناء استكشاف مشكلة وسيط الخدمة ، اكتشفت أن مالك قاعدة البيانات كان تسجيل دخول Windows لموظف ترك الشركة. تمت إزالة تسجيل دخوله وبالتالي فشلت إعلامات الاستعلام.

من المفترض أن أفضل ممارسة للتعامل مع هذا الأمر هي جعل 'sa' مالك قاعدة البيانات. لقد غيرنا ذلك وأزال ذلك قائمة الانتظار.

سؤالي (الأساسي جدًا): ما هو مالك قاعدة البيانات وما هو الغرض منه؟

53
8kb

هناك بعض الالتباس بين مفاهيم قاعدة البيانات لـ "dbo" (مستخدم) و "db_owner" (دور ثابت) من جهة وبين مفهوم مثيل "مالك قاعدة البيانات" على الجانب الآخر. غالبًا ما يُطلق على "dbo" و "db_owner" "مالك قاعدة البيانات". في ما تطلبه أنت تتحدث عن مالك قاعدة البيانات كمدير الخادم الذي يمتلك قاعدة البيانات.

النظرية تسير على النحو التالي: أي شيء يمكن منحه أذونات على 'آمن' . جميع الأوراق المالية لها مالك. لصاحب السند المؤمن سيطرته المطلقة على السمسار ولا يمكن إنكار أي امتياز. المملوكة من مستوى الأمان هي ملك للخادم الأساسيات (تسجيلات الدخول). المواد الأساسية لمستوى قاعدة البيانات مملوكة لمديري قواعد البيانات (المستخدمين). يأتي المدير بطريقتين: الأساسي (الهوية) والثانوي (العضوية). المواد الآمنة على مستوى الخادم مملوكة بشكل افتراضي من قبل الخادم الأساسي المسجل حاليًا. يتم تأمين المواد الآمنة على مستوى قاعدة البيانات افتراضيًا بواسطة قاعدة البيانات الحالية ، باستثناء الكائنات المرتبطة بالمخطط التي يمتلكها مالك المخطط افتراضيًا. تدعم جميع المواد الآمنة شرط التفويض في وقت الإنشاء لفرض مالك مختلف. ALTER AUTHORIZATION يمكن استخدامها لاحقًا لتغيير مالك أي تأمين.

نظرًا لأن قاعدة البيانات قابلة للتأمين على مستوى الخادم ، فإنه يتبعها بشكل افتراضي أنها مملوكة للمدير الأساسي الذي أصدر بيان CREATE DATABASE. بمعنى آخر. تسجيل الدخول NT للموظف الراحل.

لذا سؤالك هو حقا " لماذا تحتاج المواد الآمنة إلى مالك؟ ". لأن المالك هو جذر الثقة. هو المالك الذي يمنح وينكر ويلغي الإذن على الكائن. هل يمكن تصميم نظام أمني بدون مالكي مواد أمنية؟ ربما نعم ، ولكن يجب أن يكون هناك بعض الآليات لاستبدال الدور الذي يلعبه أصحاب الدور في النموذج الحالي. على سبيل المثال ، ضع في اعتبارك أن dad Securables ليس لها مالك (على سبيل المثال ، بدلاً من امتلاك مؤمن ، يتم منح المنشئ الأصلي فقط السيطرة عليه) سيكون من الممكن إنشاء وصول آمن وإبطال الوصول إليه إلى الجميع ، بما في ذلك نفسه. إن شرط المالك يتحايل على هذه المشكلة حيث لا يستطيع المالك أن يحجب نفسه.

التأثير الجانبي القليل المعروف لـ CREATE DATABASE لإنشاء قاعدة بيانات آمنة (قاعدة البيانات) يملكها تسجيل دخول NT الأصلي قد أحرق الكثير من قبل. القواعد هي نفسها لكل مؤمن ، ولكن بعض العوامل تؤدي إلى تفاقم مشكلات مالك DATABASE:

  • نادرًا ما يتم استخدام المواد الآمنة الأخرى على مستوى الخادم (نقطة النهاية ، دور الخادم ، تسجيل الدخول) ، أو نقلها ، إلخ.
  • عادةً ما تنتهي المواد الآمنة على مستوى قاعدة البيانات بامتلاكها من قِبل dbo (رئيس قاعدة البيانات) ، أو بعض قواعد البيانات الأساسية الأخرى ، وبالتالي يتم تضمين المالك في قاعدة البيانات
  • يؤدي امتلاك ملكية قاعدة البيانات افتراضيًا لمدير NT الأساسي إلى إنشاء مشكلة احتواء (المالك هو NT SID تتم إدارته بواسطة AD ولا يسافر مع ملفات قاعدة البيانات ، يمكن حساب NT بشكل كبير وغير ذلك وما إلى ذلك)
  • اهم شيء: صاحب قاعدة البيانات له اثار جانبية مهمة وبالتحديد EXECUTE AS context . هذه المشكلة اللاحقة هي ما يحرق معظم المستخدمين. نظرًا لأن Service Broker يستخدم على نطاق واسع EXECUTE AS (يحتوي تسليم الرسالة على سياق EXECUTE AS الضمني ، بالإضافة إلى تنشيط قائمة الانتظار الذي يحتوي على سياق صريح) عادة ما يكون مستخدمو وسيط الخدمة الذين يكتشفون هذه المشكلة أولاً.

راجع للشغل ، Kudos للتحقيق وإصلاح مشكلتك الأصلية :)

59
Remus Rusanu

تعد قاعدة البيانات owner رميًا لبعض الوقت قبل تقديم مخطط (مناسب) في SQL Sever 2005.

أساسا قاعدة بيانات مالك هو الافتراضي dbo (مالك قاعدة البيانات) لقاعدة البيانات ، مع كون قاعدة البيانات نفسها كائن قاعدة البيانات .

من SQL Server 20 docs ...

dbo هو مستخدم لديه أذونات ضمنية لأداء جميع الأنشطة في قاعدة البيانات.

في الإصدارات السابقة من SQL Server ، عندما لا يستطيع المخطط "امتلاك" كائن ( أو بالأحرى يجب ذكر أن جميع الكائنات والجداول والمشاهدات وما إلى ذلك مملوكة لـ dbo وهناك لم تكن هناك مخططات أخرى) كان من الضروري لـ "المستخدم" امتلاكها ... يجب أن تذهب دون ذكر السبب شيء يحتاج إلى امتلاك قاعدة البيانات (أو أذونات أخرى في سيكون من الصعب إلى حد ما.)

لذلك ، من الناحية الفنية في الإصدارات القديمة من SQL Server (أو قواعد البيانات التي تمت ترقيتها) لم يكن جدول "Foo" بل كان جدول "dbo.Foo" ... مع dbo هو المالك.

مع ظهور SQL Server 2005 يمكن أن يكون لديك كائنات قاعدة بيانات مملوكة للمخطط مثل أن يكون لديك مخطط باسم "شريط" وجدول يسمى "Foo" ... يصبح هذا bar.Foo كما في ...

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

يأتي الجزء الصعب مع حقيقة أن المستخدم الإنشاء يتم تعيين قاعدة البيانات تلقائيًا كمالك المالك مما يؤدي إلى مشاكل تتعلق بتسليم الموظف ، إلخ.

لذلك من الأفضل تغيير هذا إلى حساب sa ، أو ربما (في تجربتي) إلى حساب مجال يمكن إدارته من قبل فريق العمليات/تكنولوجيا المعلومات التابع للمؤسسة.

هذا المقالة يعطي اختلافًا بين طريقة "المالك" القديمة في أداء الأشياء ، ونظام الملكية الجديد القائم على "المخطط".

لفهم الفرق بين المالكين والمخطط ، دعنا نقضي بعض الوقت في مراجعة ملكية الكائن. عند إنشاء كائن في SQL Server 2000 أو إصدار سابق ، يجب أن يكون للكائن مالك. في معظم الأحيان ، يكون المالك هو "dbo" ، والمعروف أيضًا باسم مالك قاعدة البيانات.

14
Justin Jenkins