

 Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai Patch 198. Python yang ada UDFs akan terus berfungsi hingga 30 Juni 2026. Untuk informasi lebih lanjut, lihat [posting blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Tutorial: Membuat peran dan query dengan RBAC
<a name="r_tutorial-RBAC"></a>

Dengan RBAC, Anda dapat membuat peran dengan izin untuk menjalankan perintah yang dulu memerlukan izin pengguna super. Pengguna dapat menjalankan perintah ini, selama mereka diberi wewenang dengan peran yang menyertakan izin ini.

Dalam tutorial ini, Anda menggunakan kontrol akses berbasis peran (RBAC) untuk mengelola izin dalam database yang Anda buat. Anda kemudian terhubung ke database dan kueri database dari dua peran yang berbeda untuk menguji fungsionalitas RBAC.

Dua peran yang Anda buat dan gunakan untuk query database adalah `sales_ro` dan`sales_rw`. Anda membuat data `sales_ro` peran dan kueri sebagai pengguna dengan `sales_ro` peran tersebut. `sales_ro`Pengguna hanya dapat menggunakan perintah SELECT tetapi tidak dapat menggunakan perintah UPDATE. Kemudian, Anda membuat `sales_rw` peran dan data kueri sebagai pengguna dengan `sales_rw` peran tersebut. `sales_rw`Pengguna dapat menggunakan perintah SELECT dan perintah UPDATE.

Selain itu, Anda dapat membuat peran untuk membatasi akses ke perintah tertentu, dan menetapkan peran untuk pengguna super atau pengguna.

**Tugas**
+ [Prasyarat](#tutorial-rbac-prereqs)
+ [Langkah 1: Buat pengguna administrator](#tutorial-rbac-step1)
+ [Langkah 2: Mengatur skema](#tutorial-rbac-step2)
+ [Langkah 3: Buat pengguna hanya-baca](#tutorial-rbac-step3)
+ [Langkah 4: Kueri data sebagai pengguna hanya-baca](#tutorial-rbac-step4)
+ [Langkah 5: Buat pengguna baca-tulis](#tutorial-rbac-step5)
+ [Langkah 6: Kueri data sebagai pengguna dengan peran hanya-baca yang diwariskan](#tutorial-rbac-step6)
+ [Langkah 7: Berikan pembaruan dan masukkan izin ke peran baca-tulis](#tutorial-rbac-step7)
+ [Langkah 8: Kueri data sebagai pengguna baca-tulis](#tutorial-rbac-step8)
+ [Langkah 9: Analisis dan vakum tabel dalam database sebagai pengguna administrator](#tutorial-rbac-step9)
+ [Langkah 10: Potong tabel sebagai pengguna baca-tulis](#tutorial-rbac-step10)
+ [Fungsi sistem untuk RBAC (opsional)](#tutorial-rbac-system-functions)
+ [Tampilan sistem untuk RBAC (opsional)](#tutorial-rbac-system-views)
+ [Gunakan keamanan tingkat baris dengan RBAC (opsional)](#tutorial-rbac-rls)

## Prasyarat
<a name="tutorial-rbac-prereqs"></a>
+ Buat klaster Amazon Redshift atau grup kerja tanpa server yang dimuat dengan database sampel TICKIT. Untuk membuat grup kerja tanpa server, lihat [Memulai gudang data Redshift Tanpa](https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html) Server. Untuk membuat klaster, lihat [Membuat contoh klaster Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-launch-sample-cluster.html). Untuk informasi selengkapnya tentang database sampel TICKIT, lihat[Database sampel](c_sampledb.md).
+ Memiliki akses ke pengguna dengan izin superuser atau administrator peran. Hanya pengguna super atau administrator peran yang dapat memberikan atau mencabut peran. Untuk informasi selengkapnya tentang izin yang diperlukan untuk RBAC, lihat. [Izin sistem untuk RBAC](r_roles-system-privileges.md)
+ Tinjau[Pertimbangan untuk penggunaan peran di RBAC](r_role-usage-notes.md).

## Langkah 1: Buat pengguna administrator
<a name="tutorial-rbac-step1"></a>

Untuk mengatur tutorial ini, Anda membuat peran admin database dan melampirkannya ke pengguna administrator database di langkah ini. Anda harus membuat administrator database sebagai superuser atau administrator peran.

Jalankan semua kueri di editor [kueri Amazon Redshift v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html).

1. Untuk membuat peran administrator db\_admin, gunakan contoh berikut.

   ```
   CREATE ROLE db_admin;
   ```

1. Untuk membuat pengguna database bernama dbadmin, gunakan contoh berikut.

   ```
   CREATE USER dbadmin PASSWORD 'Test12345';
   ```

1. Untuk memberikan peran yang ditentukan sistem bernama sys:dba ke peran db\_admin, gunakan contoh berikut. Ketika diberikan peran sys:dba, pengguna dbadmin dapat membuat skema dan tabel. Untuk informasi selengkapnya, lihat [Peran yang ditentukan sistem Amazon RedshiftPeran dan pengguna yang ditentukan sistem untuk berbagi data](r_roles-default.md).

## Langkah 2: Mengatur skema
<a name="tutorial-rbac-step2"></a>

Pada langkah ini, Anda terhubung ke database Anda sebagai administrator database. Kemudian, Anda membuat dua skema dan menambahkan data ke dalamnya.

1. Connect ke database dev sebagai pengguna dbadmin menggunakan query editor v2. Untuk informasi selengkapnya tentang menghubungkan ke database, lihat [Bekerja dengan editor kueri v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-using.html).

1. Untuk membuat skema database penjualan dan pemasaran, gunakan contoh berikut.

   ```
   CREATE SCHEMA sales;
   CREATE SCHEMA marketing;
   ```

1. Untuk membuat dan menyisipkan nilai ke dalam tabel dalam skema penjualan, gunakan contoh berikut.

   ```
   CREATE TABLE sales.cat(
   catid smallint,
   catgroup varchar(10),
   catname varchar(10),
   catdesc varchar(50)
   );
   INSERT INTO sales.cat(SELECT * FROM category);
   
   CREATE TABLE sales.dates(
   dateid smallint,
   caldate date,
   day char(3),
   week smallint,
   month char(5),
   qtr char(5),
   year smallint,
   holiday boolean
   );
   INSERT INTO sales.dates(SELECT * FROM date);
   
   CREATE TABLE sales.events(
   eventid integer,
   venueid smallint,
   catid smallint,
   dateid smallint,
   eventname varchar(200),
   starttime timestamp
   );
   INSERT INTO sales.events(SELECT * FROM event);
   
    CREATE TABLE sales.sale(
   salesid integer,
   listid integer,
   sellerid integer,
   buyerid integer,
   eventid integer,
   dateid smallint,
   qtysold smallint,
   pricepaid decimal(8,2),
   commission decimal(8,2),
   saletime timestamp
   );
   INSERT INTO sales.sale(SELECT * FROM sales);
   ```

1. Untuk membuat dan menyisipkan nilai ke dalam tabel dalam skema pemasaran, gunakan contoh berikut.

   ```
   CREATE TABLE marketing.cat(
   catid smallint,
   catgroup varchar(10),
   catname varchar(10),
   catdesc varchar(50)
   );
   INSERT INTO marketing.cat(SELECT * FROM category);
   
   CREATE TABLE marketing.dates(
   dateid smallint,
   caldate date,
   day char(3),
   week smallint,
   month char(5),
   qtr char(5),
   year smallint,
   holiday boolean
   );
   INSERT INTO marketing.dates(SELECT * FROM date);
   
   CREATE TABLE marketing.events(
   eventid integer,
   venueid smallint,
   catid smallint,
   dateid smallint,
   eventname varchar(200),
   starttime timestamp
   );
   INSERT INTO marketing.events(SELECT * FROM event);
   
   CREATE TABLE marketing.sale(
   marketingid integer,
   listid integer,
   sellerid integer,
   buyerid integer,
   eventid integer,
   dateid smallint,
   qtysold smallint,
   pricepaid decimal(8,2),
   commission decimal(8,2),
   saletime timestamp
   );
   INSERT INTO marketing.sale(SELECT * FROM marketing);
   ```

## Langkah 3: Buat pengguna hanya-baca
<a name="tutorial-rbac-step3"></a>

Pada langkah ini, Anda membuat peran hanya-baca dan pengguna analis penjualan untuk peran hanya-baca. Analis penjualan hanya membutuhkan akses read-only ke tabel dalam skema penjualan untuk menyelesaikan tugas yang ditugaskan untuk menemukan peristiwa yang menghasilkan komisi terbesar.

1. Connect ke database sebagai pengguna dbadmin.

1. Untuk membuat peran sales\_ro, gunakan contoh berikut.

   ```
   CREATE ROLE sales_ro;
   ```

1. Untuk membuat pengguna salesanalyst, gunakan contoh berikut.

   ```
   CREATE USER salesanalyst PASSWORD 'Test12345';
   ```

1. Untuk memberikan penggunaan peran sales\_ro dan memilih akses ke objek skema penjualan, gunakan contoh berikut.

   ```
   GRANT USAGE ON SCHEMA sales TO ROLE sales_ro;
   GRANT SELECT ON ALL TABLES IN SCHEMA sales TO ROLE sales_ro;
   ```

1. Untuk memberi pengguna salesanalyst peran sales\_ro, gunakan contoh berikut.

   ```
   GRANT ROLE sales_ro TO salesanalyst;
   ```

## Langkah 4: Kueri data sebagai pengguna hanya-baca
<a name="tutorial-rbac-step4"></a>

Pada langkah ini, pengguna analis penjualan menanyakan data dari skema penjualan. Kemudian, pengguna analis penjualan mencoba memperbarui tabel dan membaca tabel dalam skema pemasaran.

1. Connect ke database sebagai pengguna salesanalyst.

1. Untuk menemukan 10 penjualan dengan komisi tertinggi, gunakan contoh berikut.

   ```
   SET SEARCH_PATH TO sales;
   SELECT DISTINCT events.dateid, sale.commission, cat.catname
   FROM sale, events, dates, cat   
   WHERE events.dateid=dates.dateid AND events.dateid=sale.dateid AND events.catid = cat.catid
   ORDER BY 2 DESC LIMIT 10;
                  
   +--------+------------+----------+
   | dateid | commission | catname  |
   +--------+------------+----------+
   |   1880 |     1893.6 | Pop      |
   |   1880 |     1893.6 | Opera    |
   |   1880 |     1893.6 | Plays    |
   |   1880 |     1893.6 | Musicals |
   |   1861 |       1500 | Plays    |
   |   2003 |       1500 | Pop      |
   |   1861 |       1500 | Opera    |
   |   2003 |       1500 | Plays    |
   |   1861 |       1500 | Musicals |
   |   1861 |       1500 | Pop      |
   +--------+------------+----------+
   ```

1. Untuk memilih 10 peristiwa dari tabel acara dalam skema penjualan, gunakan contoh berikut.

   ```
   SELECT * FROM sales.events LIMIT 10;
                  
   +---------+---------+-------+--------+--------------------+---------------------+
   | eventid | venueid | catid | dateid |     eventname      |      starttime      |
   +---------+---------+-------+--------+--------------------+---------------------+
   |    4836 |      73 |     9 |   1871 | Soulfest           | 2008-02-14 19:30:00 |
   |    5739 |      41 |     9 |   1871 | Fab Faux           | 2008-02-14 19:30:00 |
   |     627 |     229 |     6 |   1872 | High Society       | 2008-02-15 14:00:00 |
   |    2563 |     246 |     7 |   1872 | Hamlet             | 2008-02-15 20:00:00 |
   |    7703 |      78 |     9 |   1872 | Feist              | 2008-02-15 14:00:00 |
   |    7903 |      90 |     9 |   1872 | Little Big Town    | 2008-02-15 19:30:00 |
   |    7925 |     101 |     9 |   1872 | Spoon              | 2008-02-15 19:00:00 |
   |    8113 |      17 |     9 |   1872 | Santana            | 2008-02-15 15:00:00 |
   |     463 |     303 |     8 |   1873 | Tristan und Isolde | 2008-02-16 19:00:00 |
   |     613 |     236 |     6 |   1873 | Pal Joey           | 2008-02-16 15:00:00 |
   +---------+---------+-------+--------+--------------------+---------------------+
   ```

1. Untuk mencoba memperbarui eventname untuk eventid 1, jalankan contoh berikut. Contoh ini akan menghasilkan kesalahan izin ditolak karena pengguna analis penjualan hanya memiliki izin SELECT pada tabel peristiwa dalam skema penjualan. Untuk memperbarui tabel peristiwa, Anda harus memberikan izin peran sales\_ro ke UPDATE. Untuk informasi selengkapnya tentang pemberian izin untuk memperbarui tabel, lihat parameter UPDATE untuk. [HIBAH](r_GRANT.md) Untuk informasi selengkapnya tentang perintah UPDATE, lihat[UPDATE](r_UPDATE.md).

   ```
   UPDATE sales.events
   SET eventname = 'Comment event'
   WHERE eventid = 1;
                     
   ERROR: permission denied for relation events
   ```

1. Untuk mencoba memilih semua dari tabel acara dalam skema pemasaran, gunakan contoh berikut. Contoh ini akan menghasilkan kesalahan izin ditolak karena pengguna analis penjualan hanya memiliki izin SELECT untuk tabel peristiwa dalam skema penjualan. Untuk memilih data dari tabel peristiwa dalam skema pemasaran, Anda harus memberikan izin SELECT peran sales\_ro pada tabel peristiwa dalam skema pemasaran.

   ```
   SELECT * FROM marketing.events;
                  
                  ERROR: permission denied for schema marketing
   ```

## Langkah 5: Buat pengguna baca-tulis
<a name="tutorial-rbac-step5"></a>

Pada langkah ini, insinyur penjualan yang bertanggung jawab untuk membangun pipeline ekstrak, transformasi, dan beban (ETL) untuk pemrosesan data dalam skema penjualan akan diberikan akses hanya-baca, tetapi nantinya akan diberikan akses baca dan tulis untuk melakukan tugas mereka.

1. Connect ke database sebagai pengguna dbadmin.

1. Untuk membuat peran sales\_rw dalam skema penjualan, gunakan contoh berikut.

   ```
   CREATE ROLE sales_rw;
   ```

1. Untuk membuat pengguna salesengineer, gunakan contoh berikut.

   ```
   CREATE USER salesengineer PASSWORD 'Test12345';
   ```

1. Untuk memberikan penggunaan peran sales\_rw dan memilih akses ke objek skema penjualan dengan menetapkan peran sales\_ro untuk itu, gunakan contoh berikut. Untuk informasi selengkapnya tentang cara peran mewarisi izin di Amazon Redshift, lihat. [Hirarki peran](t_role_hierarchy.md)

   ```
   GRANT ROLE sales_ro TO ROLE sales_rw;
   ```

1. Untuk menetapkan peran sales\_rw ke pengguna salesengineer, gunakan contoh berikut.

   ```
   GRANT ROLE sales_rw TO salesengineer;
   ```

## Langkah 6: Kueri data sebagai pengguna dengan peran hanya-baca yang diwariskan
<a name="tutorial-rbac-step6"></a>

Pada langkah ini, pengguna salesengineer mencoba memperbarui tabel peristiwa sebelum diberikan izin baca. 

1. Connect ke database sebagai pengguna salesengineer.

1. Pengguna salesengineer dapat berhasil membaca data dari tabel peristiwa skema penjualan. Untuk memilih acara dengan eventid 1 dari tabel acara dalam skema penjualan, gunakan contoh berikut.

   ```
   SELECT * FROM sales.events where eventid=1;
                     
   +---------+---------+-------+--------+-----------------+---------------------+
   | eventid | venueid | catid | dateid |    eventname    |      starttime      |
   +---------+---------+-------+--------+-----------------+---------------------+
   |       1 |     305 |     8 |   1851 | Gotterdammerung | 2008-01-25 14:30:00 |
   +---------+---------+-------+--------+-----------------+---------------------+
   ```

1. Untuk mencoba memilih semua dari tabel acara dalam skema pemasaran, gunakan contoh berikut. Pengguna salesengineer tidak memiliki izin untuk tabel dalam skema pemasaran, jadi kueri ini akan menghasilkan kesalahan izin ditolak. Untuk memilih data dari tabel peristiwa dalam skema pemasaran, Anda harus memberikan izin SELECT peran sales\_rw pada tabel peristiwa dalam skema pemasaran.

   ```
   SELECT * FROM marketing.events;
   
   ERROR: permission denied for schema marketing
   ```

1. Untuk mencoba memperbarui eventname untuk eventid 1, jalankan contoh berikut. Contoh ini akan menghasilkan kesalahan izin ditolak karena pengguna salesengineer hanya memiliki izin pilih pada tabel peristiwa dalam skema penjualan. Untuk memperbarui tabel peristiwa, Anda harus memberikan izin peran sales\_rw ke UPDATE.

   ```
   UPDATE sales.events
   SET eventname = 'Comment event'
   WHERE eventid = 1;
   
   ERROR: permission denied for relation events
   ```

## Langkah 7: Berikan pembaruan dan masukkan izin ke peran baca-tulis
<a name="tutorial-rbac-step7"></a>

Pada langkah ini, Anda memberikan pembaruan dan menyisipkan izin ke peran sales\_rw.

1. Connect ke database sebagai pengguna dbadmin.

1. Untuk memberikan izin UPDATE, INSERT, dan DELETE ke peran sales\_rw, gunakan contoh berikut.

   ```
   GRANT UPDATE, INSERT, ON ALL TABLES IN SCHEMA sales TO role sales_rw;
   ```

## Langkah 8: Kueri data sebagai pengguna baca-tulis
<a name="tutorial-rbac-step8"></a>

Pada langkah ini, insinyur penjualan berhasil memperbarui tabel setelah peran mereka diberikan izin sisipan dan pembaruan. Selanjutnya, insinyur penjualan mencoba menganalisis dan menyedot tabel peristiwa tetapi gagal melakukannya.

1. Connect ke database sebagai pengguna salesengineer.

1. Untuk memperbarui eventname untuk eventid 1, jalankan contoh berikut.

   ```
   UPDATE sales.events
   SET eventname = 'Comment event'
   WHERE eventid = 1;
   ```

1. Untuk melihat perubahan yang dibuat dalam kueri sebelumnya, gunakan contoh berikut untuk memilih acara dengan eventid 1 dari tabel peristiwa dalam skema penjualan.

   ```
   SELECT * FROM sales.events WHERE eventid=1;
   
   +---------+---------+-------+--------+---------------+---------------------+
   | eventid | venueid | catid | dateid |   eventname   |      starttime      |
   +---------+---------+-------+--------+---------------+---------------------+
   |       1 |     305 |     8 |   1851 | Comment event | 2008-01-25 14:30:00 |
   +---------+---------+-------+--------+---------------+---------------------+
   ```

1. Untuk menganalisis tabel peristiwa yang diperbarui dalam skema penjualan, gunakan contoh berikut. Contoh ini akan menghasilkan kesalahan izin ditolak karena pengguna salesengineer tidak memiliki izin yang diperlukan dan bukan pemilik tabel peristiwa dalam skema penjualan. Untuk menganalisis tabel peristiwa, Anda harus memberikan izin peran sales\_rw untuk MENGANALISIS menggunakan perintah GRANT. Untuk informasi selengkapnya tentang perintah ANALYZE, lihat[MENGANALISA](r_ANALYZE.md).

   ```
   ANALYZE sales.events;
                  
                  ERROR: skipping "events" --- only table or database owner can analyze
   ```

1. Untuk mengosongkan tabel peristiwa yang diperbarui, gunakan contoh berikut. Contoh ini akan menghasilkan kesalahan izin ditolak karena pengguna salesengineer tidak memiliki izin yang diperlukan dan bukan pemilik tabel peristiwa dalam skema penjualan. Untuk mengosongkan tabel peristiwa, Anda harus memberikan izin peran sales\_rw ke VACUUM menggunakan perintah GRANT. Untuk informasi lebih lanjut tentang perintah VACUUM, lihat[VAKUM](r_VACUUM_command.md).

   ```
   VACUUM sales.events;
                     
   ERROR: skipping "events" --- only table or database owner can vacuum it
   ```

## Langkah 9: Analisis dan vakum tabel dalam database sebagai pengguna administrator
<a name="tutorial-rbac-step9"></a>

Pada langkah ini, pengguna dbadmin menganalisis dan menyedot semua tabel. Pengguna memiliki izin administrator pada database ini, sehingga mereka dapat menjalankan perintah ini.

1. Connect ke database sebagai pengguna dbadmin.

1. Untuk menganalisis tabel peristiwa dalam skema penjualan, gunakan contoh berikut. 

   ```
   ANALYZE sales.events;
   ```

1. Untuk menyedot tabel acara dalam skema penjualan, gunakan contoh berikut.

   ```
   VACUUM sales.events;
   ```

1. Untuk menganalisis tabel peristiwa dalam skema pemasaran, gunakan contoh berikut. 

   ```
   ANALYZE marketing.events;
   ```

1. Untuk menyedot tabel acara dalam skema pemasaran, gunakan contoh berikut.

   ```
   VACUUM marketing.events;
   ```

## Langkah 10: Potong tabel sebagai pengguna baca-tulis
<a name="tutorial-rbac-step10"></a>

Pada langkah ini, pengguna salesengineer mencoba memotong tabel peristiwa dalam skema penjualan, tetapi hanya berhasil jika diberikan izin pemotongan oleh pengguna dbadmin. 

1. Connect ke database sebagai pengguna salesengineer.

1. Untuk mencoba menghapus semua baris dari tabel peristiwa dalam skema penjualan, gunakan contoh berikut. Contoh ini akan mengakibatkan kesalahan karena pengguna salesengineer tidak memiliki izin yang diperlukan dan bukan pemilik tabel peristiwa dalam skema penjualan. Untuk memotong tabel peristiwa, Anda harus memberikan izin peran sales\_rw ke TRUNCATE menggunakan perintah GRANT. Untuk informasi selengkapnya tentang perintah TRUNCATE, lihat. [MEMOTONG](r_TRUNCATE.md)

   ```
   TRUNCATE sales.events;
                  
   ERROR: must be owner of relation events
   ```

1. Connect ke database sebagai pengguna dbadmin.

1. Untuk memberikan hak istimewa tabel pemotongan ke peran sales\_rw, gunakan contoh berikut.

   ```
   GRANT TRUNCATE TABLE TO role sales_rw;
   ```

1. Connect ke database sebagai pengguna salesengineer menggunakan query editor v2.

1. Untuk membaca 10 peristiwa pertama dari tabel acara dalam skema penjualan, gunakan contoh berikut.

   ```
   SELECT * FROM sales.events ORDER BY eventid LIMIT 10;
                  
   +---------+---------+-------+--------+-----------------------------+---------------------+
   | eventid | venueid | catid | dateid |          eventname          |      starttime      |
   +---------+---------+-------+--------+-----------------------------+---------------------+
   |       1 |     305 |     8 |   1851 | Comment event               | 2008-01-25 14:30:00 |
   |       2 |     306 |     8 |   2114 | Boris Godunov               | 2008-10-15 20:00:00 |
   |       3 |     302 |     8 |   1935 | Salome                      | 2008-04-19 14:30:00 |
   |       4 |     309 |     8 |   2090 | La Cenerentola (Cinderella) | 2008-09-21 14:30:00 |
   |       5 |     302 |     8 |   1982 | Il Trovatore                | 2008-06-05 19:00:00 |
   |       6 |     308 |     8 |   2109 | L Elisir d Amore            | 2008-10-10 19:30:00 |
   |       7 |     309 |     8 |   1891 | Doctor Atomic               | 2008-03-06 14:00:00 |
   |       8 |     302 |     8 |   1832 | The Magic Flute             | 2008-01-06 20:00:00 |
   |       9 |     308 |     8 |   2087 | The Fly                     | 2008-09-18 19:30:00 |
   |      10 |     305 |     8 |   2079 | Rigoletto                   | 2008-09-10 15:00:00 |
   +---------+---------+-------+--------+-----------------------------+---------------------+
   ```

1. Untuk memotong tabel acara dalam skema penjualan, gunakan contoh berikut.

   ```
   TRUNCATE sales.events;
   ```

1. Untuk membaca data dari tabel peristiwa yang diperbarui dalam skema penjualan, gunakan contoh berikut.

   ```
   SELECT * FROM sales.events ORDER BY eventid LIMIT 10;
                  
   +---------+---------+-------+--------+-----------------------------+---------------------+
   | eventid | venueid | catid | dateid |          eventname          |      starttime      |
   +---------+---------+-------+--------+-----------------------------+---------------------+
   ```

### Buat peran read-only dan read-write untuk skema pemasaran (opsional)
<a name="tutorial-rbac-create-marketing-schema"></a>

Pada langkah ini, Anda membuat peran read-only dan read-write untuk skema pemasaran.

1. Connect ke database sebagai pengguna dbadmin.

1. Untuk membuat peran read-only dan read-write untuk skema pemasaran, gunakan contoh berikut.

   ```
   CREATE ROLE marketing_ro;
   
   CREATE ROLE marketing_rw;
   
   GRANT USAGE ON SCHEMA marketing TO ROLE marketing_ro, ROLE marketing_rw;
   
   GRANT SELECT ON ALL TABLES IN SCHEMA marketing TO ROLE marketing_ro;
   
   GRANT ROLE marketing_ro TO ROLE marketing_rw;
   
   GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA marketing TO ROLE marketing_rw;
   
   CREATE USER marketinganalyst PASSWORD 'Test12345';
   
   CREATE USER marketingengineer PASSWORD 'Test12345';
   
   GRANT ROLE marketing_ro TO marketinganalyst;
   
   GRANT ROLE marketing_rw TO marketingengineer;
   ```

## Fungsi sistem untuk RBAC (opsional)
<a name="tutorial-rbac-system-functions"></a>

Amazon Redshift memiliki dua fungsi untuk menyediakan informasi sistem tentang keanggotaan pengguna dan keanggotaan peran dalam grup atau peran tambahan: role\_is\_member\_of dan user\_is\_member\_of. Fungsi-fungsi ini tersedia untuk pengguna super dan pengguna biasa. Superusers dapat memeriksa semua keanggotaan peran. Pengguna reguler hanya dapat memeriksa keanggotaan untuk peran yang telah diberikan akses kepada mereka.

Untuk menggunakan fungsi role\_is\_member\_of

1. Connect ke database sebagai pengguna salesengineer.

1. Untuk memeriksa apakah peran sales\_rw adalah anggota dari peran sales\_ro, gunakan contoh berikut.

   ```
   SELECT role_is_member_of('sales_rw', 'sales_ro');
                  
   +-------------------+
   | role_is_member_of |
   +-------------------+
   | true              |
   +-------------------+
   ```

1. Untuk memeriksa apakah peran sales\_ro adalah anggota dari peran sales\_rw, gunakan contoh berikut.

   ```
   SELECT role_is_member_of('sales_ro', 'sales_rw');
                  
   +-------------------+
   | role_is_member_of |
   +-------------------+
   | false             |
   +-------------------+
   ```

Untuk menggunakan fungsi user\_is\_member\_of

1. Connect ke database sebagai pengguna salesengineer.

1. Contoh berikut mencoba untuk memeriksa keanggotaan pengguna untuk pengguna salesanalyst. Kueri ini menghasilkan kesalahan karena salesengineer tidak memiliki akses ke analis penjualan. Untuk menjalankan perintah ini dengan sukses, sambungkan ke database sebagai pengguna salesanalyst dan gunakan contoh.

   ```
   SELECT user_is_member_of('salesanalyst', 'sales_ro');
                  
   ERROR
   ```

1. Connect ke database sebagai superuser.

1. Untuk memeriksa keanggotaan pengguna salesanalyst saat terhubung sebagai superuser, gunakan contoh berikut.

   ```
   SELECT user_is_member_of('salesanalyst', 'sales_ro');
                  
   +-------------------+
   | user_is_member_of |
   +-------------------+
   | true              |
   +-------------------+
   ```

1. Connect ke database sebagai pengguna dbadmin.

1. Untuk memeriksa keanggotaan pengguna salesengineer, gunakan contoh berikut. 

   ```
   SELECT user_is_member_of('salesengineer', 'sales_ro');
                  
   +-------------------+
   | user_is_member_of |
   +-------------------+
   | true              |
   +-------------------+
                  
   SELECT user_is_member_of('salesengineer', 'marketing_ro');
   
   +-------------------+
   | user_is_member_of |
   +-------------------+
   | false             |
   +-------------------+
                  
   SELECT user_is_member_of('marketinganalyst', 'sales_ro');
                  
   +-------------------+
   | user_is_member_of |
   +-------------------+
   | false             |
   +-------------------+
   ```

## Tampilan sistem untuk RBAC (opsional)
<a name="tutorial-rbac-system-views"></a>

Untuk melihat peran, penetapan peran ke pengguna, hierarki peran, dan hak istimewa untuk objek database melalui peran, gunakan tampilan sistem untuk Amazon Redshift. Tampilan ini tersedia untuk pengguna super dan pengguna reguler. Pengguna super dapat memeriksa semua detail peran. Pengguna reguler hanya dapat memeriksa detail untuk peran yang telah diberikan akses kepada mereka.

1. Untuk melihat daftar pengguna yang secara eksplisit diberikan peran dalam klaster, gunakan contoh berikut.

   ```
   SELECT * FROM svv_user_grants;
   ```

1. Untuk melihat daftar peran yang secara eksplisit diberikan peran dalam klaster, gunakan contoh berikut.

   ```
   SELECT * FROM svv_role_grants;
   ```

Untuk daftar lengkap tampilan sistem, lihat[Tampilan metadata SVV](svv_views.md).

## Gunakan keamanan tingkat baris dengan RBAC (opsional)
<a name="tutorial-rbac-rls"></a>

Untuk memiliki kontrol akses terperinci atas data sensitif Anda, gunakan keamanan tingkat baris (RLS). Untuk informasi lebih lanjut tentang RLS, lihat[Keamanan tingkat baris](t_rls.md).

Di bagian ini, Anda membuat kebijakan RLS yang memberikan izin `salesengineer` pengguna untuk hanya melihat baris dalam `cat` tabel yang memiliki `catdesc` nilai Major League Baseball. Anda kemudian menanyakan database sebagai `salesengineer` pengguna.

1. Connect ke database sebagai `salesengineer` pengguna.

1. Untuk melihat 5 entri pertama dalam `cat` tabel, gunakan contoh berikut.

   ```
   SELECT * 
   FROM sales.cat
   ORDER BY catid ASC
   LIMIT 5;
                     
   +-------+----------+---------+---------------------------------+
   | catid | catgroup | catname |             catdesc             |
   +-------+----------+---------+---------------------------------+
   |     1 | Sports   | MLB     | Major League Baseball           |
   |     2 | Sports   | NHL     | National Hockey League          |
   |     3 | Sports   | NFL     | National Football League        |
   |     4 | Sports   | NBA     | National Basketball Association |
   |     5 | Sports   | MLS     | Major League Soccer             |
   +-------+----------+---------+---------------------------------+
   ```

1. Connect ke database sebagai `dbadmin` pengguna.

1. Untuk membuat kebijakan RLS untuk `catdesc` kolom dalam `cat` tabel, gunakan contoh berikut.

   ```
   CREATE RLS POLICY policy_mlb_engineer
   WITH (catdesc VARCHAR(50)) 
   USING (catdesc = 'Major League Baseball');
   ```

1. Untuk melampirkan kebijakan RLS ke `sales_rw` peran, gunakan contoh berikut.

   ```
   ATTACH RLS POLICY policy_mlb_engineer ON sales.cat TO ROLE sales_rw; 
   ```

1. Untuk mengubah tabel untuk mengaktifkan RLS, gunakan contoh berikut.

   ```
   ALTER TABLE sales.cat ROW LEVEL SECURITY ON; 
   ```

1. Connect ke database sebagai `salesengineer` pengguna.

1. Untuk mencoba melihat 5 entri pertama dalam `cat` tabel, gunakan contoh berikut. Perhatikan bahwa hanya entri yang hanya muncul ketika `catdesc` kolom tersebut`Major League Baseball`.

   ```
   SELECT * 
   FROM sales.cat
   ORDER BY catid ASC
   LIMIT 5;
                  
   +-------+----------+---------+-----------------------+
   | catid | catgroup | catname |        catdesc        |
   +-------+----------+---------+-----------------------+
   |     1 | Sports   | MLB     | Major League Baseball |
   +-------+----------+---------+-----------------------+
   ```

1. Connect ke database sebagai `salesanalyst` pengguna.

1. Untuk mencoba melihat 5 entri pertama dalam `cat` tabel, gunakan contoh berikut. Perhatikan bahwa tidak ada entri yang muncul karena kebijakan penolakan default semua diterapkan.

   ```
   SELECT * 
   FROM sales.cat
   ORDER BY catid ASC
   LIMIT 5;
                  
   +-------+----------+---------+-----------------------+
   | catid | catgroup | catname |        catdesc        |
   +-------+----------+---------+-----------------------+
   ```

1. Connect ke database sebagai `dbadmin` pengguna.

1. Untuk memberikan izin IGNORE RLS ke `sales_ro` peran, gunakan contoh berikut. Ini memberi `salesanalyst` pengguna izin untuk mengabaikan kebijakan RLS karena mereka adalah anggota peran. `sales_ro`

   ```
   GRANT IGNORE RLS TO ROLE sales_ro; 
   ```

1. Connect ke database sebagai `salesanalyst` pengguna.

1. Untuk melihat 5 entri pertama dalam `cat` tabel, gunakan contoh berikut.

   ```
   SELECT * 
   FROM sales.cat
   ORDER BY catid ASC
   LIMIT 5;
                  
   +-------+----------+---------+---------------------------------+
   | catid | catgroup | catname |             catdesc             |
   +-------+----------+---------+---------------------------------+
   |     1 | Sports   | MLB     | Major League Baseball           |
   |     2 | Sports   | NHL     | National Hockey League          |
   |     3 | Sports   | NFL     | National Football League        |
   |     4 | Sports   | NBA     | National Basketball Association |
   |     5 | Sports   | MLS     | Major League Soccer             |
   +-------+----------+---------+---------------------------------+
   ```

1. Connect ke database sebagai `dbadmin` pengguna.

1. Untuk mencabut izin IGNORE RLS dari `sales_ro` peran, gunakan contoh berikut.

   ```
   REVOKE IGNORE RLS FROM ROLE sales_ro;
   ```

1. Connect ke database sebagai `salesanalyst` pengguna.

1. Untuk mencoba melihat 5 entri pertama dalam `cat` tabel, gunakan contoh berikut. Perhatikan bahwa tidak ada entri yang muncul karena kebijakan penolakan default semua diterapkan.

   ```
   SELECT * 
   FROM sales.cat
   ORDER BY catid ASC
   LIMIT 5;
                  
   +-------+----------+---------+-----------------------+
   | catid | catgroup | catname |        catdesc        |
   +-------+----------+---------+-----------------------+
   ```

1. Connect ke database sebagai `dbadmin` pengguna.

1. Untuk melepaskan kebijakan RLS dari `cat` tabel, gunakan contoh berikut.

   ```
   DETACH RLS POLICY policy_mlb_engineer ON cat FROM ROLE sales_rw;
   ```

1. Connect ke database sebagai `salesanalyst` pengguna.

1. Untuk mencoba melihat 5 entri pertama dalam `cat` tabel, gunakan contoh berikut. Perhatikan bahwa tidak ada entri yang muncul karena kebijakan penolakan default semua diterapkan.

   ```
   SELECT * 
   FROM sales.cat
   ORDER BY catid ASC
   LIMIT 5;
                  
   +-------+----------+---------+---------------------------------+
   | catid | catgroup | catname |             catdesc             |
   +-------+----------+---------+---------------------------------+
   |     1 | Sports   | MLB     | Major League Baseball           |
   |     2 | Sports   | NHL     | National Hockey League          |
   |     3 | Sports   | NFL     | National Football League        |
   |     4 | Sports   | NBA     | National Basketball Association |
   |     5 | Sports   | MLS     | Major League Soccer             |
   +-------+----------+---------+---------------------------------+
   ```

1. Connect ke database sebagai `dbadmin` pengguna.

1. Untuk menghapus kebijakan RLS, gunakan contoh berikut.

   ```
   DROP RLS POLICY policy_mlb_engineer;
   ```

1. Untuk menghapus RLS, gunakan contoh berikut.

   ```
   ALTER TABLE cat ROW LEVEL SECURITY OFF;
   ```

## Topik terkait
<a name="tutorial-rbac-related-topics"></a>

Untuk informasi selengkapnya tentang RBAC, lihat dokumentasi berikut:
+ [Hirarki peran](t_role_hierarchy.md)
+ [Penugasan peran](t_role_assignment.md)
+ [Izin objek database](r_roles-database-privileges.md)
+ [UBAH HAK ISTIMEWA DEFAULT untuk RBAC](r_roles-alter-default-privileges.md)