PracticU

הרשאות על Stored Procedure

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › הרשאות על Stored Procedure
מילון מושגים:
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.
פרוצדורה מאוחסנת - קטע קוד SQL שמור במסד הנתונים שאפשר להפעיל לפי שם, לביצוע חוזר של פעולות על הנתונים.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
Active Directory - שירות מדריך של מיקרוסופט לניהול מרכזי של משתמשים, מחשבים והרשאות ברשת ארגונית מבוססת דומיין.
Northwind - מסד נתונים לדוגמה של מיקרוסופט, המדמה חברת מסחר ומשמש ללימוד ולהדגמת שאילתות SQL.
אימות - תהליך שמוודא שהמשתמש או המערכת הם מי שהם טוענים שהם, בדרך כלל באמצעות סיסמה, קוד או תעודה.
SQL Server - מערכת ניהול מסדי נתונים יחסיים של מיקרוסופט, הנשלטת בשפת T-SQL.

הרשאות על Stored Procedure
בשיעור מוסבר איך מגדירים הרשאות למשתמשי SQL, ואיך נותנים למשתמש אתר גישה רק להרצת פרוצדורה מסוימת, בלי גישה לטבלאות או לקוד שלה.
השלבים העיקריים
1. הכנת פרוצדורה: כותבים פרוצדורה Employee_Get שמחזירה את שם העובד, כולל שילוב של שם פרטי ושם משפחה בעמודה אחת. עמודת משכורת נשארת מוסתרת.
2. יצירת משתמש SQL: בוחרים Login בשם Web עם סיסמה. אפשר להשבית את מדיניות הסיסמאות של Active Directory עבורו.
3. הרשאות ברמת השרת: נותנים רק את Public, כלומר כניסה לשרת. לא נותנים הרשאות כמו sysadmin, שהיו פותחות את כל הבסיסים.
4. הרשאות ברמת בסיס הנתונים: נותנים למשתמש Public בבסיס Northwind בלבד. גם כאן אין הרשאת קריאה לטבלאות.
5. הרשאה לפרוצדורה: בפרופרטיז של הפרוצדורה, בלשונית Permissions, נותנים ל-Web את ההרשאה Execute בלבד. ההרשאה לא מאפשרת לראות את הקוד.
6. הגדרת אימות: כדי שהתחברות עם משתמש SQL תעבוד צריך לאפשר SQL Server and Windows Authentication mode, ולאחר השינוי לאתחל את שירות SQL Server.
7. בדיקה: המשתמש Web מתחבר ומריץ את הפרוצדורה בהצלחה, אבל לא רואה את הטבלאות ולא את הפרוצדורה עצמה.
פקודות והגדרות
- GRANT EXECUTE ON Employee_Get TO Web
- מילה WITH GRANT לא מומלצת, כי היא נותנת גם את הזכות להעביר את ההרשאה הלאה.
- DENY חוסם הרשאה במפורש, גם אם הרשאה אחרת קיימת.
טעויות נפוצות
- הרשאה ברמת שרת כמו sysadmin נותנת גישה לכל הבסיסים בשרת.
- אחרי שינוי מצב האימות צריך לאתחל את השירות, אחרת ההגדרה לא תיכנס לתוקף.
שימו לב
הרשאה רק להרצת פרוצדורה היא שכבת אבטחה חשובה: גם אם האתר נפרץ, המשתמש לא יכול לגשת ישירות לנתונים.
השיעור הבא בקורס: איך לכתוב נכון Stored Procedure

פרקי ההרצאה: הרשאות על Stored Procedure

  1. 00:00

    מבוא: הרשאות למשתמשים ולפרוצדורות

  2. 00:42

    יצירת פרוצדורה Employee Get

  3. 01:58

    הסתרת עמודת השכר מהמשתמש

  4. 03:16

    יצירת משתמש חדש ברמת SQL

  5. 04:14

    הרשאות ברמת שרת מול ברמת דאטאבייס

  6. 05:29

    הקצאת הרשאה למשתמש Web בדאטאבייס

  7. 06:25

    הרשאת Execute בלבד על הפרוצדורה

  8. 07:01

    Grant, Deny ו-WithGrant

