2012-03-04 41 views
7

Tôi đã viết một thủ tục được lưu trữ trong SQL Server.Tôi muốn ẩn tập lệnh của một thủ tục được lưu trữ trong SQL Server 2008

Bây giờ, chỉ là tôi không muốn bất kỳ ai xem tập lệnh của tôi hoặc chỉnh sửa nó.

Hãy nhớ rằng tôi đang làm việc trên id và mật khẩu đăng nhập chuẩn. Được chia sẻ với mọi người.

Do đó một số cách mà tôi có thể cho phép mọi người thực hiện quy trình. Nhưng họ không nên xem kịch bản.

Chúc mừng! cảm ơn

+0

Thay vì mã hóa, bạn nên sửa chữa bảo mật của mình. Không có lý do gì cho tất cả mọi người cùng đăng nhập với cùng quyền. – HLGEM

Trả lời

7

Bạn đang tìm kiếm WITH ENCRYPTION, mã này sẽ mã hóa mã sau proc được lưu trữ của bạn.

CREATE PROCEDURE usp_MyProc 
WITH ENCRYPTION 
AS 
SELECT * 
FROM myTable 

Chỉ cần một caveat, từ MSDN:

Người dùng không có quyền truy cập vào bảng hệ thống hoặc các tập tin cơ sở dữ liệu không thể lấy lại văn bản obfuscated. Tuy nhiên, văn bản sẽ có sẵn cho người dùng đặc quyền có thể truy cập các bảng hệ thống qua cổng DAC hoặc truy cập trực tiếp vào các tệp cơ sở dữ liệu.

Một số tài liệu tham khảo và đọc thêm:

+0

Ngoài ra, 'WITH ENCRYPTION' trong SQL Server thực sự nên được gọi là' WITH MINOR_OBFUSCATION'. Nếu bạn biết những gì bạn đang tìm kiếm, có rất nhiều tài nguyên trên mạng sẽ giúp giải mã một đối tượng hệ thống và chúng không bị hạn chế đối với người dùng hoặc DAC đặc quyền. –

+0

Đúng, nó sẽ không giúp ai đó quyết định xem mã, nhưng nó sẽ khiến một số lượng lớn người sử dụng. –

2

Sử dụng từ khóa encryption cho quy trình được lưu trữ của bạn. Điều này sẽ ẩn mã:

CREATE PROCEDURE dbo.foo 
WITH ENCRYPTION 
AS 
BEGIN 
    SELECT 'foo' 
END 
+0

bất cứ ai vẫn có thể chạy SP, phải không? chỉ là mã được ẩn – LearnByReading

+0

Điều đó là chính xác. –

3

SQL Server không thực sự cung cấp một phương pháp hết sức rõ ràng để bảo vệ mã module. Mệnh đề WITH ENCRYPTION phải được đặt tên theo dòng WITH LOOSE_OBFUSCATION, vì "mã hóa" rất dễ bị cản trở. Bạn sẽ không thể sử dụng bất kỳ thứ gì trong SQL Server để làm cho mã không thể giải mã được bởi bất kỳ ai ngoại trừ người xem bình thường nhất - bất kỳ ai xác định sẽ có thể đánh bại các phương pháp gốc mà không làm đổ mồ hôi.

Mặc dù điều này có thể đủ tốt cho nhu cầu của bạn, có thể là cách an toàn hơn (nhưng vẫn chưa hoàn hảo) là đặt một số hoặc tất cả logic nghiệp vụ của thủ tục into the CLR (read more here).

Các vấn đề liên quan