【问题标题】:How can I securely provide SA password to SQLServer2017 linux Docker container?如何安全地向 SQLServer2017 linux Docker 容器提供 SA 密码?
【发布时间】:2019-09-17 14:44:26
【问题描述】:
Docker 的常见设置:两个 linux 容器,一个是使用 EntityFramework 的 .NET Core WebServer,另一个是 MS-SQLServer 2017。持久数据保存在 Docker 卷中。使用docker-compose,它不是一群。
启动 SQLServer 容器时,必须将 SA 密码作为环境变量提供给容器。无论您提供什么,以后都可以使用docker container inspect 从容器外部读取此环境。这显然会损害安全性。
这让我想到了两个问题:
有哪些更好的方法可以向 SQLServer 提供 SA 密码?
(在another thread 中讨论) Microsoft 帮助声明最好在启动容器后直接更改 SA 密码。当我在我的 WebServer 代码中执行此操作时,EntityFramework 已经与默认 SA 密码(我作为 env 提供的密码)连接。我可以轻松更改密码。但是我怎样才能告诉 EntityFramework 重置它的 ConnectionString 呢? (更多内容在链接线程中)
【问题讨论】:
标签:
sql-server
docker
docker-compose
【解决方案1】:
- 有什么更好的方法可以向 SQLServer 提供 SA 密码?
为此,您需要使用单容器群。完成此操作后,您可以使用 Docker Secrets 传递您的凭据。
- Microsoft 帮助声明最好在启动容器后直接更改 SA 密码。当我在我的 WebServer 中这样做时
代码,EntityFramework 已经与默认 SA 连接
密码(我作为 env 提供的那个)。我可以改密码
容易地。但是我怎么能告诉 EntityFramework 重置它
连接字符串?
单容器群自动解决了这个问题。每次更新 secret 时,docker 都会终止所有使用修改后的密钥的容器,并使用新的密钥重新初始化它们。此外,docker 会自动执行此操作。肯定会有停机时间,为了防止这种情况,您可以放置两个容器并启动一个rolling upgrade of your service。
编辑:使用 swarm 模式,您不必担心更改您的 docker-compose 文件,因为带有一些附加字段的相同文件可以用作您的 docker-stack 文件。