我需要设置一些用户才能创建仅具有READ访问权限的存储过程。此外,在生产中,他们不能拥有SELECT,只能在他们创建的过程中执行EXECUTE。在开发过程中,他们会选择SELECT,以便他们可以创建自己的程序。
我已经设置了一个名为Reports的模式。该架构的所有者是登录--Report_Admin。该用户具有对表的选择访问权限。然后,我将报告模式的alter和execute赋予我的报告编写者帐户。 Dbo拥有该表 - 所以如果dbo也拥有报告模式,它就可以工作 - 但是删除也可以在程序中使用!
我们正在使用报告服务,并希望将数据库中的所有SQL用于可维护性。
谢谢!
答案 0 :(得分:2)
正如您已经发现的那样,您不会使用所有权链接成功。解决方案是这样的:report_writer必须使用EXECUTE AS SELF子句创建其报告,以便它们在report_writer特权下执行。然后,report_reader组将能够利用reports
模式上的EXECUTE权限来执行所述报告,并且由于execute as子句,报告将能够读取数据。
答案 1 :(得分:0)
您可以为角色和用户分配权限,无需单独的架构。所以我只使用一个模式:“dbo”(默认)
为用户创建数据库角色。在开发时将data_reader授予该角色。在开发和生产方面,授予存储过程的执行权限。据我所知,您必须为每个存储过程授予执行权。