You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SQL跨订阅异地复制:获取SID正确值遇问题求助

问题解决:Azure SQL跨订阅异地复制中SID的PowerShell转换问题

问题根源

你的脚本存在两个关键问题:

  1. 笔误导致命令执行失败:第一个Invoke-Sqlcmd里用了$quer1,正确的变量名是$query1,这会直接导致创建登录名的命令不执行。
  2. SID转换逻辑错误:sys.sql_logins返回的sid是二进制字节数组,你直接遍历数组元素转十六进制的方式,会丢失两位补零的格式要求,最终生成的字符串不符合SQL的SID格式(需要0x开头,每个字节用两位十六进制表示)。

修正后的完整脚本

try {
    $server = "YourServerName"
    $database = "master"
    $username = "testadmin"
    $password = "testpassword"
    $query1 = "create login geodrsetup with password = 'ComplexPassword01';"
    $query2 = "create user geodrsetup for login geodrsetup;alter role dbmanager add member geodrsetup;"
    $query3 = "select sid from sys.sql_logins where name = 'geodrsetup';"

    # 修正笔误:$quer1改为$query1
    Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $query1 -Username $username -Password $password -Verbose
    Write-Host "Login Added Successfully"

    Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $query2 -Username $username -Password $password -Verbose
    Write-Host "User Added Successfully"

    $result = Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $query3 -Username $username -Password $password -Verbose -As DataTables
    Write-Host "Get SID value"

    # 获取二进制SID数组
    $sidBytes = $result[0].sid
    Write-Host "原始SID字节数组: $sidBytes" -ForegroundColor Green

    # 将字节数组转换为SQL格式的十六进制字符串(0x开头,每个字节两位十六进制)
    $hexString = "0x" + (-join ($sidBytes | ForEach-Object { "{0:X2}" -f $_ }))

    # 输出最终格式的SID
    Write-Output "格式化后的SID: $hexString"
}
catch {
    $_.Exception | Format-List -Force
}

关键修改说明

  • 修复笔误:把$quer1修正为$query1,确保创建登录名的命令正常执行。
  • 正确获取SID字节数组:通过$result[0].sid直接拿到第一条结果的二进制SID数组(因为查询只会返回一条记录)。
  • 标准化十六进制转换:用"{0:X2}"格式化每个字节,确保单个十六进制数(比如0xA)会补零变成0A,然后用-join拼接所有字节的十六进制字符串,最后加上0x前缀,得到SQL认可的SID格式。
  • 避免未初始化变量:直接初始化$hexString,防止出现空值拼接的问题。

内容的提问来源于stack exchange,提问作者santosh kumar patro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:17:09