資料行層級安全性
資料行層級安全性可供客戶根據使用者其執行內容或群組成員資格來控制資料表資料行的存取。
資料行層級安全性可簡化應用程式安全性的設計和編碼,並供限制資料行存取以保護機密資料。 例如,確保特定使用者只能存取其部門相關資料表的特定資料行。 存取限制邏輯是位於資料庫層,而不是離開這些資料,到另一個應用程式層。 資料庫會在每次嘗試從任何層級存取該資料時套用存取限制。 此限制可藉由縮小整個安全性系統的介面區,讓安全性更加可靠和健全。 此外,資料行層級安全性也不需引進檢視以篩選出可用來將存取限制加諸於使用者的資料行。
您可以使用 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)、電話號碼和其他個人資料。
- 某家醫療保健供應商允許醫生和護士存取機密的醫療記錄,而不允許帳務部門的成員檢視此資料。