none
שגיאה - Error: 18059, Severity: 20, State: 1 RRS feed

  • שאלה

  • שלום,

    יש לי סביבת SQL Server 2008 Sp3

    ולאחרונה נתקלתי בשגיאות הבאות בלוג

    Error: 18059, Severity: 20, State: 1. The connection has been dropped because the principal that opened it subsequently assumed a new security
    context, and then tried to reset the connection under its impersonated security context.
    This scenario is not supported. See "Impersonation Overview" in Books Online.

    מצאתי דרך PROFILER את המחשב והאפליקציה שמהווים את המקור לשגיאה .

    חיפשתי בגוגל ומצאתי מישהו שמציין שזה קשור ל-Connection Pooling ושפשוט צריך לשנות את הConnection String.

    הלינק: link

    זה היה הקובץ Web.Config שאחראי על חיבור מערכת (רק שיניתי את שם השרת וה-DB)

    <?xml version="1.0"?>
    <appSettings>
    	<add key="Main.ConnectionString" value="Data Source=db-002\db2;Initial Catalog=APPDB;TRUSTED_CONNECTION=YES"/>
    	<add key="ConnectionHash" value="==QMr1meolHO3YWdTNFOzcTO"/>
    	<add key="Database" value="[APPDB]"/>
    	<add key="UseApprole" value="True"/>
    </appSettings>

    שיניתי אותו בהתאם להמלצה - בסביבת הTEST לחיבור הבא:

    <?xml version="1.0"?>
    <appSettings>
    	<add key="Main.ConnectionString" value="Data Source=db-002\db2;Initial Catalog=APPDB;TRUSTED_CONNECTION=YES;Pooling=false"/>
    	<add key="ConnectionHash" value="==QMr1meolHO3YWdTNFOzcTO"/>
    	<add key="Database" value="[APPDB]"/>
    	<add key="UseApprole" value="True"/>
    </appSettings>
    

    ביצעתי ריסוט לסרוויסים, ל-IIS ובדקתי את האפליקציה - הכל עובד.

    למשך זמן מה באמת לא היו שגיאות, אבל אחרי כמה שעות הן הופיעו שוב :(

    האם יש למישהו רעיון מה עוד אפשר לעשות בנידון?

    תודה

    רוני.

    יום שישי 15 פברואר 2013 13:17

תשובות

  • היי נועם,

    בגדול, השגיאה הזו מתרחשת מזה זמן מה בשרתים שלנו,

    ואני חייבת להודות שקצת התעלמתי ממנה,

    כי הרגשתי שאפשר לתת לזה עדיפות נמוכה כי לא קיבלתי שום חיווי ממשתמשים על בעיה כלשהי.

    הסביבה שלנו עובדת על cluster של שני nodes, ואתמול ה-Instance עבר Failover לשרת השני.
    מהחקירה של הלוגים, כדי להבין מה הסיפור, שמתי לב שהשגיאה הנ"ל הופיעה בתדירות גבוהה מהרגיל בלוגים.
    זה הדבר היחיד שמצאתי אגב. אני עדיין לא יודעת להסביר את ה-Failover, אבל בינתיים, רציתי לפחות להוריד את השגיאה הזו מהגב שלי.

    האם אני בטוחה שמקור השגיאות הוא מאותו שרת אפליקציה ? מממ זו שאלה מצוינת. אראה לך איך הגעתי לאותה מסקנה.
    פתחתי את הServer Side Trace האוטומטי שנאסף בתיקייה:

    $ProgramFiles\..\MSSQL10.DB2\MSSQL\Log

    וחיפשתי את השגיאה וראיתי את כל הפרטים הרלוונטים שמכוונים אותי לשרת, ל-DB הרלוונטי -> ומשם להגיע לאפליקציה זה כבר פשוט.
    שמתי דוגמא של אותו TRACE, רק בלי פרטים מזהים.

    לגבי - Application role - זו עוד שאלה מצוינת. זו אפליקציה out-of-the-box חיצונית של מחלקת הפיננסים. היא קיימת כבר שנים .

    עידכון:

    הסתכלתי על ה-Security ואני רואה שיש בשרת Login ייעודי לאפליקציה, והוא DB_OWNER של אותו DB רלוונטי, א-ב-ל היום שאני רואה שרשום בTRACE, אינו אותו יוזר ייעודי.

    זה גרם לי קצת לחפור באיך בנויה האפליקציה. ראיתי במנהל ה-IIS שהיוזר שמנהל את ה-Application Pool הוא Network Service, וממה שקראתי, הוא מיוצג  בפועל כ-"שם השרת + $".
    חזרתי לSQL SERVER - קיים Login בשרת ששמו הוא שם אותו שרת + $, אבל הוא מוכוון לDomain אחר.
    דיברתי עם IT ומסתבר שעשו מיגרציה בין דומיינים לאותו שרת לפני כחודשיים.

    כלומר, הLogin שקיים בשרת בפועל מפנה ליוזר שלא קיים (כי אותו שם יוזר לא נמצא בדומיין הישן).

    יצרתי  Login שמפנה לדומיין החדש

    ועכשיו אני מחכה לראות אם עדיין אקבל את אותן שגיאות.

    ביום שני אעיף מבט, בתקווה שזה יפתור את הבעיה, ואז אוכל לסגור את השאלה.

    תודה :)

    • סומן כתשובה על-ידי Roni Vered Adar יום שני 18 פברואר 2013 08:13
    יום שישי 15 פברואר 2013 15:02

