Tôi đã có thiết lập sau:Sự cố với SQL Server "EXECUTE AS"
Có một SQL Server DB với một số bảng có trình kích hoạt được đặt trên chúng (thu thập dữ liệu lịch sử). Các trình kích hoạt này là các thủ tục được lưu trữ CLR với EXECUTE AS 'HistoryUser'
. Người dùng HistoryUser
là một người dùng đơn giản trong cơ sở dữ liệu mà không cần đăng nhập. Nó có đủ quyền để đọc từ tất cả các bảng và ghi vào bảng lịch sử.
Khi tôi sao lưu DB và sau đó khôi phục nó vào máy khác (Máy ảo trong trường hợp này, nhưng nó không quan trọng), trình kích hoạt không hoạt động nữa. Trong thực tế, không có mạo danh cho người dùng hoạt động nữa. Thậm chí một tuyên bố đơn giản như thế này
exec ('select 3') as user='HistoryUser'
tạo ra một lỗi:
Cannot execute as the database principal because the principal "HistoryUser" does not exist, this type of principal cannot be impersonated, or you do not have permission.
tôi read in MSDN rằng điều này có thể xảy ra nếu chủ sở hữu DB là một người sử dụng tên miền, nhưng nó không phải là. Và ngay cả khi tôi thay đổi nó cho bất cứ điều gì khác (giải pháp được đề nghị của họ) vấn đề này vẫn còn.
Nếu tôi tạo người dùng khác mà không cần đăng nhập, tôi có thể sử dụng nó để mạo danh tốt. Đó là, này chỉ hoạt động tốt:
create user TestUser without login
go
exec ('select 3') as user='TestUser'
Tôi không muốn tạo tất cả những trigger, vì vậy có cách nào làm thế nào tôi có thể làm cho HistoryUser
công việc hiện tại?
Bump: Xin lỗi, nhưng đây là kinda khẩn cấp ...
Nop, không giúp đỡ. –