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

Docker部署SQL Server容器SA登录失败及自定义用户需求

问题解决:SSMS连接Docker容器SQL Server失败及自定义用户配置

一、SSMS连接容器内SQL Server sa登录失败的排查与解决

本地SQL Server的sa密码和容器内实例完全独立,不会互相影响,无需怀疑该因素。以下是常见问题及解决步骤:

  • 检查端口映射配置
    确保docker-compose.yml中SQL Server的端口映射正确,避免和本地SQL Server默认的1433端口冲突。例如:

    ports:
      - "1401:1433"
    

    SSMS连接时,服务器名称需填写localhost,1401或你的本机IP,1401,而非默认的localhost(会指向本地SQL Server实例)。

  • 验证容器内sa密码正确性
    进入容器终端,用sqlcmd确认密码有效:

    docker exec -it 你的容器名 sqlcmd -S localhost -U sa -P 容器sa密码
    

    若能正常登录,需确保SSMS中输入的密码与该密码完全一致,注意大小写、特殊字符的输入准确性。

  • 确认sa账户状态
    在容器终端的sqlcmd中执行以下语句,检查sa账户是否启用:

    SELECT name, is_disabled FROM sys.server_principals WHERE name = 'sa';
    GO
    

    若is_disabled值为1,执行以下命令启用并重置密码:

    ALTER LOGIN sa ENABLE;
    GO
    ALTER LOGIN sa WITH PASSWORD = '你的容器sa密码';
    GO
    
  • 检查防火墙规则
    临时关闭Windows防火墙测试连接,若能成功,需在防火墙中添加允许映射端口(如1401)的入站规则。

二、在docker-compose.yml中创建自定义用户FithubDBUser

可以通过挂载初始化脚本的方式,在容器首次启动时自动创建用户并分配权限,步骤如下:

  1. 编写初始化脚本(init-db.sql)
    创建包含用户创建和权限分配的SQL脚本,示例如下:

    -- 创建服务器登录账户
    CREATE LOGIN FithubDBUser WITH PASSWORD = '你的自定义密码';
    GO
    -- 切换到目标数据库
    USE Fithub;
    GO
    -- 创建数据库用户
    CREATE USER FithubDBUser FOR LOGIN FithubDBUser;
    GO
    -- 分配Fithub数据库的最高权限(db_owner角色,等同于该数据库的sys权限)
    ALTER ROLE db_owner ADD MEMBER FithubDBUser;
    GO
    

    若需服务器级sysadmin权限(不推荐,除非必要),可添加:

    ALTER SERVER ROLE sysadmin ADD MEMBER FithubDBUser;
    GO
    
  2. 修改docker-compose.yml挂载脚本
    将脚本挂载到容器的初始化目录,配置示例:

    version: '3.8'
    services:
      sqlserver:
        image: mcr.microsoft.com/mssql/server:2017-latest
        environment:
          - ACCEPT_EULA=Y
          - SA_PASSWORD=你的容器sa密码
          - MSSQL_PID=Developer
        ports:
          - "1401:1433"
        volumes:
          - ./init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
          # 可选:添加数据卷持久化SQL Server数据
          - sqlserver-data:/var/opt/mssql
    volumes:
      sqlserver-data:
    

    注:/docker-entrypoint-initdb.d/目录下的SQL脚本会在容器首次启动时自动执行,确保主机上的init-db.sql与docker-compose.yml在同一目录。

内容的提问来源于stack exchange,提问作者GKhedekar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:12:37