יצירה וניהול של סכימות עם שם

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

לפני שמתחילים

כדי לבצע את הפעולות שמתוארות בדף הזה, אתם צריכים:

יצירת סכימה עם שם

הפקודה CREATE SCHEMA (GoogleSQL ו-PostgreSQL) משמשת ליצירת סכימה עם שם.

  1. במסוף Google Cloud , פותחים את הדף Spanner.

    כניסה ל-Spanner

  2. בוחרים מופע מהרשימה.

  3. בוחרים מסד נתונים.

  4. בתפריט הניווט, לוחצים על Spanner Studio.

  5. פותחים כרטיסייה חדשה בלחיצה על New SQL editor tab או על New tab.

  6. בכרטיסייה עורך, מזינים את ה-DDL.

    GoogleSQL

    מריצים את ההצהרה CREATE SCHEMA כדי ליצור את הסכימה עם השם. לדוגמה:

    CREATE SCHEMA sch1;
    

    מוסיפים אובייקטים של מסד נתונים בסכימה שצוין השם שלה, לדוגמה:

    CREATE SEQUENCE sch1.sequence OPTIONS (
      sequence_kind = 'bit_reversed_positive'
    );
    
    CREATE TABLE Singers (
      SingerId INT64 NOT NULL,
      FirstName STRING(1024),
      LastName STRING(1024),
      SingerInfo BYTES(MAX),
    ) PRIMARY KEY(SingerId);
    
    CREATE INDEX indexOnSingers ON Singers(FirstName);
    
    CREATE TABLE Albums (
      SingerId INT64 NOT NULL,
      AlbumId INT64 NOT NULL,
      AlbumTitle STRING(MAX),
    ) PRIMARY KEY(SingerId, AlbumId),
      INTERLEAVE IN PARENT Singers ON DELETE CASCADE;
    
    CREATE TABLE Songs (
      SingerId INT64 NOT NULL,
      AlbumId INT64 NOT NULL,
      TrackId INT64 NOT NULL,
      SongName STRING(MAX),
    ) PRIMARY KEY(SingerId, AlbumId, TrackId),
      INTERLEAVE IN PARENT Albums ON DELETE CASCADE;
    
    CREATE TABLE sch1.Singers (
      SingerId INT64 NOT NULL,
      FirstName STRING(1024),
      LastName STRING(1024),
      SingerInfo BYTES(MAX),
    ) PRIMARY KEY(SingerId);
    
    CREATE INDEX sch1.indexOnSingers ON sch1.Singers(FirstName);
    
    CREATE TABLE sch1.Albums (
      SingerId INT64 NOT NULL,
      AlbumId INT64 NOT NULL,
      AlbumTitle STRING(MAX),
    ) PRIMARY KEY(SingerId, AlbumId),
      INTERLEAVE IN PARENT sch1.Singers ON DELETE CASCADE;
    
    CREATE TABLE sch1.Songs (
      SingerId INT64 NOT NULL,
      AlbumId INT64 NOT NULL,
      TrackId INT64 NOT NULL,
      SongName STRING(MAX),
    ) PRIMARY KEY(SingerId, AlbumId, TrackId),
      INTERLEAVE IN PARENT sch1.Albums ON DELETE CASCADE;
    
    CREATE VIEW sch1.SingerView SQL SECURITY INVOKER
      AS Select s.FirstName, s.LastName, s.SingerInfo
      FROM sch1.Singers AS s WHERE s.SingerId = 123456;
    
    CREATE VIEW SingerView SQL SECURITY INVOKER
      AS Select s.FirstName, s.LastName, s.SingerInfo
      FROM Singers AS s WHERE s.SingerId = 123456;
    

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

    PostgreSQL

    מריצים את ההצהרה CREATE SCHEMA כדי ליצור את הסכימה עם השם. לדוגמה:

    CREATE SCHEMA sch1;
    

    מוסיפים אובייקטים של מסד נתונים בסכימה שצוין השם שלה, לדוגמה:

    CREATE SEQUENCE sch1.sequence BIT_REVERSED_POSITIVE
    CREATE TABLE sch1.singers(
      singer_id bigint primary key, album_id bigint default(nextval('sch1.sequence')))
    CREATE TABLE sch1.albums(k bigint default(nextval('sch1.sequence'))primary key, album_id bigint)
    
    CREATE VIEW sch1.singer_view SQL SECURITY INVOKER
      AS SELECT * FROM sch1.singers
    CREATE INDEX index_singers ON TABLE sch1.singers(album_id)
    

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

  7. אפשר לראות את הסכימות עם השמות והאובייקטים הקשורים בחלונית Explorer.

