Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Cara Memeriksa apakah UDF T-SQL Terikat Skema (Bahkan Saat Dienkripsi)

Skema yang mengikat objek seperti fungsi yang ditentukan pengguna (UDF) dianggap sebagai praktik yang baik, karena mencegah perubahan dilakukan pada objek apa pun yang dirujuknya yang dapat merusak fungsi secara tidak sengaja.

Anda dapat mengikat skema fungsi yang ditentukan pengguna pada saat Anda membuatnya, atau Anda dapat mengubahnya nanti.

Biasanya, Anda dapat memeriksa apakah UDF terikat skema di SQL Server dengan melihat definisinya. Anda biasanya dapat melakukan ini melalui GUI dengan memilih "Script as Create" atau serupa.

Anda juga dapat melakukannya menggunakan T-SQL dengan memilih definition kolom sys.sql_modules tampilan katalog sistem.

Tetapi ini hanya akan berfungsi jika UDF tidak dienkripsi.

Namun, ada kolom lain di sys.sql_modules tampilan yang sesuai dengan tujuan kami apakah UDF dienkripsi atau tidak:is_schema_bound

Contoh 1 – UDF Terenkripsi

Berikut adalah contoh untuk mengetahui apakah fungsi yang ditentukan pengguna terenkripsi yang disebut udf_CatsByName_ITVF terikat skema atau tidak.

SELECT 
  definition,
  is_schema_bound
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('udf_CatsByName_ITVF');

Hasil:

+--------------+-------------------+
| definition   | is_schema_bound   |
|--------------+-------------------|
| NULL         | 1                 |
+--------------+-------------------+

Dalam hal ini, UDF terikat skema.

Perhatikan juga bahwa definition kolom mengembalikan NULL karena fungsi telah menerapkan enkripsi.

Contoh 2 – UDF Tanpa Enkripsi

Jika enkripsi tidak diterapkan, kita bisa melihat definisi lengkap di kolom itu, dan kita akan melihat argumen WITH SCHEMABINDING dalam definisi.

Inilah kuerinya lagi ketika fungsinya tidak dienkripsi.

SELECT 
  definition
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('udf_CatsByName_ITVF');

Hasil:

+--------------+
| definition   |
|--------------|
| 
CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) )
    RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN (
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName
    );

              |
+--------------+

Saya telah menghapus is_schema_bound kolom dari kueri agar lebih mudah dibaca.

Apa pun itu, is_schema_bound kolom dapat digunakan apakah UDF dienkripsi atau tidak.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengelompokkan Berdasarkan Tahun di SQL

  2. Tabel Pemecahan Masalah Tidak Ditemukan Kesalahan

  3. Bagaimana CTE Dapat Membantu Menulis Kueri yang Kompleks dan Kuat:Perspektif Kinerja

  4. Tabel Referensi SQL:Cara Membuat dan Menulis Query Dasar

  5. Bucketizing data tanggal dan waktu