Menggunakan ketentuan kebijakan IAM untuk kontrol akses terperinci - Amazon DynamoDB

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

Menggunakan ketentuan kebijakan IAM untuk kontrol akses terperinci

Ketika memberikan izin di DynamoDB, Anda dapat menetapkan syarat yang menentukan bagaimana kebijakan izin berlaku.

Gambaran Umum

Di DynamoDB, Anda memiliki pilihan untuk menentukan syarat saat memberikan izin menggunakan kebijakan IAM (lihat Manajemen Identitas dan Akses untuk Amazon DynamoDB). Sebagai contoh, Anda dapat:

  • Memberi izin kepada pengguna akan akses hanya-baca pada item dan atribut tertentu dalam tabel atau indeks sekunder.

  • Memberi izin kepada pengguna akan akses hanya-tulis pada atribut tertentu dalam tabel, berdasarkan identitas pengguna tersebut.

Di DynamoDB, Anda dapat menentukan ketentuan dalam kebijakan IAM menggunakan kunci ketentuan, seperti yang diilustrasikan dalam kasus penggunaan di bagian berikut.

catatan

Beberapa AWS layanan juga mendukung kondisi berbasis tag; Namun, DynamoDB tidak.

Kasus penggunaan izin

Selain mengontrol akses ke tindakan DynamoDB API, Anda juga dapat mengontrol akses ke item data dan atribut individual. Misalnya, Anda dapat melakukan hal berikut:

  • Memberikan izin pada tabel, namun batasi akses ke item tertentu dalam tabel tersebut berdasarkan nilai kunci primer tertentu. Misalnya aplikasi jejaring sosial untuk permainan, yang mana semua data permainan yang disimpan pengguna disimpan dalam satu tabel, tetapi tidak ada pengguna yang dapat mengakses item data yang bukan miliknya, seperti yang diperlihatkan dalam ilustrasi berikut:

    Kasus penggunaan yang memberikan akses tingkat tabel ke pengguna tetapi membatasi akses ke item data tertentu.
  • Menyembunyikan informasi sehingga hanya subset dari atribut yang terlihat oleh pengguna. Misalnya aplikasi yang menampilkan data penerbangan untuk bandara terdekat, berdasarkan lokasi pengguna. Nama maskapai penerbangan, waktu kedatangan dan keberangkatan, serta nomor penerbangan semuanya ditampilkan. Namun atribut seperti nama pilot atau jumlah penumpang disembunyikan, seperti terlihat pada ilustrasi berikut:

    Kasus penggunaan yang hanya menampilkan sebagian data kepada pengguna, tetapi menyembunyikan atribut data tertentu.

Untuk menerapkan kontrol akses terperinci semacam ini, Anda menulis kebijakan izin IAM yang menentukan kondisi untuk mengakses kredensial keamanan dan izin terkait. Anda kemudian menerapkan kebijakan tersebut kepada pengguna, grup, atau peran yang Anda buat menggunakan konsol IAM. Kebijakan IAM Anda dapat membatasi akses ke masing-masing item dalam tabel, akses ke atribut dalam item tersebut, atau keduanya secara bersamaan.

Anda juga dapat menggunakan federasi identitas web untuk mengontrol akses oleh pengguna yang diautentikasi dengan Login dengan Amazon, Facebook, atau Google. Untuk informasi selengkapnya, lihat Menggunakan federasi identitas web.

Anda menggunakan elemen Condition IAM untuk menerapkan kebijakan kontrol akses yang terperinci. Dengan menambahkan elemen Condition ke kebijakan izin, Anda dapat mengizinkan atau menolak akses ke item dan atribut dalam tabel dan indeks DynamoDB, berdasarkan kebutuhan bisnis khusus Anda.

Sebagai contoh, pertimbangkan aplikasi game seluler yang memungkinkan pemain memilih dan memainkan berbagai permainan berbeda. Aplikasi ini menggunakan tabel DynamoDB bernama GameScores untuk melacak skor tertinggi dan data pengguna lainnya. Setiap item dalam tabel diidentifikasi secara unik berdasarkan ID pengguna dan nama permainan yang dimainkan pengguna. Tabel GameScores memiliki kunci primer yang terdiri dari kunci partisi (UserId) dan kunci urutan (GameTitle). Pengguna hanya memiliki akses ke data game yang terkait dengan ID pengguna mereka. Pengguna yang ingin memainkan game harus memiliki peran IAM bernama GameRole, yang memiliki kebijakan keamanan yang melekat padanya.

Untuk mengelola izin pengguna di aplikasi ini, Anda dapat menulis kebijakan izin seperti berikut:

