【问题标题】:SQL Server - What role to use for application access?SQL Server - 用于应用程序访问的角色是什么?
【发布时间】:2012-04-09 18:52:52
【问题描述】:

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

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

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

非常感谢任何帮助!

【问题讨论】:

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


    【解决方案1】:

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

    然而,这也是最安全的。

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

    【讨论】:

    • 是的,最安全,但您如何管理所有与登录有关的 SP 和权限?我们这里没有数据库管理员,只有我(另一个最近离开的人)......
    【解决方案2】:

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

    GRANT EXECUTE TO db_datawriter
    

    【讨论】:

    • 我想那时就不需要“Alter”了,因为这些应用程序没有“改变”任何表......这包括删除临时表吗?
    【解决方案3】:

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

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

    【讨论】:

    • 我选择了这条路线,因为它为我目前的情况提供了最大的灵活性。感谢您的信息!
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 2020-02-17
    • 2011-03-11
    • 2010-09-29
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多