代码之家  ›  专栏  ›  技术社区  ›  littlegreen

授予视图的选择权限,但不授予基础对象的选择权限

  •  24
  • littlegreen  · 技术社区  · 15 年前

    一切都很好,但实际上这行不通。在我批准之后 SELECT 对视图的权限,用户无法访问它,除非我授予 在所有基础对象上。存储过程也是如此。最终的结果是不起作用的,因为我最终仍然将敏感数据的访问权授予了错误的用户,而且很烦人,因为很容易忘记一个对象,而用户回来抱怨视图“不起作用”。

    选择 对视图或存储过程的权限,而不必公开底层对象?

    3 回复  |  直到 15 年前
        1
  •  22
  •   Graeme Perrow    15 年前

    拥有视图的同一用户是否也拥有底层表?否则,表的所有者需要使用grant选项授予视图所有者权限。如果同一个用户同时拥有表和视图,那么对视图授予权限就足够了。

        2
  •  3
  •   uTILLIty    10 年前

    ALTER AUTHORIZATION ON reporting.MyViewName TO dbo
    

    在上面的例子中 dbo 拥有表的用户是 reporting.MyViewName 正在访问

        3
  •  2
  •   ChrisLively    15 年前

    this forum 有帮助。

    CREATE USER [Reports] FOR LOGIN [Reports] WITH DEFAULT_SCHEMA = Reports
    CREATE SCHEMA Reports AUTHORIZATION Reports --Auth as Reports was the key piece of information that I had missed.
    GO
    CREATE ROLE Reporting AUTHORIZATION db_securityadmin
    GO
    exec sp_addrolemember @rolename = 'Reporting', @membername = 'Reports'
    GO
    GRANT CREATE VIEW TO Reporting
    GRANT CREATE TABLE TO Reporting
    
    GRANT SELECT, VIEW DEFINITION ON [dbo].[zName] TO Reporting;
    

    仅供参考-对于存储过程,应将EXEC授予该过程。

    推荐文章