SQL Server 2017标准版无权限却锁定内存页?查询显示LOCK_PAGES但策略为空
为什么SQL Server 2017标准版显示LOCK_PAGES但本地安全策略为空?
这问题我碰到过好几次,结合你的场景(本地账户运行、标准版),主要有这几个常见原因:
权限通过组继承获得
本地安全策略里的「锁定内存页」列表是空的,但你的SQL Server服务账户可能属于某个已经被授予该权限的本地组。比如Windows Server的Administrators组默认就拥有SeLockMemoryPrivilege权限(也就是锁定内存页的系统权限)。如果你的本地账户是管理员组成员,就会自动继承这个权限,SQL Server启动时就能启用LOCK_PAGES模式,而策略列表里不会直接显示这个用户。SQL Server进程未重启,权限已被事后修改
假设之前你给这个本地账户添加过锁定内存页权限,SQL Server启动后已经加载了这个权限。之后如果从本地安全策略里移除了该账户的权限,SQL Server进程不会主动释放已获取的权限——只有重启服务后才会生效。这时候sys.dm_os_sys_info返回的还是启动时的内存模型状态,但策略里已经看不到这个账户了。使用的是本地系统账户(Local System)
如果你说的「本地账户」是系统内置的Local System账户,那它本身就默认拥有SeLockMemoryPrivilege权限,不需要在本地安全策略里显式添加。这种情况下策略列表自然是空的,但SQL Server依然能使用LOCK_PAGES模式。
如何验证?
你可以用以下方法确认权限情况:
- 切换到SQL Server服务账户的上下文(比如用
runas /user:本地账户名 cmd打开命令行),执行命令:whoami /priv,查看输出里是否有SeLockMemoryPrivilege,状态是否为Enabled。 - 查询动态管理视图
sys.dm_server_services,查看service_account对应的权限信息,或者结合sys.dm_os_process_memory里的locked_page_allocations_kb字段,确认是否真的在使用锁定内存页。
内容的提问来源于stack exchange,提问作者D.C.
相关产品推荐
相关产品推荐

