如何在Docker容器中配置SQL Server用户密码并避免明文存储
将SQL Server密码移至.env文件避免明文存储
下面是具体的改造步骤,把所有明文密码替换为环境变量,并通过.env文件统一管理:
1. 创建.env配置文件
在项目根目录新建.env文件,把所有敏感密码集中存放:
SA_PASSWORD=MyFancyPassword123 MYAPP_LOGIN_PASSWORD=MyFancyPassword123
提示:务必把
.env添加到.gitignore中,防止敏感信息提交到代码仓库。
2. 修改Dockerfile
移除硬编码的密码,改为通过外部环境变量注入:
FROM mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04 ENV ACCEPT_EULA y COPY ./init.sql . COPY ./entrypoint.sh . EXPOSE 1433 CMD /bin/bash ./entrypoint.sh
3. 修改entrypoint.sh
使用环境变量替代明文密码,并将应用登录密码传递给SQL脚本:
#!/bin/bash # 用环境变量SA_PASSWORD替代明文,同时传递应用登录密码给SQL脚本 /opt/mssql-tools/bin/sqlcmd -S localhost -l 60 -U SA -P "$SA_PASSWORD" -i init.sql \ -v MYAPP_LOGIN_PASSWORD="$MYAPP_LOGIN_PASSWORD" & # 启动SQL Server服务 /opt/mssql/bin/sqlservr
4. 修改init.sql
使用sqlcmd变量创建登录账户,彻底消除明文密码:
CREATE DATABASE myapp; go USE myapp; go CREATE SCHEMA [enum] GO CREATE TABLE enum.attribute ( -- Primary Key ID_auto INT NOT NULL IDENTITY(1,1) PRIMARY KEY, -- System Information acronym VARCHAR(1700), summary VARCHAR(1700), comment VARCHAR(1700), -- Constraints & Foreign Keys CONSTRAINT DUPE_FILTER_enum_attribute_acronym UNIQUE(acronym), -- Local history columns modified_by VARCHAR(1700), modified_date DATETIME2, created_by VARCHAR(1700), created_date DATETIME2, ) GO -- 使用sqlcmd变量$(MYAPP_LOGIN_PASSWORD)替代明文密码 CREATE LOGIN myapp_login WITH PASSWORD='$(MYAPP_LOGIN_PASSWORD)', DEFAULT_DATABASE=myapp; go CREATE USER myapp FOR LOGIN myapp_login WITH DEFAULT_SCHEMA=dbo; go ALTER ROLE db_owner ADD MEMBER myapp; go
5. 修改docker-compose.yml
配置容器自动读取.env文件并注入环境变量:
services: mssql: build: . container_name: my-mssql-container ports: - "1433:1433" volumes: - ./init.sql:/init.sql - ./entrypoint.sh:/entrypoint.sh # 加载.env文件中的环境变量 env_file: - .env command: /bin/bash ./entrypoint.sh networks: - mssql-network networks: mssql-network: driver: bridge
内容的提问来源于stack exchange,提问作者Hibbert
相关产品推荐
相关产品推荐

