簡體   English   中英

Azure SQL 與 Azure Active Directory 身份驗證 - 用於安全性 function 用於行級安全性

[英]Azure SQL with Azure Active Directory authentication - use in security function for row-level security

我們有一個使用 Azure AD 身份驗證的 Azure SQL 數據庫。 這對會員和來賓 AD 用戶以及 AD 組都適用。

我們需要對某些表應用行級安全性,基於:

  1. 用戶是否擁有數據庫的所有權(或至少 CREATE USER 權限),或者
  2. 基於AD組

我們創建了一個表值 function 以用於適當的安全策略。 問題:

  1. 我們如何確定用戶是否對 function 中的數據庫擁有所有權(必須with schemabinding定義)? 使用sys.fn_my_permissions查找權限被拒絕,因為sys函數不能with schemabinding一起使用。
  2. 我們如何查詢用戶所屬的 AD 組?

或者我們是否需要維護數據庫內的關系表(伴隨多重維護 - AD + 幾個數據庫)?

系統 function is_member is_member('<AD Group>')可用於驗證當前用戶是否是 AD 組的成員,只要該 AD 組已作為主體添加到數據庫中。 這個 function 也適用於數據庫角色。

所以像這樣的安全 function 是有效的:

CREATE FUNCTION [fUserCanAccess](@Group varchar(50))
   RETURNS TABLE
   WITH SCHEMABINDING
AS RETURN (
   SELECT 1 as canAccess WHERE
      is_member('db_owner') = 1
   or
      is_member(@Group) = 1
;

第一個is_member測試允許訪問所有行的數據庫角色。 第二個is_member測試用戶是否在同一 (AD) 組中。

is_member(<AD Group>)返回:

  • 1 如果 AD 組是數據庫中的用戶並且登錄用戶是 AD 組的成員(在 Active Directory 中)
  • 0 如果 AD 組是數據庫中的用戶並且登錄的用戶不是 AD 組的成員(在 Active Directory 中)
  • NULL 如果 AD 組不存在或不是數據庫中的用戶

組名稱不區分大小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM