使用 EXECUTE AS 进行安全性时 SQL Server 的加速策略
Posted
技术标签:
【中文标题】使用 EXECUTE AS 进行安全性时 SQL Server 的加速策略【英文标题】:Speed up strategy for SQL Server when EXECUTE AS is used for security 【发布时间】:2011-07-07 06:19:45 【问题描述】:我刚刚开始研究一个实现安全性的系统与标准略有不同。
他们为系统的每个用户创建一个新的 SQL 用户(现在大约有 32K)。每个查询都是通过最初使用 SA 帐户的连接发送的(不要陷入困境),然后在我们知道用户是谁之后,每个查询都使用 EXECUTE AS USER。
现在有这么多用户,创建新用户和切换用户对性能有明显影响,公司正在考虑改善这种情况。
几点: - SQL 代码是动态 sql(不是存储过程) - 最初的想法是为了减轻公司的开发人员担心编写 SQL 担心权限的需要 - 并让另一层担心。
如何尝试改进查询执行时间,避免 EXECUTE AS USER 代码,同时仍然获得相同的安全审查?
SQL Server 是否支持会话变量来存储用户帐户?
【问题讨论】:
EXECUTE AS
用于每个查询?只要连接/会话保持打开状态,EXECUTE AS
就会一直有效。您可以存储在“会话变量”中的任何内容的生命周期都将短于或等于 EXECUTE AS
的有效期限。
【参考方案1】:
如果不详细了解您的应用程序安全模型如何以及它如何控制和/或池化数据库连接,就很难知道这是否有用。是胖客户端、n 层还是其他?
SQL 连接可以使用 CONTEXT_INFO
支持单个“会话变量” - 一个用户可配置的二进制 (128) 字段,在连接期间持续存在。这可能满足您的要求,但您需要注意,如果您使用它来存储安全信息,最终用户将可以访问它 - 因此您可能应该加密或加盐并散列 CONTEXT_INFO
中的任何安全信息以防止用户篡改获得他们的许可;这可能会对性能产生影响。
根据您的应用程序架构,它可能不适用,但您是否考虑过切换到 Windows 授权并通过 Active Directory 用户和组来组织权限?
【讨论】:
以上是关于使用 EXECUTE AS 进行安全性时 SQL Server 的加速策略的主要内容,如果未能解决你的问题,请参考以下文章
使用 .NET SqlCommand 运行带有 EXECUTE AS 语句的 t-sql 存储过程
Security5:Execute AS 和 impersonate 权限