【发布时间】:2010-11-10 16:34:20
【问题描述】:
我们有一个第 3 方应用程序想要使用 SQL 2005 风格的“模式”语法调用存储过程:
Customer.InsertNewOrder
不过,此数据库仍在 SQL 2000 上,因此我们试图使其“看起来”像 SQL 2005 架构,并且仍然可以正常工作(具有最低必要权限)。所以我们:
- 创建了一个名为“客户”的用户
- 创建了该用户拥有的存储过程
- 授予网络用户对存储过程的“执行”权限(通过角色)
授予我们的网络用户执行权限通常是运行 dbo 拥有的 procs 所需的全部内容(如“dbo.InsertOrder”)。我们通常不必对基础表授予显式权限。但在这种情况下它似乎不起作用。我们收到一个错误:
INSERT permission denied on object "Order"
那我做错了什么?
我怎样才能告诉 什么 用户在这里被拒绝了。是我的网络用户吗?或者它是作为 Customer 用户“执行”,而 Customer 用户需要额外的权限? (我尝试向客户用户(db_datareader 和 db_datawriter,甚至尝试 db_owner)授予额外的权限,但这似乎没有帮助。无论如何,db_owner 在生产中不是一个选项。)
我想我可以在必要的表上授予显式 INSERT 权限,但是为什么在这种情况下这是必要的,而对于 DBO 拥有的过程来说不是这种情况?
编辑:
为了这个问题,我已经简化了。实际上,我在两个不同的“模式”下有几十个存储过程,可以从许多表中插入、更新和选择。所以希望不必手动逐项列出所有权限,如果我能提供帮助的话......
【问题讨论】:
标签: sql-server stored-procedures permissions sql-server-2000