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 Analysis Services
Azure Analysis Services
Fabric/Power BI Premium
Microsoft SQL Server SQL Server Analysis Services menyediakan banyak fungsi intrinsik untuk digunakan dengan bahasa Ekspresi Multidimensi (MDX) dan Ekstensi Penambangan Data (DMX), yang dirancang untuk menyelesaikan semuanya mulai dari perhitungan statistik standar hingga melintasi anggota dalam hierarki. Tetapi, seperti halnya produk kompleks dan kuat lainnya, selalu ada kebutuhan untuk memperluas fungsionalitas produk seperti itu lebih lanjut.
Oleh karena itu, SQL Server Analysis Services memungkinkan Anda menambahkan rakitan ke instans atau database SQL Server Analysis Services. Assembly memungkinkan Anda membuat fungsi eksternal yang ditentukan pengguna menggunakan bahasa Common Language Runtime (CLR), seperti Microsoft Visual Basic .NET atau Microsoft Visual C#. Anda juga dapat menggunakan bahasa Automation Model Objek Komponen (COM) seperti Microsoft Visual Basic atau Microsoft Visual C++.
Penting
Rakitan COM mungkin menimbulkan risiko keamanan. Karena risiko ini dan pertimbangan lainnya, rakitan COM tidak digunakan lagi di SQL Server 2008 Analysis Services (SSAS). Rakitan COM mungkin tidak didukung dalam rilis mendatang.
Komponen memungkinkan Anda memperluas fungsionalitas bisnis MDX dan DMX. Anda membangun fungsionalitas yang Anda inginkan ke pustaka, seperti pustaka tautan dinamis (DLL) dan menambahkan pustaka sebagai rakitan ke instans SQL Server Analysis Services atau ke database SQL Server Analysis Services. Metode publik di pustaka kemudian diekspos sebagai fungsi yang ditentukan pengguna ke ekspresi MDX dan DMX, prosedur, perhitungan, tindakan, dan aplikasi klien.
Rakitan dengan prosedur dan fungsi baru dapat ditambahkan ke server. Anda dapat menggunakan rakitan untuk meningkatkan atau menambahkan fungsionalitas kustom yang tidak disediakan oleh server. Dengan menggunakan rakitan, Anda dapat menambahkan fungsi baru ke Ekspresi Multidimensi (MDX), Ekstensi Penggalian Data (DMX), atau prosedur tersimpan. Rakitan dimuat dari lokasi tempat aplikasi kustom dijalankan, dan salinan file biner rakitan disimpan bersama dengan data database di server. Ketika rakitan dihapus, rakitan yang disalin juga dihapus dari server.
Rakitan dapat terdiri dari dua jenis yang berbeda: COM dan CLR. Rakitan CLR adalah rakitan yang dikembangkan dalam bahasa pemrograman .NET Framework seperti C#, Visual Basic .NET, C++ dikelola. Komponen COM adalah pustaka COM yang harus didaftarkan di server
Rakitan dapat ditambahkan ke objek Server atau Database. Rakitan server dapat dipanggil oleh pengguna mana pun yang terhubung ke server atau objek apa pun di server. Rakitan database hanya dapat dipanggil oleh Database objek atau pengguna yang tersambung ke database.
Objek sederhana Assembly terdiri dari informasi dasar (Nama dan Id), pengumpulan file, dan spesifikasi keamanan.
Koleksi file mengacu pada file rakitan yang dimuat dan file penelusuran kesalahan (.pdb) yang sesuai, jika file penelusuran kesalahan dimuat dengan file rakitan. File rakitan dimuat dari lokasi tempat aplikasi menentukan file, dan salinan disimpan di server bersama dengan data. Salinan file assembly digunakan untuk memuat assembly setiap kali layanan dimulai.
Spesifikasi keamanan mencakup set izin dan penggantian identitas yang digunakan untuk menjalankan assembly.
Memanggil Fungsi yang Ditentukan Pengguna
Memanggil fungsi yang didefinisikan pengguna dalam assembly dilakukan seperti memanggil fungsi intrinsik, kecuali bahwa Anda harus menggunakan nama lengkapnya. Misalnya, fungsi yang ditentukan pengguna yang mengembalikan jenis yang diharapkan oleh MDX disertakan dalam kueri MDX, seperti yang diperlihatkan dalam contoh berikut:
Select MyAssembly.MyClass.MyStoredProcedure(a, b, c) on 0 from Sales
Fungsi yang ditentukan pengguna juga dapat dipanggil menggunakan kata kunci CALL. Anda harus menggunakan kata kunci CALL untuk fungsi yang didefinisikan pengguna yang mengembalikan kumpulan rekaman atau nilai kosong, dan Anda tidak dapat menggunakan kata kunci CALL jika fungsi yang didefinisikan pengguna bergantung pada objek dalam konteks pernyataan atau skrip MDX atau DMX, seperti kubus saat ini atau model penggalian data. Penggunaan umum untuk fungsi yang disebut di luar kueri MDX atau DMX adalah menggunakan model objek AMO untuk melakukan fungsi administratif. Jika, misalnya, Anda ingin menggunakan fungsi MyVoidProcedure(a, b, c) dalam pernyataan MDX, sintaks berikut akan digunakan:
Call MyAssembly.MyClass.MyVoidProcedure(a, b, c)
Rakitan menyederhanakan pengembangan database dengan memungkinkan kode umum dikembangkan sekali dan disimpan dalam satu lokasi. Pengembang perangkat lunak klien dapat membuat pustaka fungsi untuk SQL Server Analysis Services dan mendistribusikannya dengan aplikasi mereka.
Rakitan dan fungsi yang didefinisikan oleh pengguna dapat menduplikasi nama fungsi dari pustaka fungsi SQL Server Analysis Services atau dari rakitan lainnya. Selama Anda memanggil fungsi yang ditentukan pengguna dengan menggunakan nama yang sepenuhnya memenuhi syarat, SQL Server Analysis Services akan menggunakan prosedur yang benar. Untuk tujuan keamanan, dan untuk menghilangkan kemungkinan memanggil nama duplikat di pustaka kelas yang berbeda, SQL Server Analysis Services mengharuskan Anda hanya menggunakan nama yang sepenuhnya memenuhi syarat untuk prosedur tersimpan.
Untuk memanggil fungsi yang ditentukan pengguna dari rakitan CLR tertentu, fungsi yang ditentukan pengguna didahului oleh nama rakitan, nama kelas lengkap, dan nama prosedur, seperti yang ditunjukkan di sini:
AssemblyName. FullClassName. ProcedureName(Argument1, Argument2, ...)
Untuk kompatibilitas mundur dengan versi SQL Server Analysis Services yang lebih lama, sintaks berikut juga dapat diterima:
AssemblyName! FullClassName! ProcedureName(Argument1, Argument2, ...)
Jika pustaka COM mendukung beberapa antarmuka, ID antarmuka juga dapat digunakan untuk menyelesaikan nama prosedur, seperti yang ditunjukkan di sini:
AssemblyName! InterfaceID! ProcedureName(Argument1, Argument2, ...)
Keamanan
Keamanan untuk rakitan didasarkan pada model keamanan .NET Framework, yang merupakan model keamanan akses kode. .NET Framework mendukung mekanisme keamanan akses kode yang mengasumsikan bahwa runtime dapat menghosting kode yang sepenuhnya tepercaya dan tepercaya sebagian. Sumber daya yang dilindungi oleh keamanan akses kode .NET Framework biasanya dibungkus oleh kode terkelola yang menuntut izin yang sesuai sebelum mengaktifkan akses ke sumber daya. Permintaan untuk izin terpenuhi hanya jika semua pemanggil (pada tingkat perakitan) di tumpukan panggilan memiliki izin sumber daya yang sesuai.
Untuk assembly, izin untuk eksekusi diteruskan dengan properti PermissionSet pada objek Assembly. Izin yang diterima kode terkelola ditentukan oleh kebijakan keamanan yang berlaku. Sudah ada tiga tingkat kebijakan yang berlaku di lingkungan yang dihosting non-SQL Server Analysis Services: perusahaan, komputer, dan pengguna. Daftar izin efektif yang diterima oleh kode ditentukan oleh irisan izin yang diperoleh dari ketiga tingkat ini.
SQL Server Analysis Services menyediakan tingkat kebijakan keamanan tingkat host ke CLR saat menghostingnya; kebijakan ini adalah tingkat kebijakan tambahan di bawah tiga tingkat kebijakan yang selalu berlaku. Kebijakan ini diatur untuk setiap domain aplikasi yang dibuat oleh SQL Server Analysis Services.
Kebijakan tingkat host SQL Server Analysis Services adalah kombinasi dari kebijakan tetap SQL Server Analysis Services untuk rakitan sistem dan kebijakan yang ditentukan pengguna untuk rakitan pengguna. Bagian yang ditentukan pengguna dari kebijakan host SQL Server Analysis Services didasarkan pada pemilik perakitan yang menentukan salah satu dari tiga wadah izin untuk setiap perakitan:
| Pengaturan Izin | Description |
|---|---|
| Aman | Menyediakan izin akses untuk komputasi internal. Wadah izin ini tidak menetapkan izin untuk mengakses salah satu sumber daya yang dilindungi di .NET Framework. Ini adalah wadah izin default bagi suatu rakitan jika tidak ditentukan dengan properti PermissionSet. |
| ExternalAccess | Menyediakan akses yang sama dengan pengaturan Aman , dengan kemampuan tambahan untuk mengakses sumber daya sistem eksternal. Wadah izin ini tidak menawarkan jaminan keamanan (meskipun dimungkinkan untuk mengamankan skenario ini), tetapi memberikan jaminan keandalan. |
| Tidak aman | Tidak menyediakan batasan. Tidak ada jaminan keamanan atau keandalan yang dapat dibuat untuk kode terkelola yang berjalan di bawah kumpulan izin ini. Izin apa pun, bahkan izin kustom yang disertakan oleh administrator, diberikan untuk kode yang berjalan pada tingkat kepercayaan ini. |
Ketika CLR dihosting oleh SQL Server Analysis Services, pemeriksaan izin berbasis stack-walk berhenti pada batas dengan kode asli SQL Server Analysis Services. Setiap kode terkelola dalam rakitan SQL Server Analysis Services selalu termasuk dalam salah satu dari tiga kategori izin yang tercantum sebelumnya.
Rutin perakitan COM (atau tidak dikelola) tidak mendukung model keamanan CLR.
Peniruan
Setiap kali kode terkelola mengakses sumber daya apa pun di luar SQL Server Analysis Services, SQL Server Analysis Services mengikuti aturan yang terkait dengan pengaturan properti ImpersonationMode dari rakitan untuk memastikan bahwa akses terjadi dalam konteks keamanan Windows yang sesuai. Karena rakitan yang menggunakan pengaturan Izin aman tidak dapat mengakses sumber daya di luar SQL Server Analysis Services, aturan ini hanya berlaku untuk rakitan menggunakan pengaturan izin ExternalAccess dan Tidak Aman .
Jika konteks eksekusi saat ini sesuai dengan login Windows Authenticated dan sama dengan konteks pemanggil asli (yaitu, tidak ada EXECUTE AS di tengah), SQL Server Analysis Services akan meniru login Windows Authenticated sebelum mengakses sumber daya.
Jika ada EXECUTE AS perantara yang mengubah konteks dari pemanggil asli, upaya untuk mengakses sumber daya eksternal akan gagal.
Properti ImpersonationMode dapat diatur ke ImpersonateCurrentUser atau ImpersonateAnonymous. Pengaturan default, ImpersonateCurrentUser, menjalankan assembly dengan akun masuk jaringan pengguna saat ini. Jika pengaturan ImpersonateAnonymous digunakan, konteks eksekusi sesuai dengan akun pengguna masuk Windows IUSER_servername di server. Ini adalah akun tamu Internet, yang memiliki hak istimewa terbatas pada server. Rakitan yang berjalan dalam konteks ini hanya dapat mengakses sumber daya terbatas di server lokal.
Domain Aplikasi
SQL Server Analysis Services tidak mengekspos domain aplikasi secara langsung. Karena sekumpulan rakitan yang berjalan di domain aplikasi yang sama, domain aplikasi dapat menemukan satu sama lain pada waktu eksekusi dengan menggunakan namespace Layanan System.Reflection di .NET Framework atau dengan cara lain, dan dapat memanggilnya dengan cara yang terlambat terikat. Panggilan tersebut akan tunduk pada pemeriksaan izin yang digunakan oleh keamanan berbasis otorisasi SQL Server Analysis Services.
Anda tidak boleh mengandalkan menemukan rakitan di domain aplikasi yang sama, karena batas domain aplikasi dan rakitan yang masuk ke setiap domain ditentukan oleh implementasi.
Lihat Juga
Mengatur Keamanan untuk Prosedur Tersimpan
Menentukan Prosedur Tersimpan