0

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

我创建了一个通过 SQL 进行身份验证的用户,并通过 Security -> Logins -> (Username) Properties -> User Mappings 授予用户 db_datareader、db_datawriter 和 db_procedureexec。然后我将应用程序配置为使用用户名和正确的密码连接到数据库,但在尝试执行存储过程时,出现此错误:

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

在数据库的安全部分找到这个用户,我将其设为数据库中五个模式的所有者。

我是否授予了太多特权?应用程序级用户是否应该成为模式所有者才能读取、写入和执行过程?

4

2 回答 2

2

不,应用程序用户不需要是模式所有者才能读取、写入和执行过程。

你可以这样说:

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

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

于 2012-06-13T21:53:44.823 回答
0

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

于 2012-06-13T21:59:51.250 回答