Làm thế nào để làm cho mã kích hoạt chỉ thực thi cho một ứng dụng cụ thể?


8

Tôi đã tự hỏi nếu có thể kích hoạt một kích hoạt chỉ cho ứng dụng hiện tại của tôi và không cho bất kỳ sql thực hiện đối với bảng.

Tình huống:

Có hai ứng dụng làm việc trên cùng một cơ sở dữ liệu. App1 và App2.

Tôi có một kích hoạt trên 'MyTable' chỉ nên được kích hoạt khi App1 đang thực hiện một truy vấn, nhưng không phải khi App2 làm như vậy.


Vâng logic của nó. phải không bạn sẽ có tên ứng dụng ở đâu? Nếu bạn có quyền truy cập vào nó trong trình kích hoạt (được chèn) thì thật dễ dàng.
Siêu Peon

1
Patric, như là một thay thế cho việc sử dụng APP_NAME(), bạn cũng có thể sử dụng SET CONTEXT_INFO. SET CONTEXT_INFOthường được sử dụng để gửi thông tin đến các kích hoạt như thế này.
Nick Chammas

Câu trả lời:


10

Trong khi không phải là một thiết kế tốt, nó có thể làm được. Bạn sẽ cần đưa logic vào trình kích hoạt để nó khiến mã chỉ được thực thi khi ứng dụng đúng được kết nối.

Create trigger... 
As
    If app_name() = 'something' 
    begin 
        put code here 
    end

8
Nó có thể không phải là một mối quan tâm trong trường hợp cụ thể này, nhưng các độc giả tiềm năng khác cần lưu ý rằng app_name()rất dễ giả mạo thông qua các thuộc tính chuỗi kết nối.
Aaron Bertrand

4
Yup, rất dễ giả mạo. Đừng làm điều này vì mục đích bảo mật, nhưng để khắc phục các thiếu sót phần mềm nhỏ hoặc các thủ thuật tiện lợi khác, có lẽ bạn vẫn ổn. Chúng tôi đã có một vài người làm điều này.
db2

1
Rất đúng, điều này sẽ RẤT dễ dàng để có được xung quanh. Nhưng giả sử rằng người dùng ứng dụng không có ý định vô nghĩa (tôi không thể tin rằng tôi chỉ nói vậy) nó sẽ hoạt động. Không phải là ý tưởng tốt nhất, nhưng nó sẽ thực hiện công việc. Jon, cảm ơn vì định dạng. Sẽ không thử làm điều đó trên điện thoại của tôi.
mrdenny
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.