2008-11-27 31 views
12

Vì chúng tôi không triển khai người dùng ứng dụng của chúng tôi là người dùng trong máy chủ SQL, khi máy chủ ứng dụng kết nối với cơ sở dữ liệu mỗi ứng dụng luôn sử dụng cùng thông tin đăng nhập để đính kèm mỗi cơ sở dữ liệu.Máy chủ SQL: Sửa đổi thuộc tính "Tên ứng dụng" cho mục đích kiểm toán

Điều này thể hiện vấn đề kiểm tra. Sử dụng trình kích hoạt, chúng tôi muốn lưu trữ mọi cập nhật, chèn và xóa và gán từng thông tin cho một người dùng cụ thể. Một giải pháp có thể là thêm cột "được cập nhật bởi người dùng" vào mỗi bảng và cập nhật điều này mỗi lần. Điều này có nghĩa là một cột mới trên mỗi bảng và một tham số mới trên mọi thủ tục lưu sẵn. Nó cũng có nghĩa là bạn chỉ có thể thực hiện xóa mềm.

Thay vì điều này, tôi đề xuất sử dụng thuộc tính Tên ứng dụng của chuỗi kết nối và đọc thông tin này với thuộc tính App_Name() bên trong trình kích hoạt. Tôi đã thử nghiệm điều này với một ứng dụng đơn giản và có vẻ như nó hoạt động (định dạng có thể như sau: App = MyApp | User = 100).

Câu hỏi dành cho các bạn là, đây có phải là ý tưởng tồi và bạn có ý tưởng tốt hơn không?

+0

Bạn giải quyết vấn đề này bằng cách nào? Bạn đã có thể đọc "App = MyApp | User = 100" từ trình kích hoạt bằng cách sử dụng 'CONTEXT_INFO'? Tôi cần phải sửa đổi các trình kích hoạt được sử dụng bởi * Kiểm tra ApexSQL 2008 * và lưu trữ "người dùng" được chuyển qua 'ApplicationName'. – AMissico

Trả lời

10

Tôi sử dụng SET CONTEXT_INFO cho việc này. Nó chỉ là những gì bạn cần.

+0

Aha, trông chỉ là vé. Các varbinary là một chút khó chịu nhưng không phải là một nhức đầu lớn. Chúc mừng. –

+1

Cảm ơn bạn!Điều tuyệt vời là: bạn có thể làm cho nó thậm chí làm việc với truy cập cơ sở dữ liệu trực tiếp đồng thời, như từ MS Access và sử dụng tên người dùng của kết nối ban đầu, bằng cách sử dụng một cái gì đó như sau: COALESCE (CONVERT (VARCHAR (128), CONTEXT_INFO()), CURRENT_USER) – realMarkusSchmidt

+0

Bạn có một ví dụ? – AMissico

1

Chúng tôi sử dụng thuộc tính Tên ứng dụng để kiểm soát trình kích hoạt kiểm tra và không thấy bất kỳ vấn đề nào khi sử dụng và không nhận thấy bất kỳ vấn đề nào về tốc độ (mặc dù trong trường hợp của chúng tôi, chúng tôi không kiểm tra cụ thể cho các ứng dụng nhất định. để đo khoảng thời gian không làm gì đó mất :))

+0

Thật tuyệt khi nghe. Bởi những âm thanh của nó, bạn đang sử dụng cùng một tên ứng dụng mỗi lần. Tôi đang đề xuất sửa đổi tên ứng dụng cho mỗi kết nối để xác định người dùng hiện tại. Bạn có thể thấy bất kỳ vấn đề nào với điều này (chúng tôi không kết nối với hồ bơi) không? –

+0

Chúng tôi sử dụng hai tên ứng dụng khác nhau, một cho khi chúng tôi muốn kiểm toán, và một cho khi chúng tôi không (bởi vì bất cứ điều gì đang sử dụng kết nối là xử lý kiểm toán bằng tay). –

2

Nó chắc chắn có vẻ như một giải pháp khả thi, mặc dù bạn sẽ cần phải tiêm tên người dùng vào chuỗi kết nối mỗi lần tải ứng dụng của bạn. Lưu ý rằng giải pháp này có thể sẽ không hoạt động với một ứng dụng web, vì chuỗi kết nối của bạn sẽ khác nhau mỗi lần, điều này có thể dẫn đến các vấn đề kết nối lớn.

Tùy chọn khác là truy xuất tên máy chủ/địa chỉ IP (SELECT host_name()) và lưu trữ thay vào đó.

Bạn sẽ không nhất thiết cần tham số mới trên từng thủ tục được lưu trữ, vì bạn có thể sửa đổi từng thủ tục được lưu trữ (hoặc trình kích hoạt) để tự động chèn App_Name/Tên máy chủ.

Một nhược điểm tiềm năng là mọi sửa đổi được thực hiện thông qua Management Studio sẽ không có App_Name tùy chỉnh và bạn sẽ bị bỏ lại với "Microsoft Management Studio" làm người dùng.

+0

Mặc dù chúng tôi đã từng làm điều này, chúng tôi không còn sử dụng kết nối tổng hợp để mỗi kết nối được thực hiện riêng lẻ. Tên máy chủ/địa chỉ IP sẽ không hoạt động vì điều này sẽ đến từ máy chủ ứng dụng chứ không phải máy khách. –

+0

Nếu chỉ có tôi đã vấp phải câu trả lời này vài năm trước ... Chúng tôi sử dụng Tên ứng dụng cho mục đích chính xác, vì lý do chính xác này và có vấn đề kết nối chính xác như mô tả ... Tôi đang cố tìm cách để thiết lập "App Name" từ một kết nối mở, để chúng ta có thể giữ cho chuỗi kết nối không đổi và loại bỏ các lỗ hổng của creep. – Tao

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