SQL Server 2008稀疏列說明示例

iSQlServer發表於2008-12-17

對列集實施安全
  對列集實施安全就像對其它欄位實施安全一樣,但是稀疏列的許可權可能會影響從列集獲取資料。讓我們做些測試。
  首先,讓我們授予對所有稀疏列的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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-513656/,如需轉載,請註明出處,否則將追究法律責任。

相關文章