PowerShell中SQL连接串传加密密码及SYSTEM账户连SQL问题咨询
问题1:如何在PowerShell的SQL连接字符串中传递加密密码?
直接明文写密码存在严重安全风险,推荐以下加密方式传递密码:
使用
SecureString配合SqlCredential类实现安全连接:# 将密码转换为SecureString(建议从用户输入读取,避免硬编码) $securePassword = ConvertTo-SecureString "你的密码" -AsPlainText -Force $sqlCredential = New-Object System.Data.SqlClient.SqlCredential("用户名", $securePassword) # 创建SQL连接并关联Credential $connection = New-Object System.Data.SqlClient.SqlConnection $connection.ConnectionString = "Server=你的服务器名;Database=目标数据库名;" $connection.Credential = $sqlCredential # 执行连接操作 $connection.Open() # 后续数据库操作... $connection.Close()若需通过连接字符串传递,可使用加密的配置文件配合
ConfigurationManager读取,但仍优先推荐SqlCredential方案。
一、配置SYSTEM账户连接SQL Server的步骤
- 以具备SQL管理权限的账户(如sa或本地管理员)打开SSMS。
- 在「安全性」→「登录名」右键新建登录:
- 登录名输入
NT AUTHORITY\SYSTEM,身份验证选「Windows身份验证」。 - 切换到「用户映射」标签,勾选需访问的数据库,并分配对应角色权限(如
db_datareader、db_datawriter)。
- 登录名输入
- 重启SQL Server服务,确保权限生效。
二、解决psexec「访问被拒绝」报错的步骤
- 以管理员身份运行命令行:打开PowerShell或CMD时右键选择「以管理员身份运行」,psexec需要管理员权限执行。
- 解锁PSTools文件:若工具从网上下载,右键psexec.exe→「属性」,在「常规」标签底部勾选「解除锁定」(若有该选项),避免系统拦截。
- 指定SSMS完整路径:若SSMS不在系统PATH中,需填写全路径,例如:
psexec -i -s "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe" - 调整本地安全策略:
- 打开「本地安全策略」→「本地策略」→「用户权限分配」,确保「允许本地登录」权限包含
NT AUTHORITY\SYSTEM。 - 若UAC限制,可尝试添加
-h参数适配高权限:psexec -i -s -h ssms.exe
- 打开「本地安全策略」→「本地策略」→「用户权限分配」,确保「允许本地登录」权限包含
内容的提问来源于stack exchange,提问作者Prabhjot Singh
相关产品推荐
相关产品推荐

