הרשאות משתמשים SQL SERVER

24sharon

New member
הרשאות משתמשים SQL SERVER

יש לי מסד על הרשת המסד כולל 2 משתמשים: 1. משתמש מנהל מסד dbowner 2. משתמש רשת עם הרשאות קטנות וממוקדות. עברתי טבלה טבלה במסד הנתונים והגדרתי את ההרשאות הרלוונטיות למשתמש הרשת. העניין הוא שאני מעוניינת לתת לו גם אפשרות כניסה לSP. לא מצאתי מקום בו אני מגדירה אפשרות של הרשאות לSP. הSP הנ"ל מבצע שאילתא SELECT על טבלה עם הרשאות, אך אני מקבלת את הודעת השגיאה הבאה:
Msg 229, Level 14, State 5, Procedure spGetBestSeller, Line 1 EXECUTE permission denied on object 'spGetBestSeller', database 'supersefer', schema 'adminUser'.​
איך אפשר לתת הרשאות גם לSP. תודה! ועוד שאלה קטנטנות על הדרך נאמר יש לי טבלה עם הרשאות select * from tbl עובדת מצוין כאשר יצרתי משתמש מוגבל אני צריכה לכתוב את "יוצר" הטבלה select * from abc.tbl מדוע זה כך? תודה
 

mobyboy

New member
הרשאות יש לתת ל - view

אם את רוצה לתת הרשאה לשאילתה, את צריכה להגדיר view ולא stored procedure למשל: create view v1 as select * from tblx where field1=123 ואז את תוכלי לבצע grant לאותו view
 
תשובות

אפשר לתת הרשאה למשתמש להרצת sp ע"י הפקודה grant:
grant execute on adminUser.spGetBestSeller to MyUser​
כמובן שבמקום MyUser צריך לכתוב את המשתמש או הrole, שרוצים לתת לו הרשאות. ניתן גם להשתמש בGUI ע"מ לתת הרשאות. עכבר ימין על שם הSP, בתפריט לבחור properties ואז לנווט בחלון שנפתח. לגבי שאלה 2. בSQL Server 2000 (ובגרסאות קודמות) שם המשתמש שיצר את האוביקט היה חלק משם האובייקט. למעשה שם האובייקט מורכב מ4 חלקים - שם השרת, שם בסיס הנתונים, שם הowner והשם שניתן במשפט הcreate. נניח שאני מתחבר בשם hovev לבסיס הנתונים MyDB, שנמצא על שרת MyServer, ויצרתי טבלה שנקראת MyTable. השם המלא של הטבלא הוא: MyServer.MyDB.Hovev.Mytable. הסיבה שאף פעם לא פונים בשם המלא לאוביקטים, היא שיש לנו ערכי ברירת מחדל. במידה ולא מציינים את שם השרת ואת שם בסיס הנתונים, ברירות המחדל הן שם השרת ושם בסיס הנתונים, שאליהן מחוברים. במידה ולא מציינים את שם הowner, ברירת המחדל היא הuser שאיתו מתחברים. במידה ולא מוצאים אובייקט בבעלות אותו user נעשה חיפוש על אובייקט עם שם זהה בבעלות dbo. אם גם אובייקט כזה לא נמצא, מקבלים הודעת שגיאה. אם נמשיך את הדוגמא שלי, המשתמש hovev יכול להתחבר לבסיס הנתונים ולבצע שאילתה על הטבלה MyTable בלי לציין את שם הowner שלה כי קודם כל מתבצע חיפוש על אובייקטים בבעלותו. כל משתמש אחר שרוצה לעבוד עם אותה טבלה, חייב לציין את שם הowner ולקרוא לה hovev.MyTable. במידה והowner של הטבלה היה dbo, לא היתה חובה לציין את שם הowner של הטבלה, וכל המשתמשים יכלו להגיע לטבלה עם ציון השם שלה בלבד (כל עוד אין טבלה עם שם זהה בבעלותם).
 

24sharon

New member
../images/Emo47.gif

אנשי התכנות ש"המרו" את פקודות SQL לטפסי DESIGN, פשוט "נרדמו בשמירה" ושכחו לתת אפשרות של הרשאות על הSP. (מצורפת תמונת מסך) אין את האפשרות properties כמו שיש בשאר הטבלאות, והשאילתות. אני כבר נמצאת כאן בפורום לא מעט זמן, ועל יד אחת ניתן לספור את אנשי המקצוע :) רוב תודות. שבוע טוב
 
למעלה