{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowAccessToOnlyItemsMatchingUserID", "Effect":"Allow", "Action":[ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${www.amazon.com:user_id}" ], "dynamodb:Attributes":[ "UserId", "GameTitle", "Wins", "Losses", "TopScore", "TopScoreDateTime" ] }, "StringEqualsIfExists":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES" } } } ] }

Selain memberikan izin untuk tindakan DynamoDB tertentu (elemen Action) pada tabel GameScores (elemen Resource), elemen Condition menggunakan kunci kondisi khusus untuk DynamoDB berikut yang membatasi izin sebagai berikut:

  • dynamodb:LeadingKeys – Kunci ketentuan ini memungkinkan pengguna untuk mengakses hanya item yang nilai kunci partisinya cocok dengan ID pengguna mereka. ID ini, ${www.amazon.com:user_id}, adalah variabel substitusi. Untuk informasi selengkapnya tentang variabel substitusi, lihat Menggunakan federasi identitas web.

  • dynamodb:Attributes – Kunci ketentuan ini membatasi akses ke atribut tertentu sehingga hanya tindakan yang tercantum dalam kebijakan izin yang dapat mengembalikan nilai untuk atribut ini. Selain itu, klausul StringEqualsIfExists memastikan bahwa aplikasi harus selalu menyediakan daftar atribut tertentu untuk ditindaklanjuti dan aplikasi tidak dapat meminta semua atribut.

Ketika kebijakan IAM dievaluasi, hasilnya selalu true (akses diizinkan) atau false (akses ditolak). Jika ada bagian dari elemen Condition yang false, seluruh kebijakan mengevaluasi ke false dan akses ditolak.

penting

Jika Anda menggunakan dynamodb:Attributes, Anda harus menentukan nama semua atribut kunci primer dan kunci indeks untuk tabel dan indeks sekunder apa pun yang tercantum dalam kebijakan. Jika tidak, DynamoDB tidak dapat menggunakan atribut kunci ini untuk melakukan tindakan yang diminta.

Dokumen kebijakan IAM hanya dapat berisi karakter Unicode berikut: tab horizontal (U+0009), umpan baris (U+000A), pengembalian pengangkutan (U+000D), dan karakter dalam rentang U+0020 hingga U+00FF.

Menentukan ketentuan: Menggunakan kunci syarat

AWS menyediakan satu set kunci kondisi yang telah ditentukan (AWS-wide condition keys) untuk semua AWS layanan yang mendukung IAM untuk kontrol akses. Misalnya, Anda dapat menggunakan kunci kondisi aws:SourceIp untuk memeriksa alamat IP pemohon sebelum mengizinkan tindakan yang akan dilakukan. Untuk informasi selengkapnya dan daftar tombol AWS-wide, lihat Kunci Tersedia untuk Ketentuan di Panduan Pengguna IAM.

Tabel berikut menunjukkan kunci kondisi layanan khusus DynamoDB yang berlaku untuk DynamoDB.

Kunci Kondisi DynamoDB Deskripsi
dynamodb:LeadingKeys

Mewakili atribut kunci pertama dari tabel—dengan kata lain, kunci partisi. Nama kunci LeadingKeys bersifat jamak, meskipun kuncinya digunakan dengan tindakan satu item. Selain itu, Anda harus menggunakan pengubah ForAllValues ketika menggunakan LeadingKeys dalam suatu kondisi.

dynamodb:Select

Mewakili parameter Select dari permintaan Query atau Scan. Select dapat berupa nilai berikut:

  • ALL_ATTRIBUTES

  • ALL_PROJECTED_ATTRIBUTES

  • SPECIFIC_ATTRIBUTES

  • COUNT

dynamodb:Attributes

Mewakili daftar nama atribut dalam suatu permintaan, atau atribut yang dikembalikan dari permintaan. Nilai Attributes diberi nama dengan cara yang sama dan memiliki arti yang sama sebagai parameter untuk tindakan DynamoDB API tertentu, seperti yang ditunjukkan berikut:

  • AttributesToGet

    Digunakan oleh: BatchGetItem, GetItem, Query, Scan

  • AttributeUpdates

    Digunakan oleh: UpdateItem

  • Expected

    Digunakan oleh: DeleteItem, PutItem, UpdateItem

  • Item

    Digunakan oleh: PutItem

  • ScanFilter

    Digunakan oleh: Scan

dynamodb:ReturnValues

Mewakili parameter ReturnValues dari suatu permintaan. ReturnValues dapat berupa nilai berikut:

  • ALL_OLD

  • UPDATED_OLD

  • ALL_NEW

  • UPDATED_NEW

  • NONE

