הבלוג של גרי רשף

19/07/2011

Execute As User/Login

Filed under: Uncategorized — גרי רשף @ 19:25

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

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

לא אחזור על מה שכתוב שם ונגיע ישירות לנושא: לי אין בעייה להריץ את הפרוצדורות שכתבתי, לשלוף נתונים מהטבלאות שיצרתי, ואף לבצע פעולות שעלולות להתגלות כבעייתיות כמו יצירת טבלה או ביצוע Truncate. וכל כך למה? מפני שאני Sysadmin ויש לי הרשאות בסגנון "חופשי חודשי"- מה שאני רוצה, כמה שאני רוצה, מתי שאני רוצה. דא עקא שהמשתמשים מפשוטי העם אינם נהנים מזכויות יתר נדיבות כמוני, מסתפקים בפירורים ותלויים בחסדי. מזלם שאני איש רחום וחנון ארך אפיים ורב חסד, ובטוב ליבי אני מסכים לתת להם הרשאות על פי צרכיהם- לזה הרשאת שליפה מטבלה, לזה זכות לעיין בקוד של פרוצדורה, ולמי שהתחנף מספיק – רשות ליצור טבלה בעצמו..

וברצינות: הבעייה היא שלפני שאני משחרר גרסה לסביבת הייצור- עלי לוודא שהם יצליחו להפעיל אותה ושניתנו כל ההרשאות הנדרשות, ולשם כך אני מחליף את זהותי-

Execute As User='MyDommain\Ploni';

Go

 

כעת מריץ את הפרוצדורה עם ההרשאות של פלוני בלבד-

Exec MyProc;

Go

 

ולסיום חוזר לעצמי-

Revert;

Go

 

בפוסט שציינתי בהתחלה סיפרתי כיצד נכשלתי בנסיוני לפנות כך דרך Linked Server לשרת אחר, ותירצתי זאת בכך שפקודת ה-Execute As עקפה את ההגדרה של ה-Linked Server שכלל הזדהות בשם ובסיסמה לשם התחברות לשרת השני, ולכן נכשלה.

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

ה-User הוא אובייקט ששייך לדטבייס ספציפי, והוא לרוב נוצר מ-Login שזה אובייקט ברמת השרת. לרוב מטעמי נוחות אנחנו ניתן ל-User אותו שם כמו ל-Login ממנו הוא נוצר, ונשכפל אותו במספר דטבייסים; אך עדיין- בכל דטבייס יהיה User מקומי שהמערכת אינו מזהה אותו בדטבייסים אחרים (למרות ששם יש גם User באותו השם).

הבעייה אינה קורית כשמזדהים בתור Login במקום בתור User-

Execute As Login='MyDommain\Ploni';

 

Go

 

כעת גם הבעייה מהפוסט הקודם נפתרה (פנייה מהשרת הנוכחי לאחר), וגם הבעייה הנוכחית (פנייה מהדטבייס הנוכחי לאחר).

לסיכום- כל עוד לא מדובר במקרה מיוחד אלא במקרה הרגיל בו ה-User נוצר מה-Login – יש לבדוק את נושא ההרשאות באמצעות Execute As Login.

מודעות פרסומת

תגובה אחת »

  1. אוהבים אותך גרי!

    תגובה של מאיר דודאי — 19/07/2011 @ 19:48


RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

יצירה של אתר חינמי או בלוג ב־WordPress.com.

%d בלוגרים אהבו את זה: