MEMBUAT KUNCI SIMETRIS (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Menghasilkan kunci konten dan menentukan propertinya di SQL Server.

Fitur ini tidak kompatibel dengan ekspor database menggunakan Data Tier Application Framework (DACFx). Anda harus menghilangkan semua kunci konten sebelum mengekspor.

Konvensi sintaks transact-SQL

Catatan

Sintaks ini tidak didukung oleh kumpulan SQL tanpa server di Azure Synapse Analytics.

Sintaksis

CREATE SYMMETRIC KEY key_name
    [ AUTHORIZATION owner_name ]
    [ FROM PROVIDER provider_name ]
    WITH
        [
            <key_options> [ , ... n ]
            | ENCRYPTION BY <encrypting_mechanism> [ , ... n ]
        ]

<key_options> ::=
    KEY_SOURCE = 'pass_phrase'
    | ALGORITHM = <algorithm>
    | IDENTITY_VALUE = 'identity_phrase'
    | PROVIDER_KEY_NAME = 'key_name_in_provider'
    | CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

<algorithm> ::=
    DES | TRIPLE_DES | TRIPLE_DES_3KEY | RC2 | RC4 | RC4_128
    | DESX | AES_128 | AES_192 | AES_256

<encrypting_mechanism> ::=
    CERTIFICATE certificate_name
    | PASSWORD = 'password'
    | SYMMETRIC KEY symmetric_key_name
    | ASYMMETRIC KEY asym_key_name

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

key_name

Menentukan nama unik tempat kunci konten diketahui dalam database. Tanggal adalah parameter yang diperlukan. Kunci sementara ditunjuk ketika key_name dimulai dengan tanda satu angka (#). Contohnya,#temporaryKey900007. Anda tidak dapat membuat kunci konten yang memiliki nama yang dimulai dengan lebih dari satu #. Anda tidak dapat membuat kunci konten sementara menggunakan penyedia EKM.

owner_name OTORISASI

Menentukan nama peran pengguna atau aplikasi database yang memiliki kunci ini.

DARI provider_name PENYEDIA

Menentukan penyedia dan nama Extensible Key Management (EKM). Kunci tidak diekspor dari perangkat EKM. Penyedia harus didefinisikan terlebih dahulu menggunakan CREATE PROVIDER pernyataan . Untuk informasi selengkapnya tentang membuat penyedia kunci eksternal, lihat Extensible Key Management (EKM).

Catatan

Opsi ini tidak tersedia dalam database mandiri.

KEY_SOURCE = 'pass_phrase'

Menentukan frasa sandi untuk memperoleh kunci.

IDENTITY_VALUE = 'identity_phrase'

Menentukan frasa identitas untuk menghasilkan GUID untuk menandai data yang dienkripsi dengan kunci sementara.

PROVIDER_KEY_NAME = 'key_name_in_provider'

Menentukan nama yang dirujuk di penyedia Extensible Key Management.

Catatan

Opsi ini tidak tersedia dalam database mandiri.

CREATION_DISPOSITION = { CREATE_NEW | OPEN_EXISTING }

Membuat atau memetakan kunci konten ke perangkat Extensible Key Management.

  • CREATE_NEW

    Membuat kunci baru pada perangkat Extensible Key Management. Jika kunci sudah ada di perangkat, pernyataan gagal dengan kesalahan.

  • OPEN_EXISTING

    Peta kunci konten SQL Server ke kunci Extensible Key Management yang ada. Jika CREATION_DISPOSITION = OPEN_EXISTING tidak disediakan, ini default ke CREATE_NEW.

certificate_name

Menentukan nama sertifikat yang digunakan untuk mengenkripsi kunci konten. Sertifikat harus sudah ada dalam database.

'kata sandi'

Menentukan kata sandi untuk memperoleh kunci TRIPLE_DES untuk mengamankan kunci konten. kata sandi harus memenuhi persyaratan kebijakan kata sandi Windows komputer yang menjalankan instans SQL Server. Selalu gunakan kata sandi yang kuat.

symmetric_key_name

Menentukan kunci konten, yang digunakan untuk mengenkripsi kunci yang sedang dibuat. Kunci yang ditentukan harus sudah ada di database, dan kunci harus terbuka.

asym_key_name

Menentukan kunci asimetris, yang digunakan untuk mengenkripsi kunci yang sedang dibuat. Kunci asimetris ini harus sudah ada di database.

<Algoritma>

Tentukan algoritma enkripsi.

Peringatan

Dimulai dengan SQL Server 2016 (13.x), semua algoritma selain AES_128, AES_192, dan AES_256 tidak digunakan lagi. Untuk menggunakan algoritma yang lebih lama (tidak disarankan), Anda harus mengatur database ke tingkat kompatibilitas database 120 atau lebih rendah.

Keterangan

Saat kunci konten dibuat, kunci konten harus dienkripsi dengan menggunakan setidaknya salah satu opsi berikut:

  • sertifikat
  • kata sandi
  • kunci simetris
  • kunci asimetris
  • PENYEDIA

Kunci dapat memiliki lebih dari satu enkripsi dari setiap jenis. Dengan kata lain, satu kunci konten dapat dienkripsi dengan menggunakan beberapa sertifikat, kata sandi, kunci konten, dan kunci asimetris secara bersamaan.

Perhatian

Ketika kunci konten dienkripsi dengan kata sandi alih-alih sertifikat (atau kunci lain), algoritma enkripsi TRIPLE DES digunakan untuk mengenkripsi kata sandi. Karena itu, kunci yang dibuat dengan algoritma enkripsi yang kuat, seperti AES, sendiri diamankan oleh algoritma yang lebih lemah.

Kata sandi opsional dapat digunakan untuk mengenkripsi kunci konten sebelum mendistribusikan kunci ke beberapa pengguna.

Kunci sementara dimiliki oleh pengguna yang membuatnya. Kunci sementara hanya valid untuk sesi saat ini.

IDENTITY_VALUE menghasilkan GUID untuk menandai data yang dienkripsi dengan kunci konten baru. Pemberian tag ini dapat digunakan untuk mencocokkan kunci dengan data terenkripsi. GUID yang dihasilkan oleh frasa tertentu selalu sama. Setelah frasa digunakan untuk menghasilkan GUID, frasa tidak dapat digunakan kembali selama setidaknya ada satu kunci konten dalam database ini yang secara aktif menggunakan frasa. IDENTITY_VALUE adalah klausa opsional; namun, sebaiknya gunakan saat Anda menyimpan data yang dienkripsi dengan kunci sementara.

Tidak ada algoritma enkripsi default.

Penting

Kami tidak menyarankan penggunaan cipher streaming RC4 dan RC4_128 untuk melindungi data sensitif. SQL Server tidak mengodekan lebih lanjut enkripsi yang dilakukan dengan kunci tersebut.

Informasi tentang kunci konten terlihat dalam tampilan katalog sys.symmetric_keys .

Kunci konten tidak dapat dienkripsi oleh kunci konten yang dibuat dari penyedia enkripsi.

Klarifikasi mengenai algoritma DES

  • DESX salah diberi nama. Kunci konten yang dibuat dengan ALGORITHM = DESX benar-benar menggunakan cipher TRIPLE DES dengan kunci 192-bit. Algoritma DESX tidak disediakan. Fitur ini akan dihapus dalam versi SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.
  • Kunci konten yang dibuat dengan ALGORITMA = TRIPLE_DES_3KEY menggunakan TRIPLE DES dengan kunci 192-bit.
  • Kunci konten yang dibuat dengan ALGORITMA = TRIPLE_DES menggunakan TRIPLE DES dengan kunci 128-bit.

Penghentian algoritma RC4

Penggunaan berulang RC4 atau RC4_128 KEY_GUID yang sama pada blok data yang berbeda, menghasilkan kunci RC4 yang sama karena SQL Server tidak menyediakan garam secara otomatis. Menggunakan kunci RC4 yang sama berulang kali adalah kesalahan terkenal yang menghasilkan enkripsi yang sangat lemah. Oleh karena itu kami telah menghentikan kata kunci RC4 dan RC4_128. Fitur ini akan dihapus dalam versi SQL Server yang akan datang. Hindari menggunakan fitur ini dalam pekerjaan pengembangan baru, dan rencanakan untuk memodifikasi aplikasi yang saat ini menggunakan fitur ini.

Peringatan

Algoritma RC4 hanya didukung untuk kompatibilitas mundur. Materi baru hanya dapat dienkripsi menggunakan RC4 atau RC4_128 saat database berada dalam tingkat kompatibilitas 90 atau 100. (Tidak disarankan.) Gunakan algoritma yang lebih baru seperti salah satu algoritma AES sebagai gantinya. Dalam materi SQL Server yang dienkripsi menggunakan RC4 atau RC4_128 dapat didekripsi dalam tingkat kompatibilitas apa pun.

Izin

Memerlukan izin UBAH KUNCI SIMETRIS APA PUN pada database. Jika AUTHORIZATION ditentukan, memerlukan izin IMPERSONATE pada pengguna database atau izin UBAH pada peran aplikasi. Jika enkripsi berdasarkan sertifikat atau kunci asimetris, memerlukan izin LIHAT DEFINISI pada sertifikat atau kunci asimetris. Hanya login Windows, login SQL Server, dan peran aplikasi yang dapat memiliki kunci konten. Grup dan peran tidak dapat memiliki kunci konten.

Contoh

J. Membuat kunci konten

Contoh berikut membuat kunci konten yang disebut JanainaKey09 dengan menggunakan AES 256 algoritma, lalu mengenkripsi kunci baru dengan sertifikat Shipping04.

CREATE SYMMETRIC KEY JanainaKey09
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE Shipping04;
GO

B. Membuat kunci simetris sementara

Contoh berikut membuat kunci konten sementara yang disebut #MarketingXXV dari frasa sandi: The square of the hypotenuse is equal to the sum of the squares of the sides. Kunci disediakan dengan GUID yang dihasilkan dari string Pythagoras dan dienkripsi dengan sertifikat Marketing25.

CREATE SYMMETRIC KEY #MarketingXXV
WITH ALGORITHM = AES_128,
KEY_SOURCE
     = 'The square of the hypotenuse is equal to the sum of the squares of the sides',
IDENTITY_VALUE = 'Pythagoras'
ENCRYPTION BY CERTIFICATE Marketing25;
GO

C. Membuat kunci konten menggunakan perangkat Extensible Key Management (EKM)

Contoh berikut membuat kunci konten yang disebut MySymKey dengan menggunakan penyedia yang disebut MyEKMProvider dan nama KeyForSensitiveDatakunci . Ini menetapkan otorisasi ke User1 dan mengasumsikan bahwa administrator sistem telah mendaftarkan penyedia yang disebut MyEKMProvider di SQL Server.

CREATE SYMMETRIC KEY MySymKey
AUTHORIZATION User1
FROM PROVIDER EKMProvider
WITH
PROVIDER_KEY_NAME='KeyForSensitiveData',
CREATION_DISPOSITION=OPEN_EXISTING;
GO

Lihat juga