dynamodb:ReturnConsumedCapacity

Mewakili parameter ReturnConsumedCapacity dari suatu permintaan. ReturnConsumedCapacity dapat berupa salah satu nilai berikut:

  • TOTAL

  • NONE

Membatasi akses pengguna

Banyak kebijakan izin IAM memungkinkan pengguna mengakses hanya item dalam tabel yang nilai kunci partisinya cocok dengan pengidentifikasi pengguna. Misalnya, aplikasi game sebelumnya membatasi akses dengan cara ini sehingga pengguna hanya dapat mengakses data game yang dikaitkan dengan ID pengguna mereka. Variabel substitusi IAM ${www.amazon.com:user_id}, ${graph.facebook.com:id}, dan ${accounts.google.com:sub} berisi pengenal pengguna untuk Login with Amazon, Facebook, dan Google. Untuk mempelajari cara aplikasi masuk ke salah satu penyedia identitas ini dan memperoleh pengidentifikasi ini, lihat Menggunakan federasi identitas web.

catatan

Masing-masing contoh pada bagian berikut menetapkan klausul Effect untuk Allow dan menentukan hanya tindakan, sumber daya, dan parameter yang diizinkan. Akses hanya diizinkan untuk apa yang tercantum secara eksplisit dalam kebijakan IAM.

Dalam beberapa kasus, dimungkinkan untuk menulis ulang kebijakan ini sehingga kebijakan berbasis penolakan (yaitu, pengaturan klausul Effect untuk Deny dan membalikkan semua logika dalam kebijakan). Namun, sebaiknya Anda menghindari penggunaan kebijakan berbasis penolakan dengan DynamoDB karena kebijakan sulit untuk ditulis dengan benar, dibandingkan dengan kebijakan berbasis izin. Selain itu, perubahan di masa mendatang pada DynamoDB API (atau perubahan input API yang ada) dapat membuat kebijakan berbasis penolakan tidak efektif.

Kebijakan Contoh: Menggunakan ketentuan untuk kontrol parameter terperinci

Bagian ini menunjukkan beberapa kebijakan untuk mengimplementasikan kontrol akses terperinci pada tabel dan indeks DynamoDB.

catatan

Semua contoh menggunakan wilayah us-west-2 dan berisi ID akun fiktif.

Video di bawah ini menjelaskan kontrol akses berbutir halus di DynamoDB menggunakan kondisi kebijakan IAM.

1: Memberikan izin yang membatasi akses ke item dengan nilai kunci partisi tertentu

Kebijakan izin berikut memberikan izin yang memungkinkan seperangkat tindakan DynamoDB pada tabel GamesScore. Kebijakan tersebut menggunakan kunci ketentuan dynamodb:LeadingKeys untuk membatasi tindakan pengguna hanya pada item yang nilai kunci partisi UserID-nya cocok dengan ID pengguna unik Login with Amazon untuk aplikasi ini.

penting

Daftar tindakan tidak termasuk izin untuk Scan karena Scan mengembalikan semua item apa pun kunci awalnya.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"FullAccessToUserItems", "Effect":"Allow", "Action":[ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${www.amazon.com:user_id}" ] } } } ] }
catatan

Saat menggunakan variabel kebijakan, Anda harus secara jelas menyebutkan versi 2012-10-17 dalam kebijakan tersebut. Versi default bahasa kebijakan akses, 2008-10-17, tidak mendukung variabel kebijakan.

Untuk menerapkan akses hanya baca, Anda dapat menghapus tindakan apa pun yang dapat mengubah data. Dalam kebijakan berikut, hanya tindakan yang menyediakan akses baca saja yang disertakan dalam ketentuan.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"ReadOnlyAccessToUserItems", "Effect":"Allow", "Action":[ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${www.amazon.com:user_id}" ] } } } ] }
penting

Jika Anda menggunakan dynamodb:Attributes, Anda harus menentukan nama semua atribut kunci primer dan kunci indeks, untuk tabel dan indeks sekunder apa pun yang tercantum dalam kebijakan. Jika tidak, DynamoDB tidak dapat menggunakan atribut kunci ini untuk melakukan tindakan yang diminta.

2: Memberikan izin yang membatasi akses ke atribut tertentu dalam tabel

Kebijakan izin berikut mengizinkan akses ke hanya dua atribut tertentu dalam tabel dengan menambahkan kunci ketentuan dynamodb:Attributes. Atribut ini dapat dibaca, ditulis, atau dievaluasi dalam penulisan bersyarat atau filter pemindaian.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"LimitAccessToSpecificAttributes", "Effect":"Allow", "Action":[ "dynamodb:UpdateItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:BatchGetItem", "dynamodb:Scan" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:Attributes":[ "UserId", "TopScore" ] }, "StringEqualsIfExists":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES", "dynamodb:ReturnValues":[ "NONE", "UPDATED_OLD", "UPDATED_NEW" ] } } } ] }
catatan