כל התגובות

  • שלום

    האם מתרחשת בעיה כלשהי מלבד הופעת השגיאה?
    התנתקות איטיות וכדו?

    הכיוון של connection pooling  נשמע לי נכון  האם בדקת שמקור השגיאות הוא מאותו שרת אפליקציה?

    האם את משתמשת ב application role ?  אם התשובה היא כן אז יתכן שזה המקור לשגיאה
    נתקלתי בשגיאה דומה שמשתמשים  ב sp_setapprole  וה connection נסגר לפני שקוראים ל sp_unsetapprole

    מקווה שעזרתי,
    נועם

    יום שישי 15 פברואר 2013 13:50
  • היי נועם,

    בגדול, השגיאה הזו מתרחשת מזה זמן מה בשרתים שלנו,

    ואני חייבת להודות שקצת התעלמתי ממנה,

    כי הרגשתי שאפשר לתת לזה עדיפות נמוכה כי לא קיבלתי שום חיווי ממשתמשים על בעיה כלשהי.

    הסביבה שלנו עובדת על cluster של שני nodes, ואתמול ה-Instance עבר Failover לשרת השני.
    מהחקירה של הלוגים, כדי להבין מה הסיפור, שמתי לב שהשגיאה הנ"ל הופיעה בתדירות גבוהה מהרגיל בלוגים.
    זה הדבר היחיד שמצאתי אגב. אני עדיין לא יודעת להסביר את ה-Failover, אבל בינתיים, רציתי לפחות להוריד את השגיאה הזו מהגב שלי.

    האם אני בטוחה שמקור השגיאות הוא מאותו שרת אפליקציה ? מממ זו שאלה מצוינת. אראה לך איך הגעתי לאותה מסקנה.
    פתחתי את הServer Side Trace האוטומטי שנאסף בתיקייה:

    $ProgramFiles\..\MSSQL10.DB2\MSSQL\Log

    וחיפשתי את השגיאה וראיתי את כל הפרטים הרלוונטים שמכוונים אותי לשרת, ל-DB הרלוונטי -> ומשם להגיע לאפליקציה זה כבר פשוט.
    שמתי דוגמא של אותו TRACE, רק בלי פרטים מזהים.

    לגבי - Application role - זו עוד שאלה מצוינת. זו אפליקציה out-of-the-box חיצונית של מחלקת הפיננסים. היא קיימת כבר שנים .

    עידכון:

    הסתכלתי על ה-Security ואני רואה שיש בשרת Login ייעודי לאפליקציה, והוא DB_OWNER של אותו DB רלוונטי, א-ב-ל היום שאני רואה שרשום בTRACE, אינו אותו יוזר ייעודי.

    זה גרם לי קצת לחפור באיך בנויה האפליקציה. ראיתי במנהל ה-IIS שהיוזר שמנהל את ה-Application Pool הוא Network Service, וממה שקראתי, הוא מיוצג  בפועל כ-"שם השרת + $".
    חזרתי לSQL SERVER - קיים Login בשרת ששמו הוא שם אותו שרת + $, אבל הוא מוכוון לDomain אחר.
    דיברתי עם IT ומסתבר שעשו מיגרציה בין דומיינים לאותו שרת לפני כחודשיים.

    כלומר, הLogin שקיים בשרת בפועל מפנה ליוזר שלא קיים (כי אותו שם יוזר לא נמצא בדומיין הישן).

    יצרתי  Login שמפנה לדומיין החדש

    ועכשיו אני מחכה לראות אם עדיין אקבל את אותן שגיאות.

    ביום שני אעיף מבט, בתקווה שזה יפתור את הבעיה, ואז אוכל לסגור את השאלה.

    תודה :)

    • סומן כתשובה על-ידי Roni Vered Adar יום שני 18 פברואר 2013 08:13
    יום שישי 15 פברואר 2013 15:02
  • טוב. בדקתי הבוקר את הלוגים ואין יותר שגיאה.

    זו הייתה הבעיה - יוזר שהפנה לדומיין ישן.

    תודה והמשך יום נעים.

    יום שני 18 פברואר 2013 08:13
  • הי רוני,

    אבל מה הקשר בין היוזר שהפנה לדומיין הישן לבין השגיאה שקיבלת?

    זה לא נראה קשור אחד לשני.

    יש לך מושג?

    תודה!

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    יום שלישי 19 פברואר 2013 06:36
    מנחה דיון
  • בוקר טוב גיא,

    כן, גם לי זה היה נראה מוזר, אבל ברגע שראיתי שמה שהוצע בלינק: לינק לא עזר, הבנתי שכנראה צריך לחפש משהו אחר.
    לא מצאתי על זה כלום ברשת, ואני מחשיבה את יכולות החיפוש שלי בגוגל כסבירות פלוס.

    עקב כך, התמקדתי בלקבל כמה שיותר מידע מתוך הTRACE, והוא הכווין אותי ליוזר שבפועל קיבל את השגיאה (היוזר היה "שם המחשב + $").
    כשדיברתי עם IT על היוזר הזה, הם אמרו לי שכאשר מתקינים איזושהי תוכנה ומגדירים את היוזר שלה כ-Network service, במקום יוזר ייעודי כלשהו, אז בפועל היוזר מוצג כ-"שם המחשב + $".
    וידאנו את זה בכך שהלכנו ובדקנו את כל היוזרים של אותה אפליקציה.

    יוזר אחד היה יוזר SQL ייעודי. היה לו LOGIN ויוזר ב-DB עם ההרשאות הרלוונטיות.
    יוזר שני היה היוזר שהוגדר ב-IIS ב-Application pool, והוא הוגדר כ-Network Service.
    בדקתי בשרת SQL, וראיתי Login שהוגדר עם "שם המחשב + $", אבל הוא הפנה לדומיין ישן של החברה.
    מסתבר שלפני כמה חודשים, צוות הIT עשה מיגרציה לשרת (או שלא ידעתי על זה, או שפיספסתי את זה).

    ההיסטוריה של SQL LOGS בשרת נשמרת חודשיים אחורה, לכן אני לא יכולה לראות אם באמת מהרגע בו שינו את הדומיין התחילה אותה הודעת השגיאה, אבל יש בסיס להניח שכן.
    יצרתי יוזר של "שם המחשב + $" עם הדומיין החדש ונתתי לו את אותן הרשאות כמו ליוזר הקודם

    אני ממשיכה לנטר את הלוגים כדי לראות אם זה יופיע שוב.
    וחוץ מזה, אני הערב מחליפה את אותו יוזר Network Service ביוזר אחר ייעודי שיצרנו.

    אם זו באמת הייתה הבעיה, לא נראה את השגיאה הזו בלוגים יותר.
    אם זו לא הבעיה, אז אני צופה שאראה את השגיאה שוב השבוע. אם באמת אראה אותה שוב, זה יכול להיות עקב יוזר נוסף שמשתמש ב-DOMAIN הישן, או בבעיה אחרת שאצטרך לחקור....

    יום שלישי 19 פברואר 2013 08:24
  • הי רוני,

    תודה על העדכון המפורט.

    נשמח לשמוע עדכונים נוספים בהמשך במידה ותגלי משהו חדש...

    שיהיה כיף!

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    יום רביעי 20 פברואר 2013 04:37
    מנחה דיון