Sql server SQL Server应用程序角色与常规登录和用户

Sql server SQL Server应用程序角色与常规登录和用户,sql-server,security,application-role,Sql Server,Security,Application Role,使用SQL Server应用程序角色管理权限与使用标准登录/用户并向所述用户授予必要的权限相比有什么优势 我们一直在使用需要以下场景的应用程序角色: 使用SQL Server登录名和密码连接到SQL Server 通过将角色名称和另一个密码传递给sp_setapprole来激活应用程序角色 我不认为这比仅仅将应用程序角色的权限授予登录/用户更好或更安全。这两个密码都必须对应用程序可用,任何获得登录密码访问权限的人都可能获得对应用程序角色密码的访问权限,并从自己的程序或SSMS中调用sp_seta

使用SQL Server应用程序角色管理权限与使用标准登录/用户并向所述用户授予必要的权限相比有什么优势

我们一直在使用需要以下场景的应用程序角色:

  • 使用SQL Server登录名和密码连接到SQL Server
  • 通过将角色名称和另一个密码传递给sp_setapprole来激活应用程序角色
  • 我不认为这比仅仅将应用程序角色的权限授予登录/用户更好或更安全。这两个密码都必须对应用程序可用,任何获得登录密码访问权限的人都可能获得对应用程序角色密码的访问权限,并从自己的程序或SSMS中调用sp_setapprole。对吧?


    编辑:Ed Harper推测,在我的场景中,应用程序的所有实例都使用相同的登录名。

    我从未使用过应用程序角色(
    创建应用程序角色
    )<我真的看不出它们有什么意义

    我使用了数据库角色,并添加了用户作为成员

    CREATE ROLE WebUsers AUTHORIZATION dbo;
    ALTER ROLE WebUsers ADD MEMBER Tom;
    ALTER ROLE WebUsers ADD MEMBER Dick;
    ALTER ROLE WebUsers ADD MEMBER Harry;
    
    CREATE ROLE WebAdmins AUTHORIZATION dbo;
    ALTER ROLE WebAdmins ADD MEMBER Tom;
    
    角色拥有权限,而不是用户

    GRANT EXEC TO WebAdmins;
    
    GRANT EXEC On SCHEMA::WebCode TO WebAdmins;
    

    您的描述并不完全清楚,但听起来您可能正在使用在应用程序级别分配的SQL登录-即应用程序的所有实例(假设有多个实例)使用相同的登录/密码。在这种情况下,使用应用程序角色增加的价值微乎其微


    据我所知,应用程序角色旨在用于每个用户在SQL Server中都有自己的登录名的情况(可能是在通过AD身份验证授予对数据库的访问权限的情况下),但您不希望授予用户与其使用的应用程序相同的权限;这假定应用程序以AD用户的身份连接到数据库,然后使用
    sp_setapprole
    提升其权限。我从未在生产系统中使用过这种方法。

    使用常规登录,您的凭证和密码可能会在网络上传递。而如果密码也保存在数据库中,则可以在数据库中完成应用程序角色切换。

    是,应用程序的所有实例都使用相同的登录名/密码。