关于通过SSMS创建服务器用户及RDP用户执行权限的技术问询
首先得明确:SSMS本质是SQL Server的专属管理工具,没法直接通过它的图形界面创建Windows服务器的本地/域用户——毕竟Windows用户是操作系统层面的对象,SSMS的核心职责是管理SQL Server实例和数据库相关对象。
不过如果你非要通过SSMS来实现这个操作,也不是不行:可以借助SQL Server的扩展存储过程xp_cmdshell来调用Windows的net user命令创建用户,但得满足两个前提:
- 运行SQL Server的服务账户得有创建Windows用户的权限(一般得是服务器本地管理员);
xp_cmdshell功能得先启用,它默认是禁用的,因为有安全风险。
net user命令报错及SQL Server用户权限配置 你碰到的“System error 5 has occurred. Access is denied”,本质是因为执行net user [username] [password] /add需要Windows本地管理员权限,而你通过SSMS执行这个命令时,背后实际执行的账户(要么是你用的Windows登录账户,要么是SQL Server的服务账户)没拿到足够的操作系统权限。
要让SQL Server用户能在SSMS里顺利执行这个命令,得按下面几步来配置:
1. 先启用xp_cmdshell(如果还没开)
要通过SSMS执行系统命令,得先打开这个扩展存储过程,在SSMS的查询窗口跑下面的SQL:
-- 开启高级选项 sp_configure 'show advanced options', 1; RECONFIGURE; -- 启用xp_cmdshell sp_configure 'xp_cmdshell', 1; RECONFIGURE;
⚠️ 提醒:xp_cmdshell存在安全风险,用完建议禁用,或者严格限制能使用它的用户范围。
2. 确保执行命令的账户有Windows管理员权限
分两种情况来看:
- 如果你用的是Windows身份验证登录SQL Server:那这个Windows账户必须是服务器本地管理员组的成员,这样执行
net user时才有权限创建用户; - 如果你用的是SQL Server身份验证:此时SQL Server会用它自身的服务账户来执行xp_cmdshell命令,所以得把这个服务账户加到服务器的本地管理员组里(注意:给服务账户过高权限会增加安全风险,建议只在必要时这么做,或者用专门的代理账户)。
3. 给SQL Server用户分配xp_cmdshell的执行权限
就算服务账户有权限,你的SQL登录名也得被明确授予使用xp_cmdshell的权限,执行下面的SQL:
-- 把权限授予你的SQL登录名 GRANT EXECUTE ON xp_cmdshell TO [你的SQL登录名];
额外:让创建的用户能远程桌面登录
等你成功创建Windows用户后,要让它能通过RDP登录服务器,还得把它加到Remote Desktop Users组里,同样可以通过SSMS执行命令:
EXEC xp_cmdshell 'net localgroup "Remote Desktop Users" [你的用户名] /add';
内容的提问来源于stack exchange,提问作者Yousef JO

