Database Mandiri

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Database mandiri adalah database yang diisolasi dari database lain dan dari instans SQL Server yang menghosting database. SQL Server membantu pengguna mengisolasi database mereka dari instans dengan 4 cara.

  • Sebagian besar metadata yang menjelaskan database dipertahankan dalam database. (Selain, atau alih-alih, mempertahankan metadata dalam database master.)

  • Semua metadata didefinisikan menggunakan kolate yang sama.

  • Autentikasi pengguna dapat dilakukan oleh database, mengurangi dependensi database pada login instans SQL Server.

  • Laporan lingkungan SQL Server (DMV, XEvents, dll.) dan dapat bertindak berdasarkan informasi penahanan.

Beberapa fitur database yang sebagian berisi, seperti menyimpan metadata dalam database, berlaku untuk semua database SQL Server. Beberapa manfaat database yang sebagian berisi, seperti autentikasi tingkat database dan kolase katalog, harus diaktifkan sebelum tersedia. Penahanan parsial diaktifkan menggunakan pernyataan CREATE DATABASE dan ALTER DATABASE atau dengan menggunakan SQL Server Management Studio. Untuk informasi selengkapnya tentang cara mengaktifkan penahanan database parsial, lihat Migrasi ke Database yang Sebagian Berisi.

Konsep Database yang Terkandung Sebagian

Database yang terkandung sepenuhnya mencakup semua pengaturan dan metadata yang diperlukan untuk menentukan database dan tidak memiliki dependensi konfigurasi pada instans Mesin Database SQL Server tempat database diinstal. Dalam versi SQL Server sebelumnya, memisahkan database dari instans SQL Server bisa memakan waktu dan pengetahuan terperinci yang diperlukan tentang hubungan antara database dan instans SQL Server. Database yang terkandung sebagian memudahkan untuk memisahkan database dari instans SQL Server dan database lainnya.

Database yang terkandung mempertimbangkan fitur sehubungan dengan penahanan. Setiap entitas yang ditentukan pengguna yang hanya bergantung pada fungsi yang berada di database dianggap terkandung sepenuhnya. Setiap entitas yang ditentukan pengguna yang bergantung pada fungsi yang berada di luar database dianggap tidak terkontainasi. (Untuk informasi selengkapnya, lihat Bagian penahanan nanti dalam topik ini.)

Istilah berikut berlaku untuk model database yang terkandung.

Batas database
Batas antara database dan instans SQL Server. Batas antara database dan database lainnya.

Terkandung
Elemen yang ada sepenuhnya dalam batas database.

Tidak dapat dipastikan
Elemen yang melewati batas database.

Database yang tidak terkandung
Database yang memiliki penahanan diatur ke NONE. Semua database dalam versi yang lebih lama dari SQL Server 2012 (11.x) tidak terkandung. Secara default, semua SQL Server 2012 (11.x) dan database yang lebih baru memiliki penahanan yang diatur ke NONE.

Database yang terkandung sebagian
Database yang dimuat sebagian adalah database mandiri yang dapat memungkinkan beberapa fitur yang melewati batas database. SQL Server mencakup kemampuan untuk menentukan kapan batas penahanan disilangkan.

Pengguna yang terkandung
Ada dua jenis pengguna untuk database mandiri.

  • Pengguna database mandiri dengan kata sandi

    Pengguna database mandiri dengan kata sandi diautentikasi oleh database. Untuk informasi selengkapnya, lihat Pengguna Database Mandiri - Membuat Database Anda Portabel.

  • Prinsipal Windows

    Pengguna Windows yang berwenang dan anggota grup Windows yang berwenang dapat terhubung langsung ke database dan tidak memerlukan login dalam database master . Database mempercayai autentikasi oleh Windows.

Pengguna berdasarkan login dalam database master dapat diberikan akses ke database mandiri, tetapi itu akan membuat dependensi pada instans SQL Server. Oleh karena itu, membuat pengguna berdasarkan login memerlukan penahanan parsial.

Penting

Mengaktifkan database yang sebagian berisi mendelegasikan kontrol atas akses ke instans SQL Server kepada pemilik database. Untuk informasi selengkapnya, lihat Praktik Terbaik Keamanan dengan Database Terkandung.

