关于模式和安全性的问题

时间:2009-10-27 20:22:58

标签: sql-server sql-server-2005 security

我需要设置一些用户才能创建仅具有READ访问权限的存储过程。此外,在生产中,他们不能拥有SELECT,只能在他们创建的过程中执行EXECUTE。在开发过程中,他们会选择SELECT,以便他们可以创建自己的程序。

我已经设置了一个名为Reports的模式。该架构的所有者是登录--Report_Admin。该用户具有对表的选择访问权限。然后,我将报告模式的alter和execute赋予我的报告编写者帐户。 Dbo拥有该表 - 所以如果dbo也拥有报告模式,它就可以工作 - 但是删除也可以在程序中使用!

我们正在使用报告服务,并希望将数据库中的所有SQL用于可维护性。

谢谢!

2 个答案:

答案 0 :(得分:2)

正如您已经发现的那样,您不会使用所有权链接成功。解决方案是这样的:report_writer必须使用EXECUTE AS SELF子句创建其报告,以便它们在report_writer特权下执行。然后,report_reader组将能够利用reports模式上的EXECUTE权限来执行所述报告,并且由于execute as子句,报告将能够读取数据。

答案 1 :(得分:0)

您可以为角色和用户分配权限,无需单独的架构。所以我只使用一个模式:“dbo”(默认)

为用户创建数据库角色。在开发时将data_reader授予该角色。在开发和生产方面,授予存储过程的执行权限。据我所知,您必须为每个存储过程授予执行权。