AD域组的最小SQLlogin权限

我创build了一个在后台使用SQL Server 2008 R2数据库的Web应用程序。 应用程序使用集成的安全SSPI连接到数据库,因此用户需要授予数据库服务器访问权

应该使用该应用程序的所有用户都是特定AD域组的成员。

这就是我所做的

  1. 我已经在SQL Server级别上添加了一个新的安全login,并提供了AD域组名称(基于图标显示)

    服务器登录为组

  2. 然后我打开了这个服务器login属性对话框,并打开了用户映射设置,在这里我检查了我希望这个AD域用户组访问的特定数据库(见下图)

  3. 在下面的列表中显示数据库angular色成员资格 ,其中公共被选中。

  4. 我创build了我的数据库中的所有对象作为一个单独的SQL Server用户具有securityadmin权限,并提供模式dbo与每个对象如下:

    create table dbo.SomeTable ... create procedure dbo.SomeProcedure ... 
  5. 所有数据库操作只能通过存储过程完成。 应用程序不能直接访问表格。

基于这些事实(dbo模式与我的对象,AD域组安全login,只有存储过程执行)我想知道哪些angular色成员资格应设置AD域组服务器login使用我的数据库。

用户应具有执行存储过程的权限。 另一方面,这些做其他事情。 在表上执行CRUD操作,执行用户定义的函数并相互调用。

设置db_datareaderdb_datawriter (如下所示)是不够的,我的用户得到的错误屏幕暗示(存储过程应该不存在)?

如何在我的AD域组上设置安全权限,以便能够查看dbo对象并执行这些存储过程?

用户的数据库成员资格

应用db_datareader和db_datawriter是不够的,因为它们都不被授予存储过程执行权。 您应该为您的数据库中的每个存储过程授予执行权限,或者…相当单调乏味。

如果你的数据库是SQL Server 2005或更高版本(我的是SQL Server 2008 R2,所以我已经介绍了),你可以用更less的努力来做到这一点:

  1. 创build一个名为db_executor的新数据库angular色

     create role db_executor 
  2. 授予数据库中所有存储过程的存储过程执行权限

     grant execute to db_executor 

如果你只想给模式特定的存储过程授予执行权限,那么最后一次调用应该作为(调整模式名称 – dbo – 根据需要)执行:

 grant execute on schema::dbo to db_executor 

就是这样。 然后,你所要做的就是把你的用户(或在我的情况下是一个组)成为这个angular色的成员,事情按预期工作。