הוספת בקרת גישה פרטנית לסכימה עם שם

הצהרות ה-DDL הבאות מוסיפות בקרת גישה פרטנית לסכימה עם שם:

  • ההרשאה USAGE מעניקה הרשאות לאובייקט הסכימה. הרשאת USAGE מוענקת כברירת מחדל לסכימה שמוגדרת כברירת מחדל. עם זאת, אפשר לבטל את ההרשאה USAGE בסכימת ברירת המחדל. חשוב להיזהר כשמבטלים גישה, כי משתמשים ותפקידים שהגישה שלהם בוטלה מאבדים את כל הגישה לאובייקטים בסכימה שמוגדרת כברירת מחדל.
  • ההצהרה ALL מבצעת הענקת הרשאות בכמות גדולה על כל האובייקטים מסוג מסוים בסכימה.
  • מילת המפתח DEFAULT מתייחסת לסכימה שמוגדרת כברירת מחדל בהצהרות FGAC DDL.

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

  • GRANT SELECT ON TABLE TABLE_NAME IN SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME (GoogleSQL ו-PostgreSQL) מעניקה לתפקיד הרשאה לקרוא מטבלה ספציפית בסכימה. לחלופין, אפשר להעניק לתפקיד הרשאה לקרוא מכל הטבלאות בסכימה באמצעות מילת המפתח ALL. לדוגמה, GRANT SELECT ON ALL TABLES IN SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME. ההצהרה ALL שלמעלה חלה רק על טבלאות שקיימות בזמן הביצוע של ההצהרה.
  • GRANT USAGE ON SCHEMA SCHEMA_NAME TO ROLE ROLE_NAME (GoogleSQL ו-PostgreSQL) מעניקה לתפקיד הרשאה לגשת לאובייקטים שנכללים בסכימה, אם גם ההרשאות של האובייקט שנכלל מתאימות. לדוגמה, כדי לקרוא מטבלה בסכימה, צריך הרשאת USAGE בסכימה והרשאת SELECT בטבלה.
  1. במסוף Google Cloud , פותחים את הדף Spanner.

    כניסה ל-Spanner

  2. בוחרים מופע מהרשימה.

  3. בוחרים מסד נתונים.

  4. בתפריט הניווט, לוחצים על Spanner Studio.

  5. פותחים כרטיסייה חדשה בלחיצה על New SQL editor tab או על New tab.

  6. בכרטיסייה עורך, מזינים את ה-DDL.

    GoogleSQL

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

    CREATE ROLE role1
    CREATE ROLE role2
    

    נותנים את התפקיד לטבלאות שמשתמשות בסכימה עם שם באמצעות GRANT ALL. בדוגמה הבאה, אנחנו משתמשים ב-sch1 בשביל הסכימה עם השם וב-role1 בשביל התפקיד.

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO ROLE role1
    

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

    GRANT USAGE ON SCHEMA sch1 TO ROLE role1, role2
    

    PostgreSQL

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

    CREATE ROLE role1
    CREATE ROLE role2
    

    נותנים את התפקיד לטבלאות שמשתמשות בסכימה עם שם באמצעות GRANT ALL. בדוגמה הבאה, אנחנו משתמשים ב-sch1 בשביל הסכימה עם השם וב-role1 בשביל התפקיד.

    GRANT SELECT ON ALL TABLES IN SCHEMA sch1 TO role1
    

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

    GRANT USAGE ON SCHEMA sch1 TO role1, role2
    

הוספה וביטול של בקרת גישה פרטנית לסכימה שמוגדרת כברירת מחדל

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

הוספת בקרת גישה פרטנית לסכימה שמוגדרת כברירת מחדל

