בדף הזה מוסבר איך Cloud SQL פועל עם משתמשים ותפקידים של SQL Server. תפקידים ב-SQL Server מאפשרים לכם לקבוע את הגישה והיכולות של משתמשים שניגשים למכונה של SQL Server.
במאמר יצירה וניהול של משתמשים מוסבר איך יוצרים ומנהלים משתמשים ב-Cloud SQL.
תפקידים ומשתמשים ב-SQL Server
תפקידי SQL Server יכולים להיות תפקיד יחיד או לפעול כקבוצת תפקידים.
משתמש הוא תפקיד עם יכולת להתחבר (לתפקיד יש את ההרשאה LOGIN). לכל התפקידים שנוצרים על ידי Cloud SQL יש את ההרשאה LOGIN, ולכן Cloud SQL משתמש במונחים "תפקיד" ו "משתמש" באופן חלופי. עם זאת, אם יוצרים תפקיד באמצעות כלי לקוח שתואם ל-SQL Server, התפקיד לא בהכרח מקבל את ההרשאה LOGIN.
ב-Cloud SQL ל-SQL Server, הגישה מוגבלת לתפקידי שרת מסוימים שמספקים הרשאות מתקדמות. דוגמאות לתפקידים האלה: DbRootRole, serveradmin, securityadmin, setupadmin, diskadmin ו-dbcreator.
לכל המשתמשים ב-SQL Server חייבת להיות סיסמה. לכן, אי אפשר להתחבר עם משתמש שאין לו סיסמה.
משתמשי-על ופרוצדורות מאוחסנות של המערכת
Cloud SQL ל-SQL Server הוא שירות מנוהל, ולכן הוא מגביל את הגישה לטבלאות ולפרוצדורות מאוחסנות מסוימות במערכת שנדרשות בשבילן הרשאות מתקדמות. ב-Cloud SQL אי אפשר ליצור משתמשים עם הרשאות של משתמש-על או לקבל גישה אליהם.
משתמשי SQL Server שמוגדרים כברירת מחדל
כשיוצרים מכונה חדשה של Cloud SQL ל-SQL Server, משתמש ברירת המחדל sqlserver כבר נוצר בשבילכם, אבל אתם צריכים להגדיר את הסיסמה שלו.
המשתמש sqlserver הוא חלק מהתפקיד CustomerDbRootRole, וההרשאות שלו כוללות:
ALTER ANY CONNECTIONALTER ANY LOGINALTER ANY SERVER ROLEALTER SERVER STATEALTER TRACECONNECT SQLCREATE ANY DATABASECREATE SERVER ROLEVIEW ANY DATABASEVIEW ANY DEFINITIONVIEW SERVER STATE
אפשר גם להוסיף את cloudsql enable linked servers למכונה אם רוצים להשתמש בה עם שרתים מקושרים. הדגל הזה מעניק לשרת את ההרשאה הבאה:
ALTER ANY LINKED SERVER
אם אתם רוצים לייצא פרטי התחברות, גיבובים של סיסמאות ומזהי SID של SQL Server, אתם יכולים גם להוסיף את cloud sql enable sp_help_revlogin למכונה. הדגל הזה מתקין את הפרוצדורה המאוחסנת sp_help_revlogin במסד הנתונים msdb ונותן למשתמש sqlserver הרשאה להריץ אותה.
מתן הרשאות לשרת
כשנותנים הרשאות באמצעות פקודת GRANT, צריך להעביר את CustomerDbRootRole, למשל, כערך של grantor_principal.
הדוגמה הבאה של GRANT ALTER ANY LOGIN היא תקינה:
GRANT ALTER ANY LOGIN TO [Account] AS CustomerDbRootRole
הדוגמה הבאה של GRANT ALTER ANY LOGIN לא תקינה:
GRANT ALTER ANY LOGIN TO [Account]
משתמשים אחרים ב-SQL Server
אתם יכולים ליצור משתמשים אחרים ב-SQL Server או תפקידים. כל המשתמשים שאתם יוצרים באמצעות Cloud SQL מקבלים את אותן הרשאות למסד הנתונים כמו ההתחברות של sqlserver. עם זאת, אם אתם משתמשים בתהליך אחר כדי ליצור משתמש (במקום ליצור אותו באמצעות Cloud SQL), למשתמש לא יהיו אותן הרשאות כמו לחשבונות האדמין של הלקוח או למשתמש sqlserver. לדוגמה, אם משתמשים בתהליך יצירת פרטי כניסה ומוסיפים את פרטי הכניסה לתפקיד השרת CustomerDbRootRole, למשתמש לא יהיו אותן הרשאות כמו לחשבונות האדמין של הלקוח או למשתמש sqlserver. לכן, אתם יכולים להשתמש ב-Cloud SQL כדי ליצור משתמש אם אתם רוצים שלמשתמש יהיו אותן הרשאות למסד הנתונים כמו להתחברות של sqlserver.
כדי לאמת את ההבדל בהרשאות בין שני חשבונות, אתם יכולים להשתמש בפונקציה
sys.fn_my_permissions.
ייבוא של מסדי נתונים: הרשאות בעלים
כשמייבאים מסד נתונים, הטיפול בבעלים משתנה בהתאם לסוג הבעלים:
- לפרטי התחברות קיימים שהם לא
sa: הבעלים נשארים ב-Cloud SQL, ונוצר משתמש בשםsqlserverשממופה לפרטי ההתחברותsqlserver. Cloud SQL מעניק את ההרשאותCONTROLו-ALTER ANY USERלמשתמשsqlserver. - לגבי פרטי התחברות לא ידועים או פרטי התחברות שנוצרו על ידי המערכת: Cloud SQL מעביר את הבעלות על מסד הנתונים לפרטי ההתחברות של
sqlserver.
שינוי הרשאות של משתמשים
הפקודה ALTER ROLE זמינה לשינוי הרשאות המשתמשים. אם יוצרים משתמש חדש עם לקוח, אפשר לשייך אותו לתפקיד אחר או לתת לו הרשאות אחרות.
פתרון בעיות
שגיאה בגישה למסד הנתונים
כשמנסים לגשת למסד נתונים שיצרתם, כמשתמש שיצרתם, מתקבלת השגיאה הבאה:
The server principal USERNAME is not able to access the database DATABASE_NAME under the current security context.
יכול להיות שהבעיה היא
המשתמש לא חבר במסד הנתונים.
דברים שכדאי לנסות
מתחברים למסד הנתונים בתור המשתמש sqlserver ומוסיפים את המשתמש החדש, ואז נותנים למשתמש החדש את התפקיד db_owner במסד הנתונים. לדוגמה:
EXEC sp_adduser 'user'; EXEC sp_addrolemember 'db_owner', 'user'