DCSIMG
Execute As & With Execute As - גרי רשף

Execute As & With Execute As

האופרטור Execute As מאפשר לבצע פעולות תחת זהות אחרת מזו שלנו, ללא צורך להתחבר בזהות אחרת,

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

או לחילופין- להגדיר שקוד מסויים ירוץ בזהות גבוהה מזו של המשתמש.

כמובן שבעל הרשאות נמוכות לא יכול להשתמש ב-Execute As כדי לאמץ לעצמו זהות של System Administartor..

דוגמה- ניצור Login חדש במערכת ו-User המשוייך לו:

Use tempdb;
Go
 
Create Login MyLogin With Password='1234',Check_Policy=Off;
Go
 
Create User MyUser For Login MyLogin;
Go

כעת ניצור פרוצדורה פשוטה ששולפת את פרטי המשתמש שמריץ אותה ונעניק ל-User הנ"ל הרשאה להריץ אותה:

Create Proc MyProc1 As
Select sUser_name() [sUser_name()],
       User_name() [User_name()];
Go
 
Grant Execute On MyProc1 To MyUser;
Go

כעת נריץ אותה תוך שאנחנו מזדהים כ-MyUser, ומבטלים לאחר מכן את ההזדהות באמצעות Revert:

Execute As User='MyUser';
Go
 
Exec MyProc1;
Go
 
Revert;
Go

clip_image002

כפי שאפשר לראות- המערכת זיהתה את מי שמריץ את הפרוצדורה בתור MyLogin & MyUser הנ"ל ולא בתור האדמיניסטראטור (אני), וזו דרך טובה לבדוק אם יש למשתמשים הרשאות מתאימות כדי שלא נקבל הודעות שגיאה לאחר העלייה לאוויר.

אם אריץ אותה בזהותי האמיתית (ללא שימוש ב-Execute As) היא תזהה אותי כצפוי:

Exec MyProc1;
Go

clip_image004

כעת נבצע פעולה הפוכה- ניצור פרוצדורה שבתוכה יופיע האופרטור Execute As כך שמי שמריץ יזוהה בתור ה-Owner שלה, גם אם אינו אלא משתמש פשוט, וניתן הרשאות הרצה ל-MyUser (לא לטעות- המשתמש החדש עדיין זקוק להרשאות הרצה):

Create Proc MyProc2 With Execute As Owner As
Select sUser_name() [sUser_name()],
       User_name() [User_name()];
Go
 
Grant Execute On MyProc2 To MyUser;
Go

כעת אריץ אותה תחת הזהות של MyUser, כפי שהרצתי את הפרוצדורה הראשונה בהתחלה:

Execute As User='MyUser';
Go
 
Exec MyProc2;
Go
 
Revert;
Go

clip_image006

אפשר להבין מכך שבלי לתת ל-MyUser הרשאות מפורשות, כל מה שהפרוצדורה תבצע יהיה תחת הזהות של ה-Admin.

תוכן התגובה

# Impersonation: מי מפעיל את הפרוצדורה?

Friday, February 17, 2012 11:06 AM by גרי רשף

פרוצדורות וסקריפטים אחרים כוללים אופציה לבצע אותם בזהות אחרת בעזרת אופציית Execute As, בעיקר בשל בעיית

שלח תגובה

(שדה חובה) 
(שדה חובה) 
(אופציונלי)
(שדה חובה) 

Enter the numbers above: