我有兩個Microsoft SQL Server 2000數據庫,一個存儲過程試圖從另一個數據庫讀取數據。這用於正常工作,但由於我變得注重安全性並將登錄(SQL用戶)從「db owner」更改爲「denydatareader」,調用失敗。爲什麼存儲過程無法從另一個數據庫讀取表(我必須錯誤地使用GRANT和DENY)
如果我使用「datareader」組,可以使事情正常工作,但由於我不希望此登錄對用戶表具有讀訪問權限(ASP僅使用特效),所以我認爲這是不明智的。如果我將用戶從所有組中取出,它也可以工作!這個可以嗎?
一個數據庫被稱爲'內部',並有一個名爲'東西'的表。 另一個名爲'WebFacing',並有一個名爲'Get_Some_Data'的存儲過程,它從'Internal..Stuff'中進行選擇。
我的內部數據庫上運行此命令:
GRANT SELECT ON Stuff TO magnus
我跑這一個面向捲筒紙數據庫:
GRANT EXECUTE ON Get_Some_Data TO magnus
我的ASP使用的SQL登錄「馬格努斯」,並連接到' WebFacing'數據庫。 當它試圖Exec中的程序,它用錯誤:
SELECT permission denied on object 'Stuff', database 'Internal', owner 'dbo'.
(道歉,如果這是一個愚蠢的問題,但我已經在深水的一端被推倒,只有瞭解了授予和拒絕昨天。我嘗試過使用谷歌搜索...)
我想我是問我的登錄/用戶應該在一個組中,還是可以成爲「公共」的成員? – 2009-02-06 15:00:28
您的數據庫是否在SQL Server的同一實例上運行,或者它們在不同的實例/服務器上運行? – Eppz 2009-02-06 19:05:26
相同的服務器,相同的實例 – 2009-02-10 11:15:47