在SQL 2008R2中创建了一个视图,但是存在权限问题

时间:2019-02-28 11:59:10

标签: sql sql-server

Database1有一个表:A

Col1 Col2, Col3, Col4
 1    2      3     4

我希望Database2上的用户(XY)看到该表,所以我创建了一个视图

Create View vw_TableA as
    Select col1, col2, col3, col4
    from Database1.dbo.A

但是用户遇到错误

  

916消息,级别14,状态1,第2行   服务器主体“ XY”在当前安全上下文下无法访问数据库“ Database1”。

正在使用:Sql Server 2008 R2 脚本:TSql

有关授予权限的任何想法。我不想将usre(XY)映射到database1,因为如果这样做,他就可以访问database1上的所有表。

目前仅适用于一个用户,但我们将获得更多的用户和更多的数据库。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

除非您已授予对公共角色的权限(这不是一个好习惯),否则,如果您已授予用户权限,则用户只能访问database1中的对象。因此,将用户添加到database1将默认仅允许连接。

您可以简单地将用户(没有授予权限)添加到database1中,然后在两个数据库中打开DB_CHANING选项。从安全角度来看,这是一个可行的解决方案,只要只有相同的特权用户才能在这些数据库中创建对象(例如sysadmin角色成员)。

ALTER DATABASE Database1 SET DB_CHAINING ON;
ALTER DATABASE Database2 SET DB_CHAINING ON;