【发布时间】:2014-03-07 06:01:18
【问题描述】:
我有:
- 单个 Microsoft SQL Server 2008 R2
- 带有一些表的两个数据库:
DB1和DB2(都具有相同的所有者) - DB1 中的视图,
DB1.dbo.View1,SELECT * FROM DB2.dbo.Table1 - DB1 中的一个角色
ViewRole向视图授予了SELECT 许可(无其他权限) - Windows 用户
DOMAIN\user,服务器角色设置为public,属于DB1 的ViewRole
当用户尝试从视图中选择时,我收到错误:
服务器主体“DOMAIN\user”在当前安全上下文下无法访问数据库“DB2”
我已经尝试(并希望成功)使用两者来激活跨数据库所有权链接:
EXEC sp_configure 'Cross DB Ownership Chaining', '1';RECONFIGURE
和
EXEC sp_dboption DB1, 'db chaining', 'true'
EXEC sp_dboption DB2, 'db chaining', 'true'
为了确认设置已完成,我运行:
SELECT name, owner_sid, is_db_chaining_on FROM sys.databases
结果是:
name owner_sid is_db_chaining_on
DB1 0x0105...DCB510000 1
DB2 0x0105...DCB510000 1
那么,为什么用户不能从视图中选择?如果视图只从 DB1 中的表中选择,则不会出错。
有人对我可能遗漏或误解的内容有任何建议吗?
【问题讨论】:
标签: sql-server sql-server-2008 security ownership