2011-10-06 19 views
0

我一直在使用下面的SQL來創建一個用戶,登錄和數據庫。作爲db_owner和GRANT ALL有什麼區別?

USE master; 
GO 
CREATE DATABASE TEST; 
GO 
USE TEST; 
GO 
CREATE LOGIN TEST_USER WITH PASSWORD = 'password'; 
EXEC sp_defaultdb @loginame='TEST_USER', @defdb='TEST' 
CREATE USER TEST_USER FOR LOGIN TEST_USER WITH DEFAULT_SCHEMA = DBO; 
EXEC sp_addrolemember 'db_owner','TEST_USER' 
GO 
GRANT ALL TO TEST_USER; 
GRANT ALTER ON SCHEMA::dbo TO TEST_USER 
GO 

當記者問,我發現自己暫時無法解釋讓我的用戶數據庫的所有者(以創建/修改/刪除表等)的區別:

EXEC sp_addrolemember 'db_owner','TEST_USER' 

和授予所有給用戶,我認爲給予了基本相同的權限。

GRANT ALL TO TEST_USER; 

他們是否一樣?或者,我的母親總是這樣說:你可以帶馬去喝水,但這不會讓他成爲DBA嗎?

羅布

:)可保安全的

回答

4

業主不能否認的權限。但是,授予ALL的用戶仍然可以通過明確的DENY拒絕(DENY優先於所有/任何GRANT)。因此,作爲Foo組成員的用戶可以通過組成員資格授予所有權限,但是如果他也是在表X上拒絕SELECT的組Bar成員,那麼用戶將被拒絕從該表中選擇。如果用戶將是表X的所有者,那麼DENY不會影響他。這適用於任何級別的任何對象,包括數據庫所有權和dbo。

這是授予ALL和所有權的區別,但請注意,固定角色db_owners的成員資格與dbo不同。具體來說,羣組並不是自己的安全性,用戶確實(或者至少應該如何......但我離題了)。

+0

謝謝你 - 這是一個非常清晰的解釋Remus。作爲一個所有者給予權利的權利是不可侵犯的權利,在這種權利可以被拒絕。這也解釋了爲什麼我之前讀過,它是一個安全的產權系統的用戶,你希望能夠控制他們可以/不能做的事情。 –

+0

出於某種原因,我無法點擊此帖子上的勾號。我稍後再嘗試 - 這是我的感激之情。 :) –

2

除了擁有者免疫DENY,在SQL Server GRANT ALL is deprecated, and it doesn't grant all possible permissions。 (DENY ALLREVOKE ALL也棄用。)

此選項已被棄用,僅保持向後兼容性 。它不授予所有可能的權限。授予 ALL等同於授予以下權限。

  • 如果安全對象是一個數據庫,ALL裝置BACKUP數據庫,備份LOG, CREATE數據庫,創建DEFAULT,CREATE FUNCTION,CREATE PROCEDURE, CREATE RULE,CREATE TABLE和CREATE VIEW。

  • 如果安全是一個標量函數,則ALL意味着EXECUTE和 REFERENCES。

  • 如果安全是一個表值函數,那麼ALL意味着DELETE,INSERT,SELECT REFERENCE,SELECT和UPDATE。

  • 如果安全是一個存儲過程,ALL意味着EXECUTE。

  • 如果安全是一個表,則表示刪除,插入,引用, SELECT和UPDATE。

  • 如果安全是一個視圖,所有意味着刪除,插入,引用, SELECT和UPDATE。

,您可以GRANT ALL也沒有使用WITH GRANT OPTION

+0

謝謝Catcall - 我意識到這一點; MS服務器每次使用時都會一直提醒我。 :) –