Batas Database
Karena database yang terkandung sebagian memisahkan fungsionalitas database dari instans, ada garis yang jelas antara kedua elemen yang disebut batas database.

Di dalam batas database adalah model database, tempat database dikembangkan dan dikelola. Contoh entitas yang terletak di dalam database meliputi, tabel sistem seperti sys.tables, pengguna database yang berisi kata sandi, dan tabel pengguna dalam database saat ini yang direferensikan oleh nama dua bagian.

Di luar batas database adalah model manajemen, yang berkaitan dengan fungsi dan manajemen tingkat instans. Contoh entitas yang terletak di luar batas database meliputi, tabel sistem seperti sys.endpoints, pengguna yang dipetakan ke login, dan tabel pengguna dalam database lain yang direferensikan oleh tiga nama bagian.

Penahanan

Entitas pengguna yang berada sepenuhnya dalam database dianggap terkandung. Setiap entitas yang berada di luar database, atau mengandalkan interaksi dengan fungsi di luar database, dianggap tidak terkontainasi.

Secara umum, entitas pengguna termasuk dalam kategori penahanan berikut:

  • Entitas pengguna yang sepenuhnya terkandung (entitas yang tidak pernah melewati batas database), misalnya sys.indexes. Kode apa pun yang menggunakan fitur ini atau objek apa pun yang hanya mereferensikan entitas ini juga sepenuhnya terkandung.

  • Entitas pengguna yang tidak dikontainasi (yang melewati batas database), misalnya sys.server_principals atau prinsipal server (login) itu sendiri. Kode apa pun yang menggunakan entitas ini atau fungsi apa pun yang mereferensikan entitas ini tidak dapat dipastikan.

Database yang Terkandung Sebagian

Fitur database yang terkandung saat ini hanya tersedia dalam keadaan terkandung sebagian. Database yang terkandung sebagian adalah database mandiri yang memungkinkan penggunaan fitur yang tidak terkontainer.

Gunakan tampilan sys.dm_db_uncontained_entities dan sys.sql_modules (Transact-SQL) untuk mengembalikan informasi tentang objek atau fitur yang tidak terkontainer. Dengan menentukan status penahanan elemen database Anda, Anda dapat menemukan objek atau fitur apa yang harus diganti atau diubah untuk mempromosikan penahanan.

Penting

Karena objek tertentu memiliki pengaturan penahanan default NONE, tampilan ini dapat mengembalikan positif palsu.

Perilaku database yang terkandung sebagian berbeda dari database yang tidak terkandung sehubungan dengan kolase. Untuk informasi selengkapnya tentang masalah kolase, lihat Kolase Database Terkandung.

Manfaat menggunakan Database yang Terkandung Sebagian

Ada masalah dan komplikasi yang terkait dengan database yang tidak terkandung yang dapat diselesaikan dengan menggunakan database yang sebagian berisi.

Pergerakan Database

Salah satu masalah yang terjadi saat memindahkan database, adalah bahwa beberapa informasi penting dapat tidak tersedia ketika database dipindahkan dari satu instans ke instans lainnya. Misalnya, informasi login disimpan dalam instans, bukan di database. Saat Anda memindahkan database yang tidak berisi dari satu instans ke instans SQL Server lain, informasi ini tertinggal. Anda harus mengidentifikasi informasi yang hilang dan memindahkannya dengan database Anda ke instans baru SQL Server. Proses ini bisa sulit dan memakan waktu.

Database yang sebagian berisi dapat menyimpan informasi penting dalam database sehingga database masih memiliki informasi setelah dipindahkan.

Catatan

Database yang sebagian berisi dapat menyediakan dokumentasi yang menjelaskan fitur-fitur yang digunakan oleh database yang tidak dapat dipisahkan dari instans. Ini termasuk daftar database saling terkait lainnya, pengaturan sistem yang diperlukan database tetapi tidak dapat dimuat, dan sebagainya.

Manfaat Pengguna Database Mandiri dengan Always On

