我有两个 Microsoft SQL Server 2000 数据库,一个存储过程尝试从另一个数据库读取数据。这曾经可以正常工作,但是由于我变得具有安全意识并将登录名(SQL 用户)从“db owner”更改为“denydatareader”,因此调用失败。
如果我使用组“datareader”,我可以让事情正常工作,但由于我不希望此登录名具有对用户表的读取权限(ASP 仅使用 procs),我认为这是不明智的。如果我将用户从所有组中取出,它也可以工作!!!这个可以吗?
一个数据库称为“内部”,并有一个名为“Stuff”的表。另一个称为“WebFacing”,并有一个名为“Get_Some_Data”的存储过程,它从“Internal..Stuff”中选择。
我在内部数据库上运行了这个命令:
GRANT SELECT ON Stuff TO magnus
我在 WebFacing 数据库上运行了这个:
GRANT EXECUTE ON Get_Some_Data TO magnus
我的 ASP 使用 SQL 登录“magnus”并连接到“WebFacing”数据库。当它尝试执行该过程时,它会出错:
SELECT permission denied on object 'Stuff', database 'Internal', owner 'dbo'.
(抱歉,如果这是一个愚蠢的问题,但我被推到了深处,昨天才了解了 GRANT 和 DENY。我试过谷歌搜索......)