我们有一个 SQL Server 2008 R2 数据库,该表的表由存储过程本身使用,并由专用应用程序代码(VBA)调用。
直到现在所有最终用户都访问相同的数据,但是为了符合法规要求,他们将被分为2个法律实体,我们必须确保每个用户仅访问其实体的记录。
在应用程序级别实现此限制非常简单,但并不安全(AFAIK容易破坏任何XLA)。
因此,为了安全起见,我们必须在数据库级别实现它。
我的第一个想法是简单地更改存储过程以连接到当前调用者的实体上,以透明地过滤由SQL查询检索到的记录。
不幸的是,访问是通过通用SQL Server用户进行的,而且,根据我在SO和其他地方看到的内容,尽管我们使用的是完整的Microsoft基础架构,但无法获得Windows用户名称。
实际上,我测试过的所有功能都返回SQL Server用户名:
SELECT SUSER_NAME();
SELECT ORIGINAL_LOGIN();
EXEC sp_who
EXEC sp_who2
因此,除非我有任何遗漏,否则我们将必须将身份验证模式切换为Windows 。
然后,按如上所述加入,或:
还有其他选择吗?