1

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

  1. 读取数据(包括临时表)
  2. 写入数据(包括临时表)
  3. 在他们被授予访问权限的数据库中执行任何 SP

我们正在从 SQL 2000 迁移到 2008,我正在检查所有登录,并注意到它们都设置为 sysadmin 和 db_owner,这并不好。我们使用这些登录名的应用程序只会执行我上面列出的操作,这就是我想知道的原因。我知道我可以使用 db_datareader 和 db_datawriter 的数据库角色设置每个登录名,但这不包括执行 SP。我们在 2 或我们的数据库中有接近 300 个 SP,并且必须通过每个 SP 并在扩展属性中设置登录权限会太长太乏味。

任何帮助是极大的赞赏!

4

3 回答 3

1

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

然而,这也是最安全的。

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

于 2012-04-09T18:55:07.030 回答
1

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

GRANT EXECUTE TO db_datawriter
于 2012-04-09T19:07:14.260 回答
0

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

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

于 2012-04-09T19:18:18.730 回答