Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách mã hóa một dạng xem trong SQL Server

Trong SQL Server, bạn có thể mã hóa một dạng xem tại thời điểm bạn tạo nó lần đầu tiên hoặc bạn có thể thay đổi nó sau này để bao gồm mã hóa.

Để tạo chế độ xem với T-SQL, bạn sử dụng CREATE VIEW cú pháp. Để mã hóa nó, bạn thêm WITH ENCRYPTION đối số.

Bạn cũng có thể sử dụng cùng một đối số để mã hóa chế độ xem hiện có khi sử dụng ALTER VIEW .

Văn bản của chế độ xem được mã hóa không hiển thị trực tiếp trong bất kỳ chế độ xem danh mục nào. Do đó, định nghĩa của chế độ xem không thể được xem bởi những người dùng không có quyền truy cập vào bảng hệ thống hoặc tệp cơ sở dữ liệu.

Sử dụng WITH ENCRYPTION cũng ngăn chế độ xem được xuất bản như một phần của bản sao SQL Server.

Ví dụ 1 - Tạo Chế độ xem được Mã hóa

Dưới đây là một ví dụ về cách tạo chế độ xem được mã hóa.

CREATE VIEW dbo.v_Cats
WITH ENCRYPTION
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Phần để mã hóa nó là WITH ENCRYPTION . Tôi chỉ cần xóa đối số đó nếu tôi không muốn mã hóa nó.

Sau khi tạo chế độ xem đó, bây giờ khi tôi sử dụng sys.sql_modules xem danh mục hệ thống để xem định nghĩa của nó, tôi nhận được NULL.

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

Kết quả:

+--------------+
| definition   |
|--------------|
| NULL         |
+--------------+

Tôi nhận được kết quả tương tự với sys.syscomments (không được dùng nữa) xem danh mục.

SELECT text
FROM sys.syscomments
WHERE id = OBJECT_ID('v_Cats');

Kết quả:

+--------+
| text   |
|--------|
| NULL   |
+--------+

Tôi nhận được một kết quả tương tự, bất kể phương pháp T-SQL nào tôi sử dụng để cố gắng lấy định nghĩa của chế độ xem.

Và đây là thông báo lỗi tôi nhận được trong Azure Data Studio khi tôi cố gắng tạo tập lệnh cho chế độ xem:

No script was returned when scripting as Create on object View

Và tôi sẽ nhận được một thông báo tương tự nếu tôi cố gắng xem nó trong SSMS, DBeaver hoặc bất kỳ phần mềm quản lý cơ sở dữ liệu GUI nào khác.

Ví dụ 2 - Thêm Mã hóa vào Chế độ xem Hiện tại

Nếu bạn muốn mã hóa một chế độ xem hiện có, hãy sử dụng ALTER VIEW với cùng một định nghĩa. Nói cách khác, tôi có thể lấy ví dụ đầu tiên và thay thế CREATE với ALTER .

ALTER VIEW dbo.v_Cats
WITH ENCRYPTION
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Điều này rõ ràng giả định rằng phần còn lại của định nghĩa của chế độ xem hoàn toàn giống với chế độ xem hiện có.

Cách dễ nhất để đảm bảo rằng bạn đang sử dụng cùng một định nghĩa là sử dụng công cụ GUI của bạn để tạo tập lệnh cho chế độ xem hiện có bằng cách sử dụng tùy chọn “Tập lệnh dưới dạng thay thế”, nếu nó tồn tại. Nếu không, bạn có thể sử dụng “Script as Create”, sau đó khi định nghĩa xuất hiện, hãy thay đổi CREATE với ALTER .

Nếu bạn chỉ có giao diện dòng lệnh, bạn có thể truy vấn sys.sql_modules xem để lấy định nghĩa hiện có (như trong ví dụ trước). Sau đó, bạn có thể sao chép định nghĩa và thay thế CREATE với ALTER .

Sau khi hoàn thành việc đó, bạn có thể thêm WITH ENCRYPTION và chạy lại.

Ví dụ 3 - Thêm nhiều thuộc tính

Mã hóa chỉ là một trong số các thuộc tính mà bạn có thể đưa vào định nghĩa của chế độ xem của mình. Nếu bạn cần chỉ định nhiều thuộc tính, hãy phân tách chúng bằng dấu phẩy.

Ví dụ:nếu bạn muốn sử dụng mã hóa bạn muốn chỉ định ràng buộc giản đồ, thì bạn cần thêm những thứ này dưới dạng danh sách được phân tách bằng dấu phẩy.

ALTER VIEW dbo.v_Cats
WITH ENCRYPTION, SCHEMABINDING
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server INFORMATION_SCHEMA Lượt xem | Xem nếu một bảng tồn tại

  2. Tạo cột “Sửa đổi lần cuối” trong SQL Server

  3. Sự khác biệt giữa chỉ mục được phân nhóm và không được phân nhóm là gì?

  4. Cách đổi tên cơ sở dữ liệu trong SQL Server - Hướng dẫn SQL Server / TSQL Phần 26

  5. Làm thế nào để bạn lập mô hình kế thừa trong cơ sở dữ liệu một cách hiệu quả?