在不更改查询的情况下阻止对列的访问
Block access to column without changing query
我有一个 Microsoft SQL 服务器,其中包含需要保护的数据(某些 table 的某些敏感列)和一个查询该数据库的应用程序,如下所示:
SELECT BoringColumn, SensitiveColumn FROM Table
我有以下限制:
- 我有多个用户 (3-4),每个用户都有不同的列可见或不可见。
在此示例中,不应访问 SensitiveColumn。
- 我可以不能直接更新应用程序发送的查询
我已经尝试了什么:
我尝试使用 SQL Servers Dynamic Data Masking 功能。但是它不够精细,您可以针对每个用户打开或关闭它,而不仅仅是针对某些列。它可以在查询中泄漏数据,上面的 link 也解释了这一点。
我知道我可以在 Table.SensitiveColumn
上拒绝用户 SELECT
。
然而,任何现有的请求 table 的查询都会因权限错误而中断。
我还有什么选择?
理想情况下,我想要一些东西来替换服务器端的查询并执行如下操作:
SELECT BoringColumn, 'N/A' as SensitiveColumn FROM Table
我想我找到了一个可能的解决方案:
更改 table 结构 - 将 SensitiveColumn 重命名为不同的名称,并添加一个具有 SensitiveColumn 旧名称的计算列,这将显示基于 current_user
.
的结果
CREATE TABLE tblTest
(
boringColumn int,
SensitiveBase varchar(10), -- no user should have direct access to this column!
SensitiveColumn as
case current_user
when 'Trusted login' then SensitiveBase
else 'N/A'
end
)
我不确定的一件事是您是否可以拒绝访问 SensitiveBase
列但将其授予 SensitiveColumn
.
我会留给你自己测试。
如果无法做到这一点,您只需将 SensitiveBase
列的 select 权限仅授予 trusted login
并拒绝其他所有人的权限。
我有一个 Microsoft SQL 服务器,其中包含需要保护的数据(某些 table 的某些敏感列)和一个查询该数据库的应用程序,如下所示:
SELECT BoringColumn, SensitiveColumn FROM Table
我有以下限制:
- 我有多个用户 (3-4),每个用户都有不同的列可见或不可见。 在此示例中,不应访问 SensitiveColumn。
- 我可以不能直接更新应用程序发送的查询
我已经尝试了什么:
我尝试使用 SQL Servers Dynamic Data Masking 功能。但是它不够精细,您可以针对每个用户打开或关闭它,而不仅仅是针对某些列。它可以在查询中泄漏数据,上面的 link 也解释了这一点。
我知道我可以在 Table.SensitiveColumn
上拒绝用户 SELECT
。
然而,任何现有的请求 table 的查询都会因权限错误而中断。
我还有什么选择?
理想情况下,我想要一些东西来替换服务器端的查询并执行如下操作:
SELECT BoringColumn, 'N/A' as SensitiveColumn FROM Table
我想我找到了一个可能的解决方案:
更改 table 结构 - 将 SensitiveColumn 重命名为不同的名称,并添加一个具有 SensitiveColumn 旧名称的计算列,这将显示基于 current_user
.
CREATE TABLE tblTest
(
boringColumn int,
SensitiveBase varchar(10), -- no user should have direct access to this column!
SensitiveColumn as
case current_user
when 'Trusted login' then SensitiveBase
else 'N/A'
end
)
我不确定的一件事是您是否可以拒绝访问 SensitiveBase
列但将其授予 SensitiveColumn
.
我会留给你自己测试。
如果无法做到这一点,您只需将 SensitiveBase
列的 select 权限仅授予 trusted login
并拒绝其他所有人的权限。