سؤال

هل هناك طريقة لإصلاح مستخدم معزول في قاعدة بيانات SQL 2005/2008 باستخدام SQL SMO؟

يمكنك العثور على المستخدمين المعزولين بسهولة نسبية من خلال تعداد المستخدمين والبحث عن المستخدمين الفارغين User.Login ملكية:

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;    
public static IList<string> GetOrphanedUsers(Server smoServer, string database) {
       Database db = smoServer.Databases[database];

       List<string> orphanedUsers = new List<string>();
       foreach (User user in db.Users) {
          if (!user.IsSystemObject && user.Login == string.Empty) {
             orphanedUsers.Add(user.Name);
          }
       }

       return orphanedUsers;
    }

لسوء الحظ، الإصلاح ليس بهذه البساطة User.Login الخاصية إلى اسم تسجيل الدخول للخادم المطابق. User.Login يحتوي على أداة ضبط، لكنني لست على علم بوجود طريقة لإعادة نشر ذلك مرة أخرى إلى الخادم.يبدو أنه قابل للاستخدام فقط عند إنشاء ملف جديد User.

لقد فكرت في إسقاط المستخدم من قاعدة البيانات وإعادة ربط تسجيل دخول الخادم إلى قاعدة البيانات، ولكن مع ذلك تأتي تعقيدات إضافية.تعقيدات مثل إعادة تعيين المخططات الافتراضية والأدوار، وما إذا كانت تمتلك مخططًا في قاعدة البيانات، فستواجه المزيد من المشاكل أثناء تتاليك خلال هذه التغييرات.يكفي أن تجعلك ترغب في تضمين SQL والانتهاء منه:

ServerConnection server = new ServerConnection("MyBox\SQLInstance");
Database db = server.Databases["MyDatabase"];
db.ExecuteNonQuery("sp_change_users_login 'auto_fix', 'ORPHANED_USERNAME'")

ومع ذلك، أفضل عدم تضمين مكالمة لإجراء مخزن في النظام.

أي اقتراحات؟

هل كانت مفيدة؟

المحلول

لسوء الحظ، SMO ليس أفضل بكثير من SQL-DMO لتوفير الأساليب التي يجب كن متاحا.سيتعين عليك استخدام SQL المضمّن:

db.ExecuteNonQuery("sp_change_users_login 'auto_fix', 'ORPHANED_USERNAME'")

أو

db.ExecuteNonQuery("sp_change_users_login 'update_one', 'ORPHANED_USERNAME', 'ORPHANED_USERNAME'")

نصائح أخرى

ومن T-SQL ALTER LOGIN ... WITH LOGIN = ...

<اقتباس فقرة>   

وLOGIN = LOGIN_NAME

     

وإعادة خرائط للمستخدم   تسجيل الدخول آخر عن طريق تغيير المستخدم   معرف أمان (SID) لتتناسب مع   SID تسجيل الدخول ل.

والآن، وأنا لم أحاول ذلك لأنني التوافق معرفات الأمان عبر خوادم (ونادرا ما تستخدم SQL محدودة في هذه الأيام)

ولكن، وهذا يعين في User.Alter الطريقة .

وهكذا، فإنه قد عمل ...

وإذا كان لا يحب باستخدام نفس معلومات تسجيل الدخول، أعتقد أنك يمكن تعيينه إلى تسجيل الدخول آخر والعودة.

وبالنسبة لي هذا النحو عملت غرامة

    db.ExecuteNonQuery("sp_change_users_login 'Auto_Fix', 'login_from_Report', NULL, 'p@ssword123!'")

ولقد وجدت هنا: HTTP : //dbadiaries.com/using-sp_change_users_login-to-fix-sql-server-orphaned-users#sthash.Q85ewEr9.dpuf

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top