תמלול ההרצאה: הרשאות על Stored Procedure

הטקסט המלא של הדקות הראשונות בהרצאה «הרשאות על Stored Procedure» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:18

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

  3. 00:30

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

  4. 00:45

    אני רוצה רק לעשות שתראה לי employees, נניח כוכבית. בואו נראה. employees, בואו נראה.

  5. 01:00

    יש לנו employees. עכשיו בואו נוסיף פה איזושהי עמודה סודית. נניח שאנחנו רוצים להחביא אותה. אנחנו לא רוצים את כל העמודות, אנחנו רוצים רק first name ו-last name.

  6. 01:13

    בסדר גמור, נעשה first name, פלוס, נעשה את זה כאילו שזאת עמודה אחת, נדביק את שתי העמודות ביחד, last name, אוקיי? ונניח אנחנו רוצים, אתם יודעים מה?

  7. 01:29

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

  8. 01:40

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

  9. 01:58

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

  10. 02:15

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

  11. 02:25

    אני רוצה לתת להם רק לגשת לשתי העמודות האלו. אני לא רוצה לתת להם הרשאות לראות את כל העמודות, כי יש לי פה עמודה סודית של משכורות, כן?

  12. 02:45

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

  13. 03:10

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

  14. 03:38

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

  15. 04:00

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

  16. 04:19

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

  17. 04:37

    ממש אני לא רוצה לתת ליוזר של ווב את כל הגישה לכל הזה. זה למעשה להיות אדמיניסטרטור על כל השרת. אני לא רוצה לתת, כי אני בונה יוזר ל-Web.

  18. 04:50

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

  19. 05:05

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

  20. 05:17

    אני נותן לו רק להיכנס. נתתי לו רק להיכנס. אני לא רוצה לתת לו לקרוא את הנתונים, נותן לו רק להיכנס. אז יש לי עכשיו וב.

  21. 05:28

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

  22. 05:42

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

  23. 05:54

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

  24. 06:14

    איפה ה-Stored Procedures שעשינו איתכם ביחד הזה? אתם רואים, אנחנו יכולים לקרוא אותה. אנחנו יכולים לקרוא אותה, לשנות אותה, לראות איך היא כתובה.

  25. 06:25

    אנחנו באים ל-Stored Procedure הזאת, עושים פרופרטיז עליה, הולכים ל-Permissions ואומרים שיוזר בשם Web, יוזר בשם Web, על האובייקט Employee-Get, שימו לב, אנחנו ברמת האובייקט הבודד, אנחנו ברמת Employee-Get, User-Web, יש להרשאה רק לעשות Execute.

  26. 06:50

    מותר לו רק להריץ אותה. אפילו אסור לו לראות את ה-Definition שלה, איך היא מוגדרת, את הקוד שלה. הוא לא יכול לראות איך היא בנויה מבפנים. הוא יכול רק לעשות לה Execute.

  27. 07:01

    גרנט זה אומר שזה מה שמותר לו. דיני זה אומר שאסור לו, כן? אם אין כלום, אז גם ככה אסור לו. דיני זה איסור מפורש.

  28. 07:13

    WithGrant אומר שמותר לו להריץ אותה וגם מותר לו לחלק את ההרשאה הזאת ליוזרים אחרים. אני אף פעם לא נותן WithGrant, כל מי שרוצה הרשאות שיבוא אליי, אוקיי? אז אני נותן לו רק Grant.

  29. 07:27

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

  30. 07:49

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

  31. 08:16

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

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: הכל על Stored Procedure

ההרצאה הבאה: איך לכתוב נכון Stored Procedure

הרצאות קשורות מקורסים אחרים

  • קריאה ל-Stored Procedure
  • שימוש ב-Stored Procedure - על-ידי DTO
  • הרשאות על קבצים - חלק 1
  • הרשאות NTFS

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI