用户是否应该是架构所有者才能读取,写入和执行SP?

时间:2012-06-13 21:48:53

标签: asp.net sql-server-2008 privileges database-security

我的webapp需要读取,写入(INSERT,UPDATE,DELETE),并在具有五个模式的SQL 2008数据库上执行存储过程。

我创建了一个通过SQL进行身份验证的用户,并通过安全性授予用户db_datareader,db_datawriter和db_procedureexec - >登录 - > (用户名)属性 - >用户映射。然后我使用用户名和正确的密码配置应用程序连接到数据库,但在尝试执行存储过程时,出现此错误:

The EXECUTE permission was denied on the object '(stored procedure name)', database '(new database)', schema '(schema 1)'.

在数据库的Security部分中查找此用户,我将其作为DB中五个模式的所有者。

我是否授予了太多特权?应用程序级用户是否应该是架构所有者才能读取,编写和执行过程?

2 个答案:

答案 0 :(得分:2)

不,应用程序用户不需要是架构所有者,以便读取,编写和执行程序。

您可以这样说:

GRANT EXEC ON SCHEMA::whatever TO [user];

这将允许他们在[whatever]模式中执行过程。为了不要求传递权限(例如说您的程序执行动态SQL),您可以考虑将它们设置为EXECUTE AS OWNER

答案 1 :(得分:0)

您不希望授予应用程序用户对数据库的所有权。这基本上给了他们购物车的全权。您应该做的是向用户授予db_datareaderdb_datawriter角色,并对所有适用的存储过程和函数授予执行权。