Create Logins On Log Shipping Databases
המקרה:
לקוח מבקש ליצור משתמש SQL בשרת המשני שנמצא במערך Log Shipping במטרה לספק יכולת גישה לעובד החברה.
הבעיה:
בסיס הנתונים בשרת המשני נמצא במצב Read-Only, לכן לא ניתן יהיה ליצור את המשתמש ולמפות אותו לבסיס הנתונים הנ"ל.
להלן השגיאה שתתקבל:
הפתרון:
על מנת לפתרון את הבעיה נדרש לפעול באופן ובסדר הבא.
הערה:
במידה ונדרש לעשות שימוש באותו שם משתמש בשרת המשני עבור בסיסי נתונים נוספים וממקורות שונים, יש לחזור על סעיף 3 עבור כל אחד משרתי המקור.
צד שרת Secondary (משני):
יש ליצור את המשתמש בצד השרת המשני ללא מיפוי המשתמש ל-בסיס הנתונים וללא מתן הרשאה ספציפית.
שליפת SID המשתמש שיצרנו על מנת ליצור את אותו המשתמש בעל אותו ה-SID בצד השרת הראשי.
לשם כך נריץ את השאילתה הבאה ונעתיק את ה-SID שהתקבל (נשתמש בו בסעיף 3):
הערה:
רלוונטי רק כשמשתמשים בחשבון מסוג SQL Server Authentication.
בחשבון מסוג Windows Authentication הערך של ה-SID מסופק ע"י מערכת ה-Active Directory לכן שלב זה אינו הכרחי.
SELECT [name], convert(binary(16), sid) as [sid]
FROM sys.sql_logins
WHERE name = 'Your User Name'
להלן התוצאה שתתקבל:
צד שרת Primary (ראשי):
יצירת המשתמש בצד השרת הראשי ללא מיפוי המשתמש ל-בסיס הנתונים וללא מתן הרשאה ספציפית.
בשלב זה נזין את הערך SID שהתקבל מסעיף 2 במטרה ליצור את אותו אובייקט המשתמש.
USE [master];
CREATE LOGIN [Your User Name] WITH
PASSWORD = 'Your Password'
,CHECK_EXPIRATION=OFF --> Ignoring from local policy.
,CHECK_POLICY=OFF --> Ignoring from local policy.
,SID = 0x1B6997BF79FCB34588C76D46EF5A4D66 --> Paste your SID.
כעת נספק למשתמש שיצרנו בשרת הראשי הרשאות ומיפוי לבסיס הנתונים הרלוונטי.
לדוגמה:
ע"י קוד
USE [Your Database]
GO
CREATE USER [Your User Name] FOR LOGIN [Your User Name]
GO
USE [Your Database]
GO
ALTER ROLE [Specific Permission] ADD MEMBER [Your User Name]
GO
ע"י GUI-
סנכרון המשתמש:
המשתמש שיצרנו יתעדכן באופן אוטומטי בבסיס הנתונים שבשרת המשני וזה הודות להגדרות המתזמן (Schedule) הקיים בג'ובים של ה-Backup Log (שרת ראשי) ו-Restore Log (שרת משני).
בכל אופן, על מנת לסנכרן את המשתמש במידי ניתן להריץ באופן יזום את הג'וב Backup Log ולאחר מכן את הג'וב Restore Log.
זהו סיימנו את המלאכה !
כעת חשבון המשתמש שיצרנו זמין לשימושינו ולשימושו של עובד החברה J.
ניתן להבחין כי באופן אוטומטי החשבון קיבל את המיפוי וההרשאה הנדרשת בצד השרת המשני.
בהצלחה :-)