ASP.NET 应用程序数据库中存储会话状态



有一个选项可用于配置应用程序以将会话信息存储到SQL Server ASP.NET: https://learn.microsoft.com/en-us/previous-versions/ms178586(v=vs.140(

但是,它需要使用一些脚本创建一个新数据库(ASPState(

我想知道是否有使用应用程序数据库本身提供会话存储的选项,或者是否有任何硬编码要求数据库名称应为ASPState,唯一的选择是创建另一个数据库。

我首先要提到,在同一个数据库中混合使用aspstate和用户对象不是一个好主意。aspstate 数据的使用量非常大,可能需要大量的 SQL Server 事务日志空间来处理永远不需要恢复的临时数据。最好在会话状态的SIMPLE恢复模式中使用专用数据库,而不是混合具有不同恢复要求的数据。

aspstate 数据库的名称是可配置的。指定自定义数据库的 Aspnet_regsql-sstype c参数和带有-d的数据库名称。例如:

C:WindowsMicrosoft.NETFrameworkv4.0.30319Aspnet_regsql.exe" -ssadd -sstype c -d YourUserDatabase -S YourSqlInstance -E

下面是一个 aspstate 连接字符串示例,给出了上面的 Windows 身份验证示例。这可以与普通用户数据库连接字符串相同,但在这里我添加了一个显式应用程序名称来唯一化连接字符串,以便会话状态使用单独的连接池。

Data Source=YourSqlInstance;Initial Catalog=YourUserDatabase;Integrated Security=SSPI;Application Name=aspstate

您还需要授予对会话状态使用的存储过程的权限,除非您使用特权帐户(这是一种不好的做法(。下面是通过角色成员身份执行此操作的脚本:

USE YourUserDatabase;
GO
CREATE Role APSStateRole;
ALTER  ROLE APSStateRole
ADD MEMBER [YourUserAccount]; --assuming user already exists
GRANT EXECUTE ON dbo.TempReleaseStateItemExclusive TO ASPStateRole;
GRANT EXECUTE ON dbo.TempInsertUninitializedItem TO ASPStateRole;
GRANT EXECUTE ON dbo.TempInsertStateItemShort TO ASPStateRole;
GRANT EXECUTE ON dbo.TempInsertStateItemLong TO ASPStateRole;
GRANT EXECUTE ON dbo.TempUpdateStateItemShort TO ASPStateRole;
GRANT EXECUTE ON dbo.TempUpdateStateItemShortNullLong TO ASPStateRole;
GRANT EXECUTE ON dbo.TempUpdateStateItemLong TO ASPStateRole;
GRANT EXECUTE ON dbo.TempUpdateStateItemLongNullShort TO ASPStateRole;
GRANT EXECUTE ON dbo.TempRemoveStateItem TO ASPStateRole;
GRANT EXECUTE ON dbo.TempResetTimeout TO ASPStateRole;
GRANT EXECUTE ON dbo.GetMajorVersion TO ASPStateRole;
GRANT EXECUTE ON dbo.TempGetVersion TO ASPStateRole;
GRANT EXECUTE ON dbo.GetHashCode TO ASPStateRole;
GRANT EXECUTE ON dbo.TempGetAppID TO ASPStateRole;
GRANT EXECUTE ON dbo.TempGetStateItem TO ASPStateRole;
GRANT EXECUTE ON dbo.TempGetStateItem2 TO ASPStateRole;
GRANT EXECUTE ON dbo.TempGetStateItem3 TO ASPStateRole;
GRANT EXECUTE ON dbo.TempGetStateItemExclusive TO ASPStateRole;
GRANT EXECUTE ON dbo.TempGetStateItemExclusive2 TO ASPStateRole;
GRANT EXECUTE ON dbo.TempGetStateItemExclusive3 TO ASPStateRole;
GO

相关内容

  • 没有找到相关文章

最新更新