Kebijakan ini mengambil pendekatan daftar izin, yang mengizinkan akses ke set atribut bernama. Anda dapat menulis kebijakan serupa yang menolak akses ke atribut lain. Kami tidak merekomendasikan pendekatan daftar penolakan ini. Pengguna dapat menentukan nama atribut yang ditolak ini dengan mengikuti prinsip hak akses paling rendah, seperti yang dijelaskan di Wikipedia di http://en.wikipedia.org/wiki/Principle_of_least_privilege, dan gunakan pendekatan daftar izin untuk menghitung semua nilai yang diizinkan, daripada menentukan atribut yang ditolak.

Kebijakan ini tidak mengizinkan PutItem, DeleteItem, atau BatchWriteItem. Tindakan ini selalu menggantikan seluruh item sebelumnya, yang memungkinkan pengguna menghapus nilai sebelumnya untuk atribut yang tidak boleh mereka akses.

Klausa StringEqualsIfExists dalam kebijakan izin memastikan hal berikut:

  • Jika pengguna menentukan parameter Select, nilainya harus SPECIFIC_ATTRIBUTES. Persyaratan ini mencegah tindakan API mengembalikan atribut apa pun yang tidak diizinkan, seperti dari proyeksi indeks.

  • Jika pengguna menentukan parameter ReturnValues, nilainya harus NONE, UPDATED_OLD, atau UPDATED_NEW. Hal ini diperlukan karena tindakan UpdateItem tersebut juga melakukan operasi baca implisit untuk memeriksa apakah suatu item ada sebelum menggantinya, dan agar nilai atribut sebelumnya dapat dikembalikan jika diminta. Membatasi ReturnValues dengan cara ini memastikan bahwa pengguna hanya dapat membaca atau menulis atribut yang diizinkan.

  • Klausa StringEqualsIfExists memastikan bahwa hanya satu dari parameter ini — Select atau ReturnValues — yang dapat digunakan per permintaan, dalam konteks tindakan yang diizinkan.

Berikut ini adalah beberapa variasi pada kebijakan ini:

  • Untuk hanya mengizinkan tindakan baca, Anda dapat menghapus UpdateItem dari daftar tindakan yang diizinkan. Karena tidak ada tindakan yang tersisa menerima ReturnValues, Anda dapat menghapus ReturnValues dari kondisi. Anda juga dapat mengubah StringEqualsIfExists menjadi StringEquals karena parameter Select selalu memiliki nilai (ALL_ATTRIBUTES, kecuali ditentukan lain).

  • Untuk hanya mengizinkan tindakan tulis, Anda dapat menghapus semuanya kecuali UpdateItem dari daftar tindakan yang diizinkan. Karena UpdateItem tidak menggunakan parameter Select, Anda dapat menghapus Select dari kondisi. Anda juga harus mengubah StringEqualsIfExists menjadi StringEquals karena parameter ReturnValues selalu memiliki nilai (NONE, kecuali ditentukan lain).

  • Untuk mengizinkan semua atribut yang namanya cocok dengan pola, gunakan StringLike, bukan StringEquals, dan gunakan pola multi-karakter yang cocok dengan karakter wildcard (*).

3: Memberikan izin untuk mencegah pembaruan pada atribut tertentu

Kebijakan izin berikut membatasi akses pengguna untuk memperbarui hanya atribut tertentu yang diidentifikasi oleh kunci kondisi dynamodb:Attributes. Kondisi StringNotLike mencegah aplikasi memperbarui atribut yang ditentukan menggunakan kunci kondisi dynamodb:Attributes.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PreventUpdatesOnCertainAttributes", "Effect":"Allow", "Action":[ "dynamodb:UpdateItem" ], "Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/GameScores", "Condition":{ "ForAllValues:StringNotLike":{ "dynamodb:Attributes":[ "FreeGamesAvailable", "BossLevelUnlocked" ] }, "StringEquals":{ "dynamodb:ReturnValues":[ "NONE", "UPDATED_OLD", "UPDATED_NEW" ] } } } ] }

