Sql-Server
SQL 跨數據庫視圖安全性
跨數據庫視圖:
你好,我們有兩個數據庫
數據庫 A:包含 dbo.Customerid 表,
數據庫 B:包含 dbo.Customerdescription 表,
數據庫報告:具有顧問供應商 (vdr) 的模式,因此他們可以加入,但看不到安全資訊,(SSN 和驅動程序許可證等)
我看到很多資訊:讓顧問訪問跨數據庫視圖的最佳、安全方式是什麼?
我看到錯誤消息,“對象 DatabaseA.dbo.customer 等的 SELECT 權限被拒絕”
create table DatabaseA.dbo.Customer ( Customerid int primary key, Customersalescode varchar(25), Membersince datetime ) create table DatabaseB.dbo.CustomerDescription ( CustomerId int primary key, Firstname varchar(255), LastName varchar(255), SSN int, Driverlicensenumber varchar(30) ) create view vdr.CustomerReport as select cust.CustomerId, cust.Membersince, cds.FirstName, cds.LastName from DatabaseA.dbo.Customer cust inner join DatabaseB.dbo.Customerdescription cds on cust.Customerid = cds.customerid
除非為所有 3 個數據庫
DB_CHAINING
設置為,否則您應該授予對基礎表的權限。true``SELECT
如果您設置
DB_CHAINING
為true
,則這些數據庫的所有 3 個所有者都是相同的,並且所有 3 個對像都具有相同的所有者(現在在您的設計中這不是真的,因為您的表屬於dbo
並且視圖屬於vdr
)對基礎表的權限將由於所有權連結,未檢查要在您的情況下使所有權連結起作用,您應該執行以下操作:
- 跑步:
use Reporting; go alter authorization on schema::vdr to dbo;`
- 在所有 3 個數據庫上設置
db_chaining
為 true:use master; go alter database Reporting set db_chaining on; alter database DatabaseA set db_chaining on; alter database DatabaseB set db_chaining on;
- 檢查所有 3 個數據庫的所有者,如果不同,則將其更改為相同的登錄名
alter authorization on database::yourDB to yourLogin