Bagikan melalui


Manajemen Rakitan Model Multidmensional

Berlaku untuk: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Microsoft SQL Server SQL Server Analysis Services memasok banyak fungsi intrinsik untuk digunakan dengan bahasa Multidimensional Expressions (MDX) dan Data Mining Extensions (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 tersebut lebih lanjut.

Oleh karena itu, SQL Server Analysis Services memungkinkan Anda menambahkan rakitan ke instans atau database SQL Server Analysis Services. Rakitan memungkinkan Anda membuat fungsi eksternal yang ditentukan pengguna menggunakan bahasa umum runtime bahasa umum (CLR), seperti Microsoft Visual Basic .NET atau Microsoft Visual C#. Anda juga dapat menggunakan bahasa Otomatisasi 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.

Rakitan memungkinkan Anda memperluas fungsionalitas bisnis MDX dan DMX. Anda membangun fungsionalitas yang Anda inginkan ke dalam 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 dalam pustaka kemudian diekspos sebagai fungsi yang ditentukan pengguna ke ekspresi MDX dan DMX, prosedur, perhitungan, tindakan, dan aplikasi klien.

Perakitan 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 assembly, Anda dapat menambahkan fungsi baru ke Multidimensional Expressions (MDX), Data Mining Extensions (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++terkelola. Rakitan COM adalah pustaka COM yang harus didaftarkan di server

Rakitan dapat ditambahkan ke Server objek 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 assembly 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 peniruan yang digunakan untuk menjalankan perakitan.

Memanggil Fungsi User-Defined

Memanggil fungsi yang ditentukan pengguna dalam rakitan dilakukan seperti memanggil fungsi intrinsik, kecuali bahwa Anda harus menggunakan nama yang sepenuhnya memenuhi syarat. 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 ditentukan pengguna yang mengembalikan kumpulan rekaman atau nilai kekosongan, dan Anda tidak dapat menggunakan kata kunci CALL jika fungsi yang ditentukan pengguna bergantung pada objek dalam konteks pernyataan atau skrip MDX atau DMX, seperti kubus atau model penggalian data saat ini. 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 ditentukan pengguna dapat menduplikasi nama fungsi pustaka fungsi SQL Server Analysis Services atau 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 dipenuhi hanya jika semua penelepon (pada tingkat perakitan) di tumpukan panggilan memiliki izin sumber daya yang sesuai.

Untuk rakitan, 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 tidak SQL Server Analysis Services dihosting: perusahaan, komputer, dan pengguna. Daftar izin efektif yang diterima kode ditentukan oleh persimpangan izin yang diperoleh oleh ketiga tingkat ini.

SQL Server Analysis Services memasok 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 ditetapkan 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 Deskripsi
Brankas Menyediakan izin komputasi internal. Wadah izin ini tidak menetapkan izin untuk mengakses salah satu sumber daya yang dilindungi dalam .NET Framework. Ini adalah wadah izin default untuk assembly jika tidak ada yang 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 set izin ini. Izin apa pun, bahkan izin kustom yang disertakan oleh administrator, diberikan kepada kode yang berjalan pada tingkat kepercayaan ini.

Ketika CLR dihosting oleh SQL Server Analysis Services, pemeriksaan izin berbasis stack-walk berhenti di batas dengan kode SQL Server Analysis Services asli. Setiap kode terkelola dalam rakitan SQL Server Analysis Services selalu termasuk dalam salah satu dari tiga kategori izin yang tercantum sebelumnya.

Rutinitas rakitan COM (atau tidak terkelola) 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 assembly 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 Terautentikasi Windows 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 perakitan di bawah 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. Perakitan 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. 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