表上的 INSERT 被拒絕。但登錄有權限
我正在執行從數據庫 X 到數據庫 Y 的過程。
在數據庫 Y 上應該有來自使用者的插入。
在這張圖片中,第一列是登錄名,第二列是擁有所有必要權限的角色(它在我們需要的表上有 INSERT)。
登錄名已正確分配給角色,並且該角色具有所有必要的權限。
但是當我執行該過程時,我收到了那些著名的錯誤:
Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 165 [Batch Start Line 2] The INSERT permission was denied on the object 'XXXXXXXXXXX', database 'DB', schema 'dbo'. Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 484 [Batch Start Line 2] The INSERT permission was denied on the object 'YYYYYYYYYYYYYY', database 'DB', schema 'dbo'. Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 527 [Batch Start Line 2] The INSERT permission was denied on the object 'YYYYYYYYYYYYYY', database 'DB', schema 'dbo'. Msg 229, Level 14, State 5, Procedure PROCEDURENAME, Line 570 [Batch Start Line 2] The INSERT permission was denied on the object 'YYYYYYYYYYYYYY', database 'DB', schema 'dbo'.
我創建了另一個測試登錄,提供了完全相同的權限並且它工作。
如何找到阻止此登錄的插入的內容?我什至跑了一個跟踪,看看我是否能找到更多的錯誤,在 eventviewer 上也沒有。
登錄沒有明確的權限。它只是具有權限的角色的成員身份。
角色權限正確:
編輯:
自從重新創建 Windows 登錄並重做所有權限以來,我嘗試了一切。我注意到的是:
我可以創建一個登錄名(使用密碼的 sql 登錄名)並且它有效。
我嘗試使用原始 Windows 登錄名在表中插入數據,但失敗了,然後我將其從 ROLE 中刪除並授予它 INSERT 權限,但它仍然失敗。即使對數據庫具有插入權限,它也無法插入數據。
如果問題出在 Windows 登錄,使用 SQL Server 登錄進行測試將無濟於事。這是因為 Windows 登錄能夠通過多個來源(本身和/或一個或多個 Windows 組)進行身份驗證。
Windows 登錄如何進行身份驗證?
- 直接(即登錄有一個條目
sys.sys.server_principals
),- 通過一個或多個 Windows / AD 組(登錄在 中沒有條目
sys.server_principals
,但是一個或多個在 中有條目的組的成員sys.server_principals
),- 或兩者?
對於 Windows 登錄,將查看所有可能的身份驗證方式中的所有
GRANT
s 和s。DENY
即使在 SQL Server 中為此 Windows 登錄創建了顯式登錄,也不會取消或優先於與它們所屬的任何 Windows 組關聯的任何權限,這些權限也被列為登錄。可能是一個或多個 Windows / AD 組中的成員具有某種DENY
或其他限制,並且這些限制優先於GRANT
s。NET USER {login}
通過命令提示符列出組。OP 回复:
使用
EXEC xp_logininfo 'DOMAIN\LOGIN','all';
我可以找到Permission path
指向一個帶有 DENY 的組。!!!這並不能消除問題,但它確實確定了問題的原因,因此現在有望得到解決。
一種可能的解決方案是使用模組簽名(連結到我的資訊站點),儘管我必須進行測試以查看它如何處理
DENY
優先級的 a 。無論哪種方式,您都不需要弄亂角色和對對象的直接權限,因此即使遇到由DENY
.