資料行層級安全性

資料行層級安全性可供客戶根據使用者其執行內容或群組成員資格來控制資料表資料行的存取。

資料行層級安全性可簡化應用程式安全性的設計和編碼,並供限制資料行存取以保護機密資料。 例如,確保特定使用者只能存取其部門相關資料表的特定資料行。 存取限制邏輯是位於資料庫層,而不是離開這些資料,到另一個應用程式層。 資料庫會在每次嘗試從任何層級存取該資料時套用存取限制。 此限制可藉由縮小整個安全性系統的介面區,讓安全性更加可靠和健全。 此外,資料行層級安全性也不需引進檢視以篩選出可用來將存取限制加諸於使用者的資料行。

您可以使用 GRANT 物件使用權限 T-SQL 語法來實作資料行層級安全性。 透過這項機制,支援 SQL 驗證和Microsoft Entra識別碼 (先前稱為 Azure Active Directory) 驗證。

也請考慮根據 WHERE 子句篩選,對資料表強制執行資料列層級安全性的能力。

圖表顯示一個圖解表格,其中第一個資料行開頭為關閉的掛鎖,且其儲存格為橙色,而其他資料行則為白色儲存格。

Syntax

物件使用權限語句 GRANT 的語法允許授與資料表上逗號分隔資料行清單的許可權。

GRANT <permission> [ ,...n ] ON
    [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
    TO <database_principal> [ ,...n ]
    [ WITH GRANT OPTION ]
    [ AS <database_principal> ]
<permission> ::=
    SELECT
  | UPDATE
<database_principal> ::=
      Database_user
    | Database_role
    | Database_user_mapped_to_Windows_User
    | Database_user_mapped_to_Windows_Group

範例

下列範例示範如何限制 TestUser 存取 Membership 資料表的 SSN 資料行:

建立 Membership 資料表,其中包含 SSN 用來儲存社會安全號碼的資料行:

CREATE TABLE Membership
  (MemberID int IDENTITY,
   FirstName varchar(100) NULL,
   SSN char(9) NOT NULL,
   LastName varchar(100) NOT NULL,
   Phone varchar(12) NULL,
   Email varchar(100) NULL);

允許 TestUser 存取具有敏感性資料的資料行 以外的SSN 所有資料行:

GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;

如果查詢包含資料行,則 SSN 執行為 TestUser 失敗:

SELECT * FROM Membership;

產生錯誤:

Msg 230, Level 14, State 1, Line 12
The SELECT permission was denied on the column 'SSN' of the object 'Membership', database 'CLS_TestDW', schema 'dbo'.

使用案例

一些目前使用資料行層級安全性的範例:

  • 某家金融服務公司只允許帳戶管理員能夠存取客戶社會安全號碼 (SSN)、電話號碼和其他個人資料。
  • 某家醫療保健供應商允許醫生和護士存取機密的醫療記錄,而不允許帳務部門的成員檢視此資料。

後續步驟