Dengan mengurangi ikatan ke instans SQL Server, database yang sebagian berisi dapat berguna selama failover saat Anda menggunakan grup ketersediaan AlwaysOn.

Membuat pengguna mandiri memungkinkan pengguna untuk terhubung langsung ke database yang terkandung. Ini adalah fitur yang sangat signifikan dalam skenario ketersediaan tinggi dan pemulihan bencana seperti dalam solusi AlwaysOn. Jika pengguna berisi pengguna, jika terjadi failover, orang akan dapat terhubung ke sekunder tanpa membuat login pada instans yang menghosting sekunder. Ini memberikan manfaat langsung. Untuk informasi selengkapnya, lihat Gambaran Umum Grup Ketersediaan AlwaysOn (SQL Server) dan Prasyarat, Pembatasan, dan Rekomendasi untuk Grup Ketersediaan AlwaysOn (SQL Server).

Pengembangan Database Awal

Karena pengembang mungkin tidak tahu di mana database baru akan disebarkan, membatasi dampak lingkungan yang disebarkan pada database mengurangi pekerjaan dan kekhawatiran bagi pengembang. Dalam model yang tidak terkandung, pengembang harus mempertimbangkan kemungkinan dampak lingkungan pada database dan program baru yang sesuai. Namun, dengan menggunakan database yang sebagian berisi, pengembang dapat mendeteksi dampak tingkat instans pada database dan masalah tingkat instans bagi pengembang.

Administrasi Database

Mempertahankan pengaturan database dalam database, alih-alih dalam database master, memungkinkan setiap pemilik database memiliki kontrol lebih besar atas database mereka, tanpa memberikan izin sysadmin pemilik database.

Batasan

Database yang terkandung sebagian tidak mengizinkan fitur berikut.

  • Replikasi, ubah penangkapan data, atau pelacakan perubahan.

  • Prosedur bernomor

  • Objek terikat skema yang bergantung pada fungsi bawaan dengan perubahan kolate

  • Perubahan pengikatan yang dihasilkan dari perubahan kolabasi, termasuk referensi ke objek, kolom, simbol, atau jenis.

Peringatan

Prosedur tersimpan sementara saat ini diizinkan. Karena prosedur tersimpan sementara melanggar penahanan, prosedur tersebut tidak diharapkan didukung dalam versi database yang terkandung di masa mendatang.

Mengidentifikasi Penahanan Database

Ada dua alat untuk membantu mengidentifikasi status penahanan database. sys.dm_db_uncontained_entities (Transact-SQL) adalah tampilan yang menunjukkan semua entitas yang berpotensi tidak terkontainasi dalam database. Peristiwa database_uncontained_usage terjadi ketika entitas aktual yang tidak dikontainasi diidentifikasi pada waktu proses.

sys.dm_db_uncontained_entities

Tampilan ini memperlihatkan entitas apa pun dalam database yang berpotensi tidak terkontainer, seperti entitas yang melintasi batas database. Ini termasuk entitas pengguna yang dapat menggunakan objek di luar model database. Namun, karena penahanan beberapa entitas (misalnya, mereka yang menggunakan SQL dinamis) tidak dapat ditentukan sampai run time, tampilan mungkin menunjukkan beberapa entitas yang sebenarnya tidak dikontainasi. Untuk informasi selengkapnya, lihat sys.dm_db_uncontained_entities (Transact-SQL).

peristiwa database_uncontained_usage

XEvent ini terjadi setiap kali entitas yang tidak dikontainasi diidentifikasi pada waktu proses. Ini termasuk entitas yang berasal dari kode klien. XEvent ini hanya akan terjadi untuk entitas aktual yang tidak dipastikan. Namun, peristiwa hanya terjadi pada waktu proses. Oleh karena itu, entitas pengguna yang belum dipastikan yang belum Anda jalankan tidak akan diidentifikasi oleh XEvent ini

Lihat Juga

Fitur yang Dimodifikasi (Database Terkandung)
Kolase Database Terkandung
Praktik Terbaik Keamanan dengan Database Mandiri
Bermigrasi ke Database yang Sebagian Berisi
Pengguna Database Mandiri - Membuat Database Anda Portabel