如果由 db_datareader 角色访问,写入记录的 SP 会失败吗?

El *_*oco 6 sql-server-2005 stored-procedures permissions role

我有一个存储过程,它由在某种 Java/WebSphere 类型平台上运行的应用程序远程访问。它需要一个参数,返回一些数据,就是这样。

最近有人谈论它可能运行缓慢 - 我非常有信心 SP 没有理由运行缓慢。但是我向数据库添加了一个日志表,并让 SP 在进入时写入它,并在SELECT完成后再次写入,这样我就可以看到调用需要多长时间。

此更改适用于我的 Windows 身份验证登录 - 当我使用远程应用程序正在使用的应用程序登录时,它也适用。但是,我是从 .Net 环境而不是从 Java 进行连接。

当我更改 SP 以进行日志记录时,我注意到我INSERT输入到日志表中的 ID正在跳跃 - 表明发生了失败的插入 - 大概是由远程应用程序引起的(因为这是唯一使用的这个SP)。

应用程序登录只有db_datareader分配给它的角色。我已经GRANTEXEC到应用程序日志上,当然。

是不是INSERT因为访问的登录只有一个,SP就不能连续db_datareader如果是这样,INSERT当我使用相同的登录时,SP 怎么办?

gbn*_*gbn 5

如果同一用户同时拥有表和存储过程(通常是 dbo),则不会检查权限。这被称为“所有权链接”。

所以你可以在桌子上有一个拒绝,它不会被检查。db_datareader 没有区别:它没有被检查。

如果所有者不同(请注意,重要的是架构的所有者),则将需要权限。请参阅上面的 MSDN 示例。

无论如何,您需要通过 TRY/CATCH 或通过 SQL Profiler 捕获错误以确保