כברירת מחדל, לכל המשתמשים והתפקידים יש את ההרשאה USAGE בסכימה שמוגדרת כברירת מחדל.

  1. במסוף Google Cloud , פותחים את הדף Spanner.

    כניסה ל-Spanner

  2. בוחרים מופע מהרשימה.

  3. בוחרים מסד נתונים.

  4. בתפריט הניווט, לוחצים על Spanner Studio.

  5. פותחים כרטיסייה חדשה בלחיצה על New SQL editor tab או על New tab.

  6. בכרטיסייה עורך, מזינים את ה-DDL.

    GoogleSQL

    בדוגמה הבאה, אנחנו מעניקים גישה לכל הטבלאות ל-role1.

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO ROLE role1
    

    PostgreSQL

    בדוגמה הבאה, אנחנו מעניקים גישה לכל הטבלאות ל-role1.

    GRANT SELECT ON ALL TABLES IN SCHEMA default TO role1
    

ביטול בקרת גישה פרטנית לסכימה שמוגדרת כברירת מחדל

אפשר לבטל את הרשאות ברירת המחדל של בקרת גישה מדויקת בסכימה של ברירת המחדל באמצעות הפקודה REVOKE USAGE.

  1. במסוף Google Cloud , פותחים את הדף Spanner.

    כניסה ל-Spanner

  2. בוחרים מופע מהרשימה.

  3. בוחרים מסד נתונים.

  4. בתפריט הניווט, לוחצים על Spanner Studio.

  5. פותחים כרטיסייה חדשה בלחיצה על New SQL editor tab או על New tab.

  6. בכרטיסייה עורך, מזינים את ה-DDL.

    GoogleSQL

    REVOKE USAGE ON SCHEMA DEFAULT FROM ROLE public
    

    PostgreSQL

    REVOKE USAGE ON SCHEMA public FROM public
    
  7. אחרי שמריצים את הפקודה הקודמת, צריך להעניק הרשאות באופן מפורש לתפקידים שנדרשת להם גישה לסכימה שמוגדרת כברירת מחדל. בדוגמה הבאה, אנחנו מעניקים הרשאות ל-role1.

    GoogleSQL

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

    GRANT USAGE ON SCHEMA default to ROLE role1
    

    PostgreSQL

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

    GRANT USAGE ON SCHEMA public To role1
    

צפייה בסכימות עם שמות

  1. בוחרים מופע מהרשימה.
  2. בוחרים מסד נתונים.
  3. בתפריט הניווט, לוחצים על Spanner Studio.
  4. בחלונית Explorer, לוחצים על המתג כדי להרחיב את התפריט הנפתח Schemas.

אפשר גם להשתמש ב-SQL כדי להציג את כל הסכימות בטבלה information_schema.schemata.

בדוגמה הבאה מוצגות סכימות של שמות תצוגות והבעלים שלהן:

SELECT schema_name, schema_owner
  FROM information_schema.schemata
  ORDER BY schema_owner

בהצהרה הזו מופיעה רשימה של סכימות ובעלים, בדומה לרשימה הבאה:

public spanner_admin
products  spanner_admin
analytics  spanner_admin
logs  spanner_admin
pg_catalog spanner_system
information_schema spanner_system
spanner_sys   spanner_system

מחיקת סכימה עם שם

הפקודה DROP SCHEMA (GoogleSQL ו-PostgreSQL) משמשת להסרת סכימה עם שם.

  1. במסוף Google Cloud , פותחים את הדף Spanner.

    כניסה ל-Spanner

  2. בוחרים מופע מהרשימה.

  3. בוחרים מסד נתונים.

  4. בתפריט הניווט, לוחצים על Spanner Studio.

  5. פותחים כרטיסייה חדשה בלחיצה על New SQL editor tab או על New tab.

  6. בכרטיסייה עורך, מזינים את ה-DDL.

    GoogleSQL

    בדוגמה הבאה, אנחנו משמיטים את sch1.

    DROP SCHEMA IF EXISTS sch1;
    

    PostgreSQL

    בדוגמה הבאה, אנחנו משמיטים את sch1.

    DROP SCHEMA IF EXISTS sch1;
    

המאמרים הבאים