Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
Azure SQL Database
Azure SQL Managed Instance
Sebuah database mandiri adalah database yang diisolasi dari database lain dan dari instans SQL Server yang meng-host database tersebut. SQL Server membantu pengguna mengisolasi database mereka dari instans dengan 4 cara.
Sebagian besar metadata yang menjelaskan database dipertahankan dalam database. (Selain itu, atau sebagai pengganti, menyimpan metadata dalam basis data master.)
Semua metadata didefinisikan menggunakan kolasi yang sama.
Autentikasi pengguna dapat dilakukan oleh database, mengurangi dependensi database pada login instans SQL Server.
Lingkungan SQL Server (DMV, XEvents, dll.) melaporkan dan dapat mengambil tindakan berdasarkan informasi containment.
Beberapa fitur database yang sebagian berisi, seperti menyimpan metadata dalam database, berlaku untuk semua database SQL Server. Beberapa manfaat dari database yang dikontain sebagian, seperti autentikasi tingkat database dan kolasi katalog, harus diaktifkan terlebih dahulu sebelum dapat digunakan. Pengurungan parsial diaktifkan menggunakan pernyataan CREATE DATABASE dan ALTER DATABASE atau menggunakan SQL Server Management Studio. Untuk informasi selengkapnya tentang cara mengaktifkan containment database parsial, lihat Bermigrasi ke Database dengan Containment Parsial.
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 dicakup mempertimbangkan fitur-fitur terkait kontainmen. 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 basis data
Batas antara database dan instans SQL Server. Batas antara database dan database lainnya.
Berisi
Elemen yang ada sepenuhnya dalam batas database.
Tidak terkendali
Elemen yang melewati batas database.
Basis data nonkontain
Database yang opsi containment-nya diatur ke NONE. Semua database pada versi sebelum SQL Server 2012 (11.x) bersifat non-contained. 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 memiliki kemampuan untuk menentukan kapan batas containment terlampaui.
Pengguna dalam kontainer
Ada dua jenis pengguna untuk database terkandung.
Pengguna database mandiri dengan kata sandi
Pengguna basis data mandiri yang memiliki kata sandi diautentikasi oleh basis data. 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 yang menggunakan login di database master dapat diberi akses ke database terkandung, tetapi hal itu akan menciptakan ketergantungan pada instance 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 Basis Data
Karena database yang dikandung sebagian memisahkan fungsionalitas database dari fungsionalitas instans, terdapat batas yang jelas antara kedua elemen ini yang disebut batas database.
Di dalam batas basis data terdapat model basis data, tempat basis data 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 mandiri yang terkandung sebagian adalah database mandiri yang memungkinkan penggunaan fitur yang tidak terkandung.
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 setelan kontainmen bawaan TIDAK ADA, tampilan ini dapat mengembalikan positif palsu.
Perilaku database yang dikandung sebagian paling jelas berbeda dengan database yang tidak dikandung dalam hal kolasi. Untuk informasi selengkapnya tentang masalah kolasi, lihat Kolasi 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 ketergantungan pada instans SQL Server, database yang dikandung sebagian dapat berguna selama failover saat Anda menggunakan grup ketersediaan Always On.
Membuat pengguna mandiri memungkinkan pengguna terhubung langsung ke database mandiri. Ini adalah fitur yang sangat signifikan dalam skenario ketersediaan tinggi dan pemulihan bencana seperti dalam solusi AlwaysOn. Jika pengguna merupakan pengguna mandiri, maka jika terjadi failover, pengguna akan dapat terhubung ke server sekunder tanpa membuat login pada instans yang menghosting server 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 non-terkandung, pengembang harus mempertimbangkan kemungkinan dampak lingkungan terhadap basis data baru dan memrogramnya sesuai dengan itu. Namun, dengan menggunakan database yang terkandung sebagian, pengembang dapat mendeteksi dampak pada tingkat instans terhadap database serta hal-hal pada tingkat instans yang perlu diperhatikan oleh pengembang.
Administrasi Basis Data
Menyimpan pengaturan database di database itu sendiri, alih-alih di database master, memungkinkan setiap pemilik database memiliki kontrol yang lebih besar atas database mereka, tanpa memberikan izin sysadmin kepada pemilik database.
Batasan
Database yang terkandung sebagian tidak mengizinkan fitur berikut.
Replikasi, penangkapan data perubahan, atau pelacakan perubahan.
Prosedur bernomor
Objek terikat skema yang bergantung pada fungsi bawaan dengan perubahan kolasi
Perubahan pengikatan akibat perubahan kolasi, termasuk referensi ke objek, kolom, simbol, atau tipe.
Peringatan
Saat ini, prosedur tersimpan sementara diizinkan. Karena prosedur tersimpan sementara melanggar prinsip containment, prosedur tersebut diperkirakan tidak akan didukung dalam versi database terkandung di masa mendatang.
Mengidentifikasi Kontainmen Basis Data
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 setiap entitas aktual yang tidak terikat pada kontainer diidentifikasi saat runtime.
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 keterkandungan beberapa entitas (misalnya, entitas yang menggunakan SQL dinamis) baru dapat ditentukan saat dijalankan, tampilan ini mungkin menampilkan beberapa entitas yang sebenarnya tidak tidak terkandung. Untuk informasi selengkapnya, lihat sys.dm_db_uncontained_entities (Transact-SQL).
kejadian 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 pada entitas aktual yang tidak terkandung. Namun, kejadian tersebut hanya terjadi saat runtime. Oleh karena itu, entitas pengguna tidak tercakup yang belum Anda jalankan tidak akan diidentifikasi oleh XEvent ini
Lihat Juga
Fitur yang Dimodifikasi (Database Terkandung)
Kolase Database Terkandung
Praktik Terbaik Keamanan untuk Database Terkontain
Bermigrasi ke Basis Data yang Terkontain Sebagian
Pengguna Database Terkandung - Membuat Database Anda Portabel