【问题标题】:How can I achieve row level security in SQL Server 2014如何在 SQL Server 2014 中实现行级安全性
【发布时间】:2019-10-15 20:41:59
【问题描述】:

有没有办法在 SQL Server 2014 中获得行级安全性?

我的问题是:

  • 我有一个包含多个地区数据的表格
  • 我为每个区域创建了一个视图
  • 特定用户将有权访问特定区域视图
  • 但如果不授予对基础表的访问权限,这些用户将无法访问视图

我需要限制用户只能查看某些行。有没有可能这样做?

【问题讨论】:

  • 请阅读 SQL Server 行级安全指南并尝试使您的问题更具体:docs.microsoft.com/en-us/sql/relational-databases/security/…
  • SQL Server 2016 中添加了行级安全性。如果您需要实现类似的功能,则需要为您定制一些东西;也许是通过强制用户使用 SP 访问数据并撤销他们的SELECTUPDATEDELETE 等权限。如果您不能这样做,并且您必须具有行级安全性,那么我建议您升级。不是一个“便宜”的选项(取决于您需要的许可证和数量),但如果要求您具有该功能并且您不能以不同的方式提供它,那么由企业来决定他们想要做什么。

标签: sql-server sql-server-2014 row-level-security


【解决方案1】:

我通过为指定的行创建视图并仅授予视图而不是基础表的权限来实现它

  • 所以用户只能看到视图返回的行。我们可以控制视图中where子句返回的行。
  • 但表也可能包含其他行

关键术语:所有权链

【讨论】:

    【解决方案2】:

    相同的 SQL 查询会根据身份返回结果。不需要特殊的数据库代码。您可以控制行和列的返回方式,甚至聚合方式。例如,下面的 SQL 将为经理、分析师和开发人员返回不同的结果。 从employee_salaries中选择*;

    【讨论】:

    • select * from employee_salaries; 如何单独为不同的人返回不同的结果?这将返回表employee_salaries 中的每一 行和每一 列。该语句中的任何内容都不会阻止返回行/列。在没有详细说明为什么该声明会产生这种行为的情况下,这个答案只会吸引(进一步)反对票。
    猜你喜欢
    • 2017-02-04
    • 2011-08-08
    • 2017-04-23
    • 2021-10-12
    • 1970-01-01
    • 2019-04-26
    • 2013-01-18
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多