對列集實施安全
對列集實施安全就像對其它字段實施安全一樣,但是稀疏列的權限可能會影響從列集獲取數據。讓我們做些測試。
首先,讓我們授予對所有稀疏列的SELECT權限,并試圖從列集獲取數據。你需要有一個用于這個測試的單獨賬戶。如果你沒有額外的賬戶,那么創建一個登錄和一個用戶為User1。讓我們使用User1權限來試著獲取數據。
代碼1:使用User1的帳戶獲取和更新數據。
--Set the execution context to the user User1
EXECUTE AS USER = 'User1'
-- select statement 1
SELECT Gender, Telephone, MonthlyIncome, Comments FROM Customers
-- select statement 2
SELECT AllSparseColumns FROM Customers
-- select statement 3
UPDATE dbo.Customers
SET Gender = 1
WHERE Id = 3
-- select statement 4
UPDATE dbo.Customers
SET [AllSparseColumns] = '777225656Test msg1'
WHERE Id = 3
REVERT
代碼2:將稀疏列的SELECT權限授予User1并執行代碼1。-- Grant select permission to all sparse columns
GRANT SELECT (Gender, Telephone, MonthlyIncome, Comments) ON OBJECT::dbo.Customers TO User1
-- Execute the code 1:
-- select statement 1 - will success
-- select statement 2 - will fail
-- select statement 3 - will fail
-- select statement 4 - will fail
-- Remove SELECT permission from User1
REVOKE SELECT (Id, Gender, Telephone, MonthlyIncome, Comments) ON OBJECT::dbo.Customers TO User1
盡管我們授予了對所有稀疏列的SELECT權限,但是用戶卻不能從列集獲取數據。它要求顯式的SELECT權限。但是如果我們授予稀疏列上的SELECT和UPDATE權限,User1就將可以訪問這個列集。但是User1不能更新這個列集。
代碼3:授予稀疏列上的SELECT和UPDATE權限給User1并執行代碼1。
-- Grant select permission to all sparse columns
GRANT SELECT, UPDATE (Gender, Telephone, MonthlyIncome, Comments) ON OBJECT::dbo.Customers TO User1
-- Execute the code 1
-- select statement 1 - will success
-- select statement 2 - will success
-- update statement 3 - will success
-- update statement 4 - will fail
-- Remove SELECT, and UPDATE permissions from User1
REVOKE SELECT, UPDATE (Id, Gender, Telephone, MonthlyIncome, Comments) ON OBJECT::dbo.Customers TO User1
現在讓我們授予對列集的SELECT權限,并嘗試訪問稀疏列。
代碼4授予列集上的SELECT權限給User1并執行代碼1。
-- Grant select permission to the column set
GRANT SELECT (AllSparseColumns) ON OBJECT::dbo.Customers TO User1
-- Execute the code 1
-- select statement 1 - will fail
-- select statement 2 - will success
-- update statement 3 - will fail
-- update statement 4 - will fail
-- Remove SELECT permission from User1
REVOKE SELECT (AllSparseColumnss) ON OBJECT::dbo.Customers TO User1
就像代碼3中的代碼一樣,如果我們授予對列集的SELECT和UPDATE權限給User1,那么SELECT語句2將會成功。此外,User1將可以對列集執行UPDATE語句,但不能對稀疏列執行UPDATE語句。看下面的代碼5。
代碼5:授予對列集的SELECT和UPDATE權限給User1并執行代碼1。
-- Grant select and update permissions to the column set
GRANT SELECT, UPDATE (AllSparseColumns) ON OBJECT::dbo.Customers TO User1
-- Execute the code 1
-- select statement 1 - will success
-- select statement 2 - will success
-- update statement 3 - will fail
-- update statement 4 - will success
-- Remove SELECT and UPDATE permission from User1
REVOKE SELECT, UPDATE (AllSparseColumnss) ON OBJECT::dbo.Customers TO User1
現在讓我們測試DENY權限是怎樣傳播的。讓我們授予對稀疏列的SELECT權限并拒絕對列集SELECT的權限。正如你所預料的,User1將可以訪問所有的稀疏列,但不能訪問列集。拒絕對列集SELECT的權限不會影響稀疏列。
代碼6:授予對稀疏列SELECT的權限并拒絕列集的SELECT權限給User1并執行代碼1。
-- Grant SELECT permission on sparse columns
GRANT SELECT (Id, Gender, Telephone, MonthlyIncome, Comments) ON OBJECT::dbo.Customers TO User1
-- Deny SELECT permission on the column set
DENY SELECT (AllSparseColumns) ON OBJECT::dbo.Customers TO User1
-- Execute the code 1
-- select statement 1 - will success
-- select statement 2 - will fail
-- update statement 3 - will fail
-- update statement 4 - will fail
REVOKE ALL ON OBJECT::dbo.Customers TO User1
GO
但是當對稀疏列SELECT的權限被拒絕時,它會傳播到列集。看代碼7。User1將不能訪問到列集,即使我們授予了列集上的SELECT權限。
代碼7拒絕對稀疏列SELECT的權限并授予對列集SELECT的權限給User1并執行代碼1。
-- Deny SELECT permission on sparse columns
DENY SELECT (Id, Gender, Telephone, MonthlyIncome, Comments) ON OBJECT::dbo.Customers TO User1
-- Grant SELECT permission on the column set
GRANT SELECT (AllSparseColumns) ON OBJECT::dbo.Customers TO User1
-- Execute the code 1
-- select statement 1 - will fail
-- select statement 2 - will fail
-- update statement 3 - will fail
-- update statement 4 - will fail
REVOKE ALL ON OBJECT::dbo.Customers TO User1
GO
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com