ubuntu-latest托管代理运行AddOrUpdateUserAzure@1失败,求Linux下SQL Server只读用户创建方案
你遇到的报错是因为AddOrUpdateUserAzure@1市场任务仅支持Windows代理运行,没有做Linux平台兼容,无法在ubuntu-latest托管代理上执行。
以下是可直接在Linux代理上落地的只读用户创建方案,使用SQL Server官方跨平台命令行工具sqlcmd实现:
实现步骤
1. 前置检查
- Azure SQL Server防火墙已允许Azure托管代理公网IP访问,也可在Pipeline中临时添加当前代理IP到白名单,执行完成后再移除避免暴露风险
- 数据库管理员账号、密码等敏感信息已存储在Pipeline保密变量或Azure密钥库中,禁止明文硬编码
2. 完整Pipeline任务配置
直接替换原有AddOrUpdateUserAzure@1任务即可:
# 第一步:在Ubuntu代理上安装sqlcmd工具 - task: Bash@3 displayName: 安装SQL Server命令行工具sqlcmd inputs: targetType: 'inline' script: | curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list sudo apt-get update sudo ACCEPT_EULA=Y apt-get install -y mssql-tools unixodbc-dev echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc source ~/.bashrc # 第二步:执行SQL创建只读用户 - task: Bash@3 displayName: 创建SQL Server只读用户 inputs: targetType: 'inline' script: | # 变量可替换为Pipeline自定义参数/变量 SQL_SERVER="${{ parameters.sql_server_name }}.database.windows.net" DB_NAME="${{ parameters.database_name }}" ADMIN_USER="${{ parameters.admin_username }}" ADMIN_PWD="${{ parameters.admin_password }}" TARGET_USER="${{ parameters.target_readonly_username }}" TARGET_PWD="${{ parameters.target_readonly_password }}" # 执行SQL逻辑 sqlcmd -S $SQL_SERVER -d $DB_NAME -U $ADMIN_USER -P $ADMIN_PWD -Q " -- 创建服务器登录名 IF NOT EXISTS (SELECT * FROM sys.sql_logins WHERE name = N'$TARGET_USER') CREATE LOGIN [$TARGET_USER] WITH PASSWORD = N'$TARGET_PWD', CHECK_POLICY = OFF; -- 创建对应数据库用户 IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'$TARGET_USER') CREATE USER [$TARGET_USER] FOR LOGIN [$TARGET_USER]; -- 授予只读权限 ALTER ROLE db_datareader ADD MEMBER [$TARGET_USER]; " -I
3. 注意事项
- 如果需使用Azure AD身份验证连接SQL Server,可替换
sqlcmd命令的认证参数为对应Azure AD配置即可 - 密码若包含单引号、$、&等特殊字符,需提前做转义处理避免SQL执行报错
内容的提问来源于stack exchange,提问作者Rajesh174u
相关产品推荐
相关产品推荐

