如何更改 SQL Server sa 密码作为 ec2 用户数据的一部分

如何更改 SQL Server sa 密码作为 ec2 用户数据的一部分

我正在配置一些运行 Windows Server 的开发 EC2 实例,其中安装了 SQL Server。我使用具有我们所需配置的自定义 Amazon Machine Image,但作为配置过程的一部分,我在每台机器上运行一个 userData 脚本,该脚本设置特定于该用户的一些值,包括某些应用程序的随机密码。脚本的一部分针对 SQL Server 执行此操作,如下所示这个例子

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" localhost
$user = $srv.Logins | where Name -eq "sa"
$user.ChangePassword("<injected by provisioning process>");
$user.PasswordPolicyEnforced = 1;
$user.Alter();
$user.Refresh();

奇怪的是,当我在机器启动后手动运行它时,有用。但是,当我将其作为用户数据的一部分时,它似乎没有任何效果——您无法使用新密码对数据库进行身份验证。我确信完整的用户数据脚本正在无错误地运行。此代码块之前和之后的其他组件均按预期工作。此外,我可以看到DateLastModifiedsa 用户的属性反映了脚本的运行时间。

为什么在用户数据脚本中运行和我在 powershell 中手动执行时的行为会有所不同?

(是的,我知道这不是一个好的做法。这些机器不用于生产:它们是临时启动的,有防火墙,只用于测试特定的工作流程)

答案1

好吧,事实证明这不是正确的方法,可能是因为我的 userData 脚本没有以管理员身份运行。相反,我发现这是成功的:

net stop mssqlserver
net start mssqlserver /m
SQLCMD -E -Q "ALTER LOGIN [sa] WITH DEFAULT_DATABASE=[master]; USE [master]; ALTER LOGIN [sa] WITH PASSWORD=N'<injected by provisioning process>'"
net stop mssqlserver
net start mssqlserver

相关内容