需要数据库A上的存储过程的权限才能从数据库B上的表中进行选择

时间:2011-09-12 15:55:21

标签: security sql-server-2008

我在同一个SQL2008服务器上有两个数据库,一个数据库上的许多存储过程(称为A)需要访问另一个数据库(B)上的表。我确保A上的SQL用户有权在A上执行EXEC,但我也运行了DENY ALL ON mytablename来尝试安全性。我虽然在某处愚蠢......

在A:上运行myproc时出现此错误 Microsoft OLE DB Provider for ODBC Drivers错误'80040e09'
[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]对象'mytablename',数据库'B',架构'dbo'上的SELECT权限被拒绝。

虽然我可以GRANT SELECT访问相关表格,但这不是解决方案,是吗?!我希望任一数据库上的proc都能对表进行SELECT访问,而无需用户直接从表中进行SELECT。

数据库A具有:
表 - mytablename
用户 - myuserA(db_datareader的成员,链接到名为'bob'的登录名)

数据库B有:
Proc - myproc(从A..mytablename中选择)
用户 - myuserB(db_datareader的成员,链接到同一登录'bob')

我意识到我们真的需要一名DBA,但我们只有两名员工!

1 个答案:

答案 0 :(得分:1)

通过运行DENY ALL ON table,无论是否明确授予SELECT,都有效地拒绝权限。丹尼胜过一切。

然后,您要做的是在数据库B上创建视图,并将SELECT授予可以在数据库A上运行SP的用户。当运行DB A上的SP时,安全性将从DB A传播到DB B. / p>