Sql-Server

SQL 跨數據庫視圖安全性

  • October 14, 2017

跨數據庫視圖:

你好,我們有兩個數據庫

數據庫 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_CHAININGtrue,則這些數據庫的所有 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

引用自:https://dba.stackexchange.com/questions/187677