בקרת גישה עבור משתמשים ותפקידים ב - SQL

אבטחה חשובה ביותר למנהלי מסדי נתונים המבקשים להגן על ג 'יגה בייט של נתונים עסקיים חיוניים מעיניהם החטטניות של זרים בלתי מורשים ומנסים פנימיים לחרוג מסמכותם. כל מערכות ניהול מסדי נתונים יחסיים מספקים מעין מנגנוני אבטחה מהותיים שנועדו למזער את האיומים הללו. הן נעות בין הגנת הסיסמה הפשוטה שמציע Microsoft Access למבנה המשתמש / התפקיד המורכב הנתמך על ידי מסדי נתונים יחסיים מתקדמים כמו Oracle ו- Microsoft SQL Server. מאמר זה מתמקד במנגנוני האבטחה המשותפים לכל מסדי הנתונים המיישמים את שפת השאילתות המובנית (או SQL ). יחד, נלך בתהליך של חיזוק בקרת גישה לנתונים והבטחת הבטיחות של הנתונים שלך.

משתמשים

מסדי נתונים מבוססי שרת תומכים במושג משתמש הדומה לזה המשמש במערכות הפעלה של מחשבים. אם אתה מכיר את ההיררכיה של משתמשים / קבוצות שנמצאות ב- Microsoft Windows NT וב- Windows 2000, תגלה כי קבוצות המשתמשים / תפקידים הנתמכים על-ידי SQL Server ו- Oracle דומים מאוד.

מומלץ מאוד ליצור חשבונות משתמש בודדים באתר עבור כל אדם אשר יהיה לגשת למסד הנתונים שלך. זה אפשרי מבחינה טכנית לשתף חשבונות בין משתמשים או פשוט להשתמש בחשבון משתמש אחד עבור כל סוג של משתמש זה צריך לגשת למסד הנתונים שלך, אבל אני מאוד להרתיע את הנוהג הזה משתי סיבות. ראשית, הוא יבטל את האחריות האישית - אם משתמש מבצע שינוי למסד הנתונים שלך (נניח בכך שהוא מעניק העלאה של $ 5,000), לא תוכל לעקוב אחורה לאדם מסוים באמצעות שימוש ביומני ביקורת. בנוסף, אם משתמש מסוים עוזב את הארגון שלך וברצונך להסיר את הגישה שלו ממסד הנתונים, תיאלץ לשנות את הסיסמה שכל המשתמשים מסתמכים עליה.

השיטות ליצירת חשבונות משתמש משתנות מפלטפורמה לפלטפורמה ותצטרך להתייעץ עם תיעוד ספציפי ל- DBMS עבור ההליך המדויק. משתמשי Microsoft SQL Server צריכים לחקור את השימוש בפרוצדורה המאוחסנת sp_adduser. מנהלי מסד הנתונים של Oracle ימצאו את הפקודה CREATE USER שימושית. ייתכן שתרצה גם לחקור תוכניות אימות חלופיות. לדוגמה, Microsoft SQL Server תומך בשימוש ב- Windows NT Integrated Security. תחת תוכנית זו, משתמשים מזוהים למסד הנתונים על ידי חשבונות המשתמשים שלהם ב- Windows NT ולא נדרשים להזין מזהה משתמש וסיסמה נוספים כדי לגשת למסד הנתונים. גישה זו היא מאוד פופולרי בקרב מנהלי מסד נתונים כי זה משמרת את הנטל של ניהול חשבון לצוות ניהול הרשת והוא מספק את הקלות של כניסה יחידה למשתמש הקצה.

תפקידים

אם אתה נמצא בסביבה עם מספר קטן של משתמשים, סביר להניח שתמצא כי יצירת חשבונות משתמשים והקצאת הרשאות ישירות להם מספיקה לצרכים שלך. עם זאת, אם יש לך מספר גדול של משתמשים, אתה קרוב לוודאי להיות overwhelmed על ידי נטל שמירה על חשבונות ועל הרשאות מתאימות. כדי להקל על נטל זה, מסדי נתונים יחסיים תומכים ברעיון התפקידים. תפקידי מסד נתונים פועלים באופן דומה לקבוצות Windows NT. חשבונות משתמשים מוקצים לתפקידים, וההרשאות מוקצות לתפקיד כמכלול ולא לחשבונות משתמשים נפרדים. לדוגמה, אנו יכולים ליצור תפקיד DBA ולאחר מכן להוסיף את חשבונות המשתמש של צוות הניהול שלנו לתפקיד זה. לאחר שעשינו זאת, אנו יכולים להקצות הרשאה ספציפית לכל המנהלים הנוכחיים (והעתידים) פשוט על ידי הקצאת הרשאה לתפקיד. שוב, נהלים ליצירת תפקידים משתנה מפלטפורמה לפלטפורמה. מנהלי MS SQL Server צריכים לחקור את הפרוצדורה המאוחסנת sp_addrole בעוד DBAs אורקל צריך להשתמש בתחביר יצירה.

מתן הרשאות

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

הנה התחביר של ההצהרה:

GRANT <הרשאות>
[ON

]
אל <משתמש / תפקיד>
[עם אפשרות מענק]

עכשיו, בואו נסתכל על משפט זה שורה אחר שורה. השורה הראשונה, GRANT <הרשאות>, מאפשרת לנו לציין את הרשאות הטבלה הספציפיות שאנו מעניקים. אלה יכולים להיות הרשאות ברמת השולחן (כגון SELECT, INSERT, UPDATE ו- DELETE) או הרשאות מסד נתונים (כגון CREATE TABLE, ALTER DATABASE ו- GRANT). ניתן להעניק יותר מאישור אחד בהצהרה אחת של GRANT, אך הרשאות ברמת השולחן והרשאות ברמת מסד הנתונים אינן יכולות להיות משולבות בהצהרה אחת.

השורה השנייה, ON

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

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

דוגמאות

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

בחר מענק, הוסף, עדכן
על לקוחות
אל DataEntry

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

מענק יצירת טבלה
ל DBA
עם אופציה מענק

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

הסרת הרשאות

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

ביטול [אפשרות מענק עבור] <הרשאות>
על <טבלה>
מתוך <משתמש / תפקיד>

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

בטל מחיקה
על לקוחות
ממרי

וזה כל מה שיש! יש מנגנון נוסף הנתמך על ידי Microsoft SQL Server שראוי להזכיר - הפקודה DENY. ניתן להשתמש בפקודה זו כדי למנוע במפורש הרשאה למשתמש שעלול להיות להם, באמצעות חברות תפקיד נוכחית או עתידית. הנה התחביר:

DENY <הרשאות>
על <טבלה>
<משתמש / תפקיד

דוגמאות

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

DENY DELETE
על לקוחות
אל מרי

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

בטל מחיקה
על לקוחות
ממרי

תבחין כי פקודה זו היא בדיוק זהה לזה המשמש להסרת אישור חיובי. זכור כי פקודות DENY ו- GRANT פועלות באופן דומה בסגנון mdash, הן יוצרות הרשאות (חיוביות או שליליות) במנגנון בקרת הגישה למסד הנתונים. הפקודה REVOKE מסירה את כל ההרשאות החיוביות והשליליות עבור המשתמש שצוין. לאחר פקודה זו הוצא, מרי יוכלו למחוק שורות מהשולחן אם היא חברה בתפקיד שיש לו את ההרשאה. לחלופין, ניתן להעניק פקודת GRANT כדי לספק את הרשאת DELETE ישירות לחשבון שלה.

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