首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL交叉数据库视图安全性

SQL交叉数据库视图安全性
EN

Database Administration用户
提问于 2017-10-04 17:45:27
回答 2查看 3.1K关注 0票数 2

跨数据库视图:

嗨,我们有两个数据库

数据库A:包含dbo.Customerid表,

数据库B:包含dbo.Customerdescription表,

数据库报告:有一个顾问供应商(vdr)模式,这样他们就可以加入,但看不到安全信息(SSN和驱动许可证等)

我看到了很多信息:什么是最佳的、安全的方式让顾问访问跨数据库视图?

我看到了错误消息,“对象DatabaseA.dbo.customer上的SELECT权限被拒绝,等等”

代码语言:javascript
复制
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
EN

回答 2

Database Administration用户

回答已采纳

发布于 2017-10-04 18:00:30

除非将所有3个数据库的DB_CHAINING设置为true,否则应授予基础表的SELECT权限。

如果将DB_CHAINING设置为true,则这些数据库的所有3个所有者都是相同的,并且所有3个对象都具有相同的所有者(目前在设计中不是这样,因为您的表属于dbo,视图属于vdr),由于所有权链,将不会检查底层表的权限

要使所有权链接在您的情况下有效,您应该执行以下操作:

  • 运行:使用报告;对架构进行更改授权::vdr到dbo;
  • 在所有三个数据库上将db_chaining设置为true :使用主数据库;去更改数据库报告集db_chaining on;更改数据库DatabaseA设置db_chaining;
  • 检查所有3个数据库的所有者,如果不是相同的,则使用数据库上的alter授权将其更改为同一个登录::yourDB到yourLogin
票数 3
EN

Database Administration用户

发布于 2017-10-04 20:21:11

阅读这些帖子,Server安全特性中的所有权链接或安全风险理解Server中的跨数据库所有权链

读完这些之后,权衡一下DB_Chaining的利弊。另外,确保顾问或供应商不会对可能传播表通过视图修改数据的视图进行更改。我知道您只是尝试授予必要的权限和对特定数据的访问,但是您的组织已经允许访问这些第三方。我想下一个要求是“我们能改变吗.”

检查您的合同,并确保您没有给予更多的访问超过必要。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/187677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档