Máy chủ SQL EXECUTE NHƯ sự cố


13

Tôi đang thiếu một cái gì đó trong khi cố gắng làm cho thủ tục lưu trữ của tôi sử dụng EXECUTE AS. Các thủ tục được lưu trữ là đọc dữ liệu từ source_db, tổng hợp nó và lưu trữ kết quả trong target_db.

Các sp chính nó là trong target_db. Tôi có một thông tin đăng nhập chuyên dụng và ánh xạ nó tới người dùng ở cả hai source_dbtarget_dbcho chủ sở hữu của sp (vì vậy có một người dùng app_agentvào source_dbtarget_dbđăng nhập app_agent).

Nếu tôi đăng nhập như app_agentvà thực thi

EXEC target_db.app_agent_schema.import_data

mọi thứ đều hoạt động tốt. Nhưng nếu tôi thay đổi

ALTER PROCEDURE app_agent_schema.import_data WITH EXECUTE AS OWNER` (or `AS SELF`) 

và thử thực hiện nó, nó ném

Hiệu trưởng máy chủ "app_agent" không thể truy cập cơ sở dữ liệu "source_db" trong bối cảnh bảo mật hiện tại.

Tôi đang sử dụng SQL Server 2008.

Ai đó có thể chỉ ra lỗi của tôi?

Cảm ơn

Cập nhật Sau khi thực hiện một số nghiên cứu, tôi thấy rằng ALTER DATABASE target_db SET TRUSTWORTHY ONgiải quyết được vấn đề, nhưng đó dường như không phải là giải pháp phù hợp với tôi ...


1
Tôi nghĩ rằng câu trả lời là bằng cách sử dụng cơ sở dữ liệu -level chéo cơ sở dữ liệu chuỗi sở hữu tùy chọn. Tôi đã có thể tái tạo lỗi trong kịch bản của bạn, nhưng không có đủ thông tin chi tiết để biết liệu tôi có tái tạo chính xác không ... tùy chọn CDOC không hoạt động với tôi, nhưng hãy thử và xem liệu điều đó có xảy ra không.
Jon Seigel

Câu trả lời:


24

Điều này được giải thích trong việc mở rộng mạo danh cơ sở dữ liệu bằng cách sử dụng EXECUTE AS . Bối cảnh EXECUTE AS chỉ được tin cậy trong cơ sở dữ liệu hiện tại và cho phép nó tràn sang các cơ sở dữ liệu khác là sự leo thang của vectơ tấn công đặc quyền.

Có hai giải pháp, cả hai được mô tả trong bài viết được liên kết ở trên:

  • một cách dễ dàng là đánh dấu cơ sở dữ liệu TRUSTWORTHY : ALTER DATABASE [source_db] SET TRUSTWORTHY ON;. Mặc dù dễ dàng, cũng là nguy hiểm vì nó làm cho dbocác source_dbmột de-facto sysadmin.

  • một cách an toàn là sử dụng ký mã, xem Gọi một thủ tục trong cơ sở dữ liệu khác để biết ví dụ. Điều này phức tạp hơn, nhưng là bảo mật buletproff 100%.


0

Người dùng nào chạy lệnh ALTER PROCEDURE? Nó có thể đã đặt mức truy cập của Chủ sở hữu (bản thân) cho người dùng đó, không phải mức bạn dự định.


Cùng một người dùng đã tạo thủ tục ( app_agent). Nếu tôi có thủ tục được tạo bởi app_agentkhông có execute as owner/self, hãy đăng nhập như app_agent, SP thực thi đúng. Nếu tôi thêm EXECUTE AS SELF(một lần nữa, cùng một người dùng) và đăng nhập ngay cả app_agent, tôi nhận được...is not able to access the database...
a1ex07
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.