跨数据库视图:
嗨,我们有两个数据库
数据库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发布于 2017-10-04 18:00:30
除非将所有3个数据库的DB_CHAINING设置为true,否则应授予基础表的SELECT权限。
如果将DB_CHAINING设置为true,则这些数据库的所有3个所有者都是相同的,并且所有3个对象都具有相同的所有者(目前在设计中不是这样,因为您的表属于dbo,视图属于vdr),由于所有权链,将不会检查底层表的权限
要使所有权链接在您的情况下有效,您应该执行以下操作:
db_chaining设置为true :使用主数据库;去更改数据库报告集db_chaining on;更改数据库DatabaseA设置db_chaining;发布于 2017-10-04 20:21:11
阅读这些帖子,Server安全特性中的所有权链接或安全风险和理解Server中的跨数据库所有权链。
读完这些之后,权衡一下DB_Chaining的利弊。另外,确保顾问或供应商不会对可能传播表通过视图修改数据的视图进行更改。我知道您只是尝试授予必要的权限和对特定数据的访问,但是您的组织已经允许访问这些第三方。我想下一个要求是“我们能改变吗.”
检查您的合同,并确保您没有给予更多的访问超过必要。
https://dba.stackexchange.com/questions/187677
复制相似问题