如何通过PowerShell创建可正常连接SQL Server的SQL登录账户
问题根因
- 执行顺序错误:原脚本先创建SQL身份验证登录,再修改SQL Server为混合身份验证模式、重启服务。Windows-only身份验证模式下创建SQL登录时,SQL Server不会正确处理密码配置,同时会默认禁用登录的连接权限。
Add-SqlLogin参数缺失:缺少-GrantConnectSql显式授权连接数据库引擎权限,缺少-MustChangePassword $false禁止强制首次登录修改密码,导致密码未按预期配置、连接权限被默认设为Deny。- 冗余操作:重复调用
Install-Module安装同一模块,无实际作用还会拖慢执行效率。
修复后的完整脚本
# 安装并导入SqlServer模块(仅首次运行需要,后续运行可注释) Install-Module -Name SqlServer -AllowClobber -Force Import-Module SqlServer $compName = $env:computername $instanceName = "SQLSERVER" $fullInstance = "$compName\$instanceName" $username = "user" $password = ConvertTo-SecureString "TestPassword123" -AsPlainText -Force $cred = New-Object System.Management.Automation.PSCredential ($username, $password) # 第一步:先修改为混合身份验证模式并重启服务生效 $sql = [Microsoft.SqlServer.Management.Smo.Server]::new($fullInstance) $sql.Settings.LoginMode = 'Mixed' $sql.Alter() Get-Service -Name "MSSQL`$$instanceName" | Restart-Service -Force # 第二步:服务重启后再创建SQL登录,显式指定所有必要参数 Add-SqlLogin -ServerInstance $fullInstance ` -LoginType "SqlLogin" ` -DefaultDatabase "master" ` -LoginPSCredential $cred ` -Enable ` -GrantConnectSql ` -MustChangePassword $false ` -PasswordPolicyEnforced $false
关键配置说明
-GrantConnectSql:显式授予登录的连接数据库引擎权限,避免权限被默认设为Deny-MustChangePassword $false:关闭首次登录强制修改密码的要求,确保配置的密码直接生效-PasswordPolicyEnforced $false:测试环境可选参数,跳过系统密码策略校验,生产环境建议删除该参数使用合规密码- 调整后的执行顺序:先改身份验证模式→重启生效→再创建SQL登录,确保SQL Server在支持SQL身份验证的状态下处理登录创建逻辑,所有配置都会正确写入。
注意事项
运行脚本前需要以管理员权限启动PowerShell,否则修改服务、SQL实例配置的操作会失败。
内容的提问来源于stack exchange,提问作者GreenSaber
相关产品推荐
相关产品推荐

