如何在SQL Server 2008中使用视图隐藏详细信息

时间:2012-03-26 15:59:04

标签: sql-server sql-server-2008

我在SQL Server 2008 R2中将数据存储在名为CompanyData的数据库中。我在那里有一些交易历史表,每笔交易都有很多细节。

对于某些报告用户,我希望他们拥有报告容量,但隐藏了许多细节。

所以我继续创建了一个新的数据库DBReport,并创建了一个只从表中选择某些列的视图。例如,[CompanyData]中的SELECT field1,field2,field3。[dbo]。[TableA] ...

我在两个DBReport中创建了一个新用户和一个新登录(我承认我不理解它们之间的区别,因为我总是一起创建它们)只有ReportingUser和db_datareader角色。

问题在于,当我以这个有限的用户身份运行报告时,它会返回一个错误,指出在当前的安全性下这不会发生。

所以我的问题归结为如何在视图中指定使用CompanyData中的有效用户登录CompanyData。我知道我也可以在CompanyData中创建ReportingUser,但这正是我想要避免的。

我希望我在这里不那么混乱......

谢谢!

2 个答案:

答案 0 :(得分:2)

了解所有权链here(它有一个非常好的解释)

我认为您的案例中的问题是谁是对象的所有者。可能你对DBReport的看法与你的[CompanyData]。[dbo]。[TableA]表有不同的所有者。所以你对视图有权限,但它没有链接到tableA,因为它们有不同的所有者。

您可以通过向tableA上的ReportUser添加权限来解决此问题。

关于用户和登录,基本上登录位于实例级别,用户位于数据库级别

答案 1 :(得分:0)

以有限报告用户身份运行SQl Server Manager connect 新查询,从视图内部粘贴到sql中。看看它说的是什么。 通常的问题是参考,你有权看看table2,但没有table1它有一个外键或类似。

Ide确保您对视图所触及的所有表都有选择和参考,其中包括任何udfs或SP(或其使用的其他视图)引用的任何表。

PS此报告仅使用此视图吗?