我有两个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