Sql Server 2016 有一個新功能叫 Row-Level Security ,大概意思是行版本的安全策略(原來我是個英語渣_(:з」∠)_)
直接上例子。這個功能相當通過對表添加一個函數(shù)作為過濾規(guī)則,使得擁有不同條件的用戶(或者登錄名) 之類的,只能獲取到符合條件的數(shù)據(jù)。相對來說是提供了那么一點的便捷性,當然也增加了數(shù)據(jù)的安全性,相當于每個用戶連接進來只能看到
符合規(guī)則的數(shù)據(jù)(當然,這里的用戶只是一個舉例。其實是可以通過編寫過濾函數(shù)來實現(xiàn)的)
舉個例子
有三個用戶 Sales1 ,Sales 2 ,Manager 3個數(shù)據(jù)庫用戶,然后用一個Sales的表來寄存他們的訂單記錄
CREATE TABLE Sales
(
OrderID int,
SalesRep sysname,
Product varchar(10),
Qty int
);
INSERT Sales VALUES
(1, 'Sales1', 'Valve', 5),
(2, 'Sales1', 'Wheel', 2),
(3, 'Sales1', 'Valve', 4),
(4, 'Sales2', 'Bracket', 2),
(5, 'Sales2', 'Wheel', 5),
(6, 'Sales2', 'Seat', 5);
-- View the 6 rows in the table
SELECT * FROM Sales;
go
![](/d/20211017/74a3ffdd468eb1698f078a70437ec8e6.gif)
這是全部表的數(shù)據(jù)的截圖
然后添加3個用戶,分別就是Sales1 Sales2 Manager 3個用戶,分別對他們的賦予Sales表的查詢和刪除(用于測試刪除功能) 的權(quán)限。
CREATE USER Manager WITHOUT LOGIN;
CREATE USER Sales1 WITHOUT LOGIN;
CREATE USER Sales2 WITHOUT LOGIN;
GRANT SELECT,delete ON Sales TO Manager;
GRANT SELECT,delete ON Sales TO Sales1;
GRANT SELECT,delete ON Sales TO Sales2;
然后以下是這個功能的核心部分。首先我們創(chuàng)建一個過濾函數(shù),然后將這個過濾函數(shù)添加到這個表的安全策略里面,就可以看到效果了。
函數(shù)邏輯很簡單,傳入一個@SalesRep 的名稱,用于匹配當前的 User_Name。匹配了才返回數(shù)據(jù)
然后下面一行是創(chuàng)建了一個安全策略,并且在Sales 的表里面使用函數(shù) fn_securitypredicate 作為表的篩選器。傳入函數(shù)的參數(shù)選定為 SalesRep 字段(也就是我們建表的那個銷售代表字段了)
CREATE FUNCTION 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';
CREATE SECURITY POLICY SalesFilter
ADD FILTER PREDICATE dbo.fn_securitypredicate(SalesRep)
ON dbo.Sales
WITH (STATE = ON);
然后我們看下查詢的結(jié)果
EXECUTE AS USER = 'Sales1';
SELECT * FROM Sales;
REVERT;
EXECUTE AS USER = 'Sales2';
SELECT * FROM Sales;
REVERT;
EXECUTE AS USER = 'Manager';
SELECT * FROM Sales;
REVERT;
![](/d/20211017/b1ede3968af3bc6cf8e9298450d68933.gif)
效果就是這樣,當然如果是要設(shè)置不同的過濾條件,設(shè)置不同的字段的時候,是可以通過上文的函數(shù)里面的代碼和安全策略進行設(shè)置的。按照這個過濾情況,如果登錄用戶非Sales1 Sales2 Manager 3個其中之一,是什么都查詢不了的。
另外,用戶無法刪除被過濾的數(shù)據(jù)。比方說 Sales1 不能刪除或修改OrderID = 3 的數(shù)據(jù)。
RLS的出現(xiàn)也是能幫助我們減輕一定功能上面的實現(xiàn)的~
PS:下面看下SQL Server 2016新功能特性
1、PolyBase:更簡單高效的管理關(guān)系型和非關(guān)系型的T-SQL數(shù)據(jù);
2、AlwaysOn增強功能:實現(xiàn)高可用和性能次之,包括高達3個同步復(fù)制、DTC支持和次級的Round-Robin負載均衡;
3、Row Level Security(層級安全性控管):讓客戶基于用戶特征控制數(shù)據(jù)訪問,功能已內(nèi)置至數(shù)據(jù)中,無須再修改應(yīng)用;
4、Dynamic Data Masking(動態(tài)數(shù)據(jù)屏蔽):有助于保護未被加密的數(shù)據(jù);
5、原生JSON支持:實現(xiàn)輕松解析和存儲,以及輸出關(guān)系型數(shù)據(jù);
6、Temporal數(shù)據(jù)庫支持:可跟蹤歷史數(shù)據(jù)變化;
7、數(shù)據(jù)歷史記錄查詢,以便DBA可精確定位;
8、MDS增強功:提供主數(shù)據(jù)服務(wù)器的服務(wù)器管理能力;
9、增強的Azure混合備份功能:在Azure虛擬機中可實現(xiàn)更快的備份和恢復(fù)。
重要改進:
1、始終加密(Always Encrypted)
數(shù)據(jù)的存儲和使用都將采用由微軟研究院所開發(fā)的技術(shù)進行加密;
2、彈性數(shù)據(jù)庫(Stretch Database)
SQL Server用戶將能夠把數(shù)據(jù)動態(tài)延伸至Microsoft Azure,以便增強其性能;
3、實時業(yè)務(wù)分析與內(nèi)存中聯(lián)機事務(wù)處理(Real-time Operational Analytics In-Memory OLTP)
該分析技術(shù)于2014年首次引入,現(xiàn)在已變得更加先進(更高的實時性能);
4、內(nèi)置高級分析(Built-in Advanced Analytics)、PolyBase和Mobile BI
在SQL Server 2016上,數(shù)據(jù)分析和PolyBase等技術(shù)會更易使用。此外,Mobile BI將被用于移動設(shè)備上的圖形展示。
以上所述是小編給大家介紹的Sql Server 2016新功能之Row-Level Security(值得關(guān)注),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
您可能感興趣的文章:- Sql Server2016 正式版安裝程序圖解教程
- SQL Server 2016正式版安裝配置過程圖文詳解
- SQL Server2016正式版安裝配置方法圖文教程
- SQL Server 2016的數(shù)據(jù)庫范圍內(nèi)的配置詳解
- SQL Server 2016 CTP2.3 的關(guān)鍵特性總結(jié)