SQL Server - 用于应用程序访问的角色是什么?

时间:2012-04-09 18:52:53

标签: sql-server sql-server-2008-r2

SQL登录必须执行以下服务器角色和/或数据库角色:

  1. 读取数据(包括临时表)
  2. 写入数据(包括临时表)
  3. 执行授予访问权限的数据库中的任何SP
  4. 我们正在从SQL 2000迁移到2008年,我正在浏览所有登录,并注意到它们都已设置为sysadmin& db_owner,这不好。我们使用这些登录的应用程序只会执行我上面列出的内容,这就是我想知道的原因。我知道我可以使用db_datareader&的数据库角色设置每个登录。 db_datawriter但不包括执行SP的。我们在2或者我们的数据库中接近300 SP,并且必须通过每个SP并在扩展属性中设置登录权限将是太长且乏味。

    非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

  

必须通过每个SP并在扩展属性中设置登录权限将是太长而乏味

然而,这也是最安全的。

使用内置角色会将过多的数据库暴露给您的应用程序。

答案 1 :(得分:1)

您可以授予db_datareader和/或db_datawriter执行权吗?这将赋予用户在其有权访问的数据库中执行任何存储过程的权限。如果您有意见,您还需要授予他们选择权限。

GRANT EXECUTE TO db_datawriter

答案 2 :(得分:0)

我要么只是处理它并手动设置权限或(我的偏好)创建具有您想要提供的权限类型的数据库角色,并为这些设置分配登录。这样,如果多个登录需要相同的权限集,您只需给它们相同的角色。

作为奖励,如果您的可编程性对象具有某种前缀命名约定,以便(例如)从您的登录信息表读取的过程都以pAccount_或类似的东西开头,那么您可以动态地执行{{1}基于例程前缀的角色。