用户是否应是架构所有者,以便读取、写入和执行 SP



我的 Web 应用需要在具有五个架构的 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)'.

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

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

不,应用用户不需要是架构所有者即可读取、写入和执行过程。

你可以这样说:

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

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

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