【发布时间】:2018-02-27 15:38:52
【问题描述】:
我知道 SQL Server 的 RLS 使用 Windows 身份验证,但是否可以使用外部身份验证?喜欢 Google 或 Microsoft 身份验证?
我正在使用 C# Web API 2 对其进行测试,但不知道如何。
提前致谢!
【问题讨论】:
标签: sql-server asp.net-web-api2 row-level-security
我知道 SQL Server 的 RLS 使用 Windows 身份验证,但是否可以使用外部身份验证?喜欢 Google 或 Microsoft 身份验证?
我正在使用 C# Web API 2 对其进行测试,但不知道如何。
提前致谢!
【问题讨论】:
标签: sql-server asp.net-web-api2 row-level-security
Row-Level-Security 功能不使用 Windows 身份验证。您正在创建自己的函数,用作过滤谓词。例如,您可以使用内置函数USER_NAME()(查看官方文档以获取完整的工作示例):
CREATE SCHEMA Security;
GO
CREATE FUNCTION Security.fn_securitypredicate(@SalesRep AS sysname)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS fn_securitypredicate_result
WHERE @SalesRep = USER_NAME() OR USER_NAME() = 'Manager';
当SalesRep 列中的一行与执行查询的用户 (@SalesRep = USER_NAME()) 相同或执行查询的用户是 Manager 用户 (USER_NAME() = 'Manager') 时,此函数返回 1。
您还可以使用sp_set_session_context 和SESSION_CONTEXT 来构建更复杂的逻辑。例如,您可以在.net 代码和set session context 中为您正在打开的 SQL 会话计算安全访问权限。然后,使用SESSION_CONTEXT,您可以在过滤功能中检查访问权限。
【讨论】: