公司一套智能巡检系统,客户需要最小的权限去给这套系统使用;配置完后发现很多权限报错,有一条是关于xp_instance_regread读系统注册表error 5的报错。常理error 5.是属于系统权限问题,遂开始首先对需求注册表路径添加了everyone 的只读权限。如果能成功就不会写这个笔记了。
系统:windows2008R2
数据库: SQLServer2008R2
首先创建SQL账号:
其次赋予对xp_instance_regread权限
use master
go
grant exec on xp_instance_regread to monitor;
execute as user='monitor'
go
exec xp_instance_regread 'HKEY_LOCAL_MACHINE','HARDWARE\DESCRIPTION\System\CentralProcessor\0','ProcessorNameString';
报错如下图:
原因就是sql账号没权限读注册表。
下面是添加注册表:
打开服务器 运行 输入 regedit :依次找到HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server
然后展开分支:找到依MSSQL开头SQLSERVER结尾的那层目录,找到MSSQLServer目录展开
然后新建一个键值命名为:ExtendedProcedures
点击ExtendedProcedures,在右侧空白处新建Multi-String类型的命名为xp_regread allowed paths;
然后打开xp_regread allowed paths这个文件,添加你要用数据库账号读的注册表路径;
如下图:
添加你要读的注册表路径:
最后测试:
这只是一种方法,这中问题遇到的概率很少,添加sysadmin权限也可以,把sql账号换成域账号也可以,估计服务器账号不识别没有服务器权限的sql账号。