Docker 安装 sqlserver
官网地址 https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads
#创建主机映射目录
mkdir -p /docker_volume/sqlserver
#修改主机映射目录权限
chown -R 10001:0 /docker_volume/sqlserver
#否则会报以下错误
# /opt/mssql/bin/sqlservr: Error: Directory /var/opt/mssql/system/] could not be created. Errno [13]
docker run --name sql1 --hostname sql1 \
-e 'ACCEPT_EULA=Y' \
-e 'MSSQL_PID=<产品序列号>' \
-e 'SA_PASSWORD=<SA密码>' \
-v /docker_volume/sqlserver:/var/opt/mssql \
-p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2022-latest
#产品序列号
Enterprise:HMWJ3-KY3J2-NMVD7-KG4JR-X2G8G
Strandard:PMBDC-FXVM3-T777P-N4FY8-PKFF4
#连接到SqlServer
docker exec -it sql1 "bash"
#在容器内部使用 sqlcmd 进行本地连接。 默认情况下,sqlcmd 不在路径之中,因此需要指定完整路径。
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>"
#如果成功,应会显示 sqlcmd 命令提示符:1>
#在 sqlcmd 命令提示符中,粘贴以下 Transact-SQL 命令以创建测试数据库:
CREATE DATABASE TestDB GO
注释:如果遇到中文乱码???的问题,执行以下脚本更新排序为中文
ALTER DATABASE TestDB COLLATE Chinese_PRC_CI_AS GO
#查询以返回服务器上所有数据库的名称
SELECT Name from sys.Databases GO
参数 | 说明 |
---|---|
-e “ACCEPT_EULA=Y” | 将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。 |
-e “MSSQL_SA_PASSWORD=YourStrong@Passw0rd” | 指定至少包含 8 个字符且符合密码策略的强密码。 SQL Server 映像的必需设置。 |
-e “MSSQL_COLLATION=<*SQL_Server_collation*>” | 指定自定义 SQL Server 排序规则,而不使用默认值 SQL_Latin1_General_CP1_CI_AS 。 |
-p 1433:1433 | 将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。 在此示例中,SQL Server 侦听容器中的 TCP 1433,此容器端口随后会对主机上的 TCP 端口 1433 公开。 |
–name sql1 | 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。 |
–hostname sql1 | 用于显式设置容器主机名。 如果未指定主机名,则主机名默认为容器 ID,这是随机生成的系统 GUID。 |
-d | 在后台运行容器(守护程序)。 |
mcr.microsoft.com/mssql/server:2022-latest | SQL Server Linux 容器映像。 |
密码复杂性
https://learn.microsoft.com/zh-cn/sql/relational-databases/security/password-policy?view=sql-server-linux-ver16
密码复杂性策略通过增加可能密码的数量来阻止强力攻击。 实施密码复杂性策略时,新密码必须符合以下原则:
- 密码不得包含用户的帐户名。
- 密码长度至少为八个字符。
- 密码包含以下四类字符中的三类:
- 拉丁文大写字母 (A - Z)
- 拉丁文小写字母 (a - z)
- 10 位基本数字 (0-9)
- 非字母数字字符,如感叹号 (!)、美元符号 ($)、数字符号 (#) 或百分号 (%)。
密码可最长为 128 个字符。 使用的密码应尽可能长,尽可能复杂。