有一个用于配置ASP.NET应用程序以将会话信息存储到SQL Server的选项:https : //docs.microsoft.com/zh-cn/previous-versions/ms178586(v=vs.140)
但是,它需要使用一些脚本创建一个新的数据库(ASPState)
我想知道是否存在使用应用程序数据库本身提供会话存储的选项,或者是否存在任何硬编码的要求,即数据库名称应为ASPState,唯一的选择是创建另一个数据库。
首先,我将在同一数据库中混合aspstate和user对象不是一个好主意。aspstate数据被大量使用,并且可能需要大量的SQL Server事务日志空间来存储永远不需要恢复的临时数据。最好在SIMPLE
恢复模型中为会话状态使用专用数据库,而不是将具有不同恢复要求的数据混合在一起。
aspstate数据库的名称是可配置的。-sstype c
为自定义数据库指定Aspnet_regsql参数,并使用来指定数据库名称-d
。例如:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Aspnet_regsql.exe" -ssadd -sstype c -d YourUserDatabase -S YourSqlInstance -E
下面是上述Windows身份验证示例给出的aspstate连接字符串示例。这可以与您的普通用户数据库连接字符串相同,但是在这里我添加了一个显式应用程序名称来唯一化连接字符串,以便会话状态使用单独的连接池。
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句