2010-10-28 33 views
5

Tôi có hai cơ sở dữ liệu trên cùng một SQL Server:Làm thế nào để cấu hình một Stored Procedure để truy cập một bảng trong cơ sở dữ liệu khác

Cơ sở dữ liệu Một

  • bảng 1
  • bảng 2
  • sproc x

Cơ sở dữ liệu B

  • bảng 3
  • bảng 4
  • sproc y
  • sproc z

tôi muốn cung cấp truy cập user1 đến cơ sở dữ liệu, nhưng chỉ thông qua sự cho phép EXECUTE trên sprocs.

  • sproc x thực hiện kết nối giữa bảng 1 & 2 và user1 có thể thực thi.
  • sproc y thực hiện phép nối giữa các bảng 3 & 4 và user1 có thể thực thi.
  • sproc z thực hiện phép nối giữa các bảng 1 & 4 và user1 không thể thực hiện, trừ khi tôi cấp quyền SELECT cho bảng 1. Tại sao điều này?

Tôi không muốn cấp phép chọn, bởi vì điều này phá vỡ các mô hình bảo mật của "chỉ truy cập vào cơ sở dữ liệu thông qua sprocs"

Trả lời

3

Bạn có thể cần phải kích hoạt cross database ownership chaining cho cả cơ sở dữ liệu.

Để xem nếu nó được kích hoạt:

select name, is_db_chaining_on 
    from sys.databases 

Để kích hoạt các thiết lập:

EXEC sp_dboption 'DatabaseA', 'db_chaining', 'true'; 
GO 

EXEC sp_dboption 'DatabaseB', 'db_chaining', 'true'; 
GO 
+0

Nó không được kích hoạt ... Tôi đã kích hoạt cho các cơ sở dữ liệu sprocs của tôi, nơi cố gắng truy cập và nó dường như hoạt động. Cảm ơn! –

+0

Kể từ khi tôi chạy vào điều này với một số cơ sở dữ liệu gần đây, một vài mục bổ sung để kiểm tra.1) Làm cho chủ sở hữu cơ sở dữ liệu giống nhau cho cả hai cơ sở dữ liệu 2) Đảm bảo cùng một người dùng/nhóm tồn tại trong cả hai cơ sở dữ liệu –

1

tôi đã chính xác vấn đề này nhưng trong trường hợp của tôi là giải pháp là để cập nhật hai cơ sở dữ liệu để có cùng chủ nhân.

Nếu cơ sở dữ liệu thuộc sở hữu của cùng một chủ sở hữu, bạn không cần phải bật chuỗi quyền sở hữu một cách rõ ràng (vì chủ sở hữu là một và giống nhau).

Những bài báo về vấn đề này ở đây: [http://www.sommarskog.se/grantperm.html][1]

Bạn có thể cập nhật các quyền sở hữu của một cơ sở dữ liệu sử dụng sp_changedbowner hay "ALTER ỦY QUYỀN" tuyên bố cho phiên bản mới hơn.

+0

Điều này chỉ xảy ra với một số cơ sở dữ liệu gần đây mà chúng tôi đã tạo - chúng tôi quên thay đổi chủ sở hữu thành SA và các tùy chọn db_chaining ví dụ khác không hoạt động. Ngay sau khi chúng tôi thay đổi chủ sở hữu để SA nó làm việc. Lưu ý, chúng tôi vẫn cần đặt db_chaining thành true –

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