有一个用户“User14”。 问题:是否可以设置权限,以便通过执行 normal SELECT,用户接收有关特定组织的信息?这样以后每个用户将只能在总表中看到他可用的信息。
Microsoft SQL Server 2012 (SP4-GDR) (KB4583465) - 11.0.7507.2 (X64)
Nov 1 2020 00:48:37
版权所有 (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.2 (Build 9200 :) (管理程序)
有一种相当普遍的做法是不直接从表中返回结果,而是使用过程/函数(取决于 DBMS)。那些。最初不是从表中进行选择(SELECT),而是从函数中进行选择,作为一个选项,您可以将 USER_ID 参数传递到该函数中,并且根据给定的值,您不仅可以返回正确的行,还可以返回字段/ 列。
例如,有一个字段,其内容仅供用户 A 使用。当用户 A 从函数中进行选择时,该字段将包含值。用户 B 无权访问该字段的内容,因此该字段的内容将为 NULL。
在 SQL SERVER 中,这是通过表值函数 (ITVF) 处理的。
在 ORACLE DATABASE 中,作为一个选项,您可以使用流水线 (PIPELINE) 函数。
在这两种情况下,用户都不需要从此表中的 SELECT 权限。您只需要执行此功能的权限。
因此,不仅您的任务得到了解决,而且当直接从表中获取信息时,一个可能的安全漏洞也被关闭了 - 使用通常的 SELECT,任何用户都没有权限。