GRANT SELECT 权限问题

问题描述 投票:0回答:1

我有一个 SQL 视图

[schemaA].[ViewNameA]
,它构建在具有不同模式的其他视图上:

  • [schemaB].[ViewNameB]
  • [schemaC].[ViewNameC]
  • [schemaD].[ViewNameD]

我正在尝试为功能帐户“USERXYZ”提供对

[schemaA].[ViewNameA]
的访问权限:

GRANT SELECT ON [schemaA].[ViewNameA] to USERXYZ

当我使用此“USERXYZ”帐户登录并尝试在

[schemaA].[ViewNameA]
上运行选择时,我收到如下错误:

对象“ViewNameB”、数据库“db1”、架构“schemaB”的 SELECT 权限被拒绝。

此帐户“USERXYZ”在 db1 上具有“public”角色。如何在不授予

[schemaA].[ViewNameA]
和其他人选择的情况下提供对
[schemaB].[ViewNameB]
的访问权限?

我尝试管理架构权限 -

ALTER AUTHORIZATION
- 但随后用户拥有对 schemaB 下所有视图的权限。

sql-server sql-server-2012 user-permissions
1个回答
0
投票

这个错误是字面上告诉你这里的问题。

USER
没有其他对象对
SELECT
的权限。从评论中您可以看出,这些对象位于同一数据库中,但由不同的
USER
拥有,因此权限链不起作用。因此,为什么不只是
GRANT
USER
也从该对象获得
SELECT
的权限呢?正如您演示的那样,您已经知道语法,但要确认:

GRANT SELECT ON [schemaB].[ViewNameB] to USERXYZ;

但是,在相关说明中,您不应该嵌套视图;这可能会产生性能问题。相反,您应该在 ViewNameA

 中引用需要引用的对象,而不是
引用 ViewNameB。阅读
嵌套视图是一个好的数据库设计吗?
可能值得。

© www.soinside.com 2019 - 2024. All rights reserved.