我创build了一个在后台使用SQL Server 2008 R2数据库的Web应用程序。 应用程序使用集成的安全SSPI连接到数据库,因此用户需要授予数据库服务器访问权
应该使用该应用程序的所有用户都是特定AD域组的成员。
我已经在SQL Server级别上添加了一个新的安全login,并提供了AD域组名称(基于图标显示)
然后我打开了这个服务器login属性对话框,并打开了用户映射设置,在这里我检查了我希望这个AD域用户组访问的特定数据库(见下图)
在下面的列表中显示数据库angular色成员资格 ,其中公共被选中。
我创build了我的数据库中的所有对象作为一个单独的SQL Server用户具有securityadmin权限,并提供模式dbo与每个对象如下:
create table dbo.SomeTable ... create procedure dbo.SomeProcedure ...
所有数据库操作只能通过存储过程完成。 应用程序不能直接访问表格。
基于这些事实(dbo模式与我的对象,AD域组安全login,只有存储过程执行)我想知道哪些angular色成员资格应设置AD域组服务器login使用我的数据库。
用户应具有执行存储过程的权限。 另一方面,这些做其他事情。 在表上执行CRUD操作,执行用户定义的函数并相互调用。
设置db_datareader和db_datawriter (如下所示)是不够的,我的用户得到的错误屏幕暗示(存储过程应该不存在)?
如何在我的AD域组上设置安全权限,以便能够查看dbo
对象并执行这些存储过程?
应用db_datareader和db_datawriter是不够的,因为它们都不被授予存储过程执行权。 您应该为您的数据库中的每个存储过程授予执行权限,或者…相当单调乏味。
如果你的数据库是SQL Server 2005或更高版本(我的是SQL Server 2008 R2,所以我已经介绍了),你可以用更less的努力来做到这一点:
创build一个名为db_executor的新数据库angular色
create role db_executor
授予数据库中所有存储过程的存储过程执行权限
grant execute to db_executor
如果你只想给模式特定的存储过程授予执行权限,那么最后一次调用应该作为(调整模式名称 – dbo – 根据需要)执行:
grant execute on schema::dbo to db_executor
就是这样。 然后,你所要做的就是把你的用户(或在我的情况下是一个组)成为这个angular色的成员,事情按预期工作。