Perhatikan hal-hal berikut:

  • Tindakan UpdateItem, seperti tindakan tulis lainnya, memerlukan akses baca ke item sehingga dapat mengembalikan nilai sebelum dan sesudah pembaruan. Dalam kebijakan tersebut, Anda membatasi tindakan untuk mengakses hanya atribut yang diizinkan yang akan diperbarui dengan menentukan kunci ketentuan dynamodb:ReturnValues. Kunci kondisi membatasi ReturnValues dalam permintaan untuk menentukan hanya NONE, UPDATED_OLD, atau UPDATED_NEW dan tidak mencakup ALL_OLD atau ALL_NEW.

  • Tindakan PutItem dan DeleteItem mengganti seluruh item, dengan demikian memungkinkan aplikasi memodifikasi atribut apa pun. Jadi, ketika membatasi aplikasi untuk memperbarui hanya atribut tertentu, Anda tidak harus memberikan izin untuk API ini.

4: Berikan izin untuk mengkueri hanya atribut yang diproyeksikan dalam indeks

Kebijakan izin berikut memungkinkan kueri pada indeks sekunder (TopScoreDateTimeIndex) dengan menggunakan kunci ketentuan dynamodb:Attributes. Kebijakan ini juga membatasi kueri untuk meminta atribut tertentu saja yang telah diproyeksikan ke dalam indeks.

Untuk mengharuskan aplikasi menentukan daftar atribut dalam kueri, kebijakan juga menentukan kunci ketentuan dynamodb:Select untuk mengharuskan parameter Select dari tindakan Query DynamoDB adalah SPECIFIC_ATTRIBUTES. Daftar atribut terbatas pada daftar tertentu yang disediakan menggunakan kunci ketentuan dynamodb:Attributes.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"QueryOnlyProjectedIndexAttributes", "Effect":"Allow", "Action":[ "dynamodb:Query" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:Attributes":[ "TopScoreDateTime", "GameTitle", "Wins", "Losses", "Attempts" ] }, "StringEquals":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES" } } } ] }

Kebijakan izin berikut ini serupa, tetapi kueri harus meminta semua atribut yang telah diproyeksikan ke dalam indeks.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"QueryAllIndexAttributes", "Effect":"Allow", "Action":[ "dynamodb:Query" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex" ], "Condition":{ "StringEquals":{ "dynamodb:Select":"ALL_PROJECTED_ATTRIBUTES" } } } ] }

5: Memberikan izin untuk membatasi akses ke atribut tertentu dan nilai-nilai kunci partisi

Kebijakan izin berikut memungkinkan tindakan DynamoDB tertentu (ditentukan dalam elemen Action) pada tabel dan indeks tabel (ditentukan dalam elemen Resource). Kebijakan menggunakan kunci ketentuan dynamodb:LeadingKeys untuk membatasi izin hanya untuk item yang nilai kunci partisinya cocok dengan ID Facebook pengguna.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"LimitAccessToCertainAttributesAndKeyValues", "Effect":"Allow", "Action":[ "dynamodb:UpdateItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:BatchGetItem" ], "Resource":[ "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores", "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex" ], "Condition":{ "ForAllValues:StringEquals":{ "dynamodb:LeadingKeys":[ "${graph.facebook.com:id}" ], "dynamodb:Attributes":[ "attribute-A", "attribute-B" ] }, "StringEqualsIfExists":{ "dynamodb:Select":"SPECIFIC_ATTRIBUTES", "dynamodb:ReturnValues":[ "NONE", "UPDATED_OLD", "UPDATED_NEW" ] } } } ] }

Perhatikan hal-hal berikut:

  • Tulis tindakan yang diizinkan oleh kebijakan (UpdateItem) hanya dapat memodifikasi attribute-A atau attribute-B.

  • Karena kebijakan mengizinkan UpdateItem, aplikasi dapat menyisipkan item baru, dan atribut yang tersembunyi akan null dalam item baru. Jika atribut ini diproyeksikan ke dalam TopScoreDateTimeIndex, kebijakan memiliki manfaat tambahan untuk mencegah kueri yang menyebabkan pengambilan dari tabel.

  • Aplikasi tidak dapat membaca atribut apa pun selain yang tercantum dalam dynamodb:Attributes. Dengan adanya kebijakan ini, aplikasi harus menetapkan parameter Select ke SPECIFIC_ATTRIBUTES dalam permintaan baca, dan hanya atribut dalam daftar izin yang dapat diminta. Untuk permintaan tulis, aplikasi tidak dapat mengatur ReturnValues ke ALL_OLD atau ALL_NEW dan tidak dapat melakukan operasi tulis bersyarat berdasarkan atribut lainnya.

Topik terkait