2008-12-15 156 views
0

我有一個SQL Server 2005數據庫,我試圖使用Windows身份驗證作爲有限的用戶帳戶訪問。我已經將BUILTIN \ Users添加爲數據庫用戶(在我這樣做之前,我甚至無法打開數據庫)。我正在假設每個人都應該擁有適用於他們的「公共」角色的權限,所以我沒有對角色分配做任何事情。在tblFoo下,我可以使用SSMS Properties對話框(Permissions頁面)添加「public」,然後設置顯式權限。其中有SELECT的「Grant」。但運行SQL Server 2005「公共」數據庫角色似乎不適用?

SELECT * from tblFoo; 

爲有限(BUILTIN \用戶)帳戶給我一個錯誤「的對象tblFoo'數據庫‘酒吧’,架構‘DBO’拒絕選擇權限」。在屬性對話框中,有一個「有效權限」按鈕,但它是灰色的。

此外,我嘗試創建一個名爲「UserTest」的非專用帳戶,在服務器級別添加,然後將其映射到「 bar「數據庫,這讓我可以將UserTest添加到」Users or Roles「列表中,該列表允許我爲該帳戶運行」Effective Permissions「,根本沒有列出任何權限 - 這看起來不正確。公共和公共津貼(除其他外)在tblFoo上選擇,爲什麼UserTest帳戶不顯示有效的權限?我覺得我在這裏有點瘋狂。人們不喜歡使用「公共」角色來設置權限,這只是我的修補時間;在最終設計中,我確信我們會擁有幾個靈活的(自定義)數據庫角色。我只是想弄清楚我看到的行爲,所以請不要「不要那樣做!」答案。

更新:顯然我知道剛剛夠SQL Server對自己和其他人是危險的。在設置權限時(正如我所說的,「等等」),我擁有了DENY CONTROL。當我設置這個權限時,我想我試圖查看它做了什麼,有一個模糊的想法,並決定使用DENY。我目前不記得爲什麼這似乎是要做的事情,但似乎這是我獲得許可失敗的原因。所以我更新了我的問題:任何人都可以解釋「CONTROL」權限,因爲它與表相關?

回答

1

您只需要有SELECT權限。在原始SQL中(請參閱對話框中的「腳本」圖標/按鈕),它是GRANT SELECT ON dbo.tblFoo to public。這是查看數據所需的唯一權限,在這種情況下,錯誤消息明確提到「拒絕」。 「拒絕」本身就是一種權利,所以提到它,

如果你沒有任何權利,你會得到的消息(非常近似)「tblFoo不存在,或者您沒有權限」

「DENY CONTROL」被提及here。在這種情況下,您拒絕全部權利的公共角色。

受讓人有效地對安全對象

+0

確定所有 定義的權限,所以僅僅是明確的: *如果我授權控制,他們可以與表 *如果我否認做任何事控制,他們被禁止與表 *因此,如果我想選擇性地授予或拒絕其他權限(更新,插入等),我應該REVOKE控制 是嗎? – Coderer 2008-12-16 17:39:48

0

假設「UserTest」是域用戶帳戶,連接爲sysadmin角色的成員和運行

EXEC MASTER.dbo.xp_logininfo 'Domain\UserTest', 'all' 

這將顯示Windows(對於「域」替換爲您的域名)組等等,賬戶正在繼承安全權限和訪問級別,例如您會期望看到類似的內容:

account name  type privilege mapped login name  permission path 
domain\usertest user user    domain\usertest BUILTIN\Users 

這將有助於解決帳戶從哪裏繼承權限的問題。哪些Windows組是對數據庫有權限的組成部分。如果這一切都看起來不錯,那麼我會遵循你自己的建議,而不是惹惱公衆角色。

  • 在 數據庫中該 角色創建一個數據庫角色
  • 分配明確權限
  • 爲用戶 帳戶
  • 打開服務器登錄創建服務器登錄,進入 用戶映射部分,點擊 數據庫並選擇數據庫 您創建的角色