sql-server - SQL Server Container Linux - 用户 'sa' 登录失败

标签 sql-server linux docker kubernetes containers

我正在尝试按照此处的教程进行操作:

https://learn.microsoft.com/en-us/sql/linux/tutorial-sql-server-containers-kubernetes?view=sql-server-linux-2017

按照教程中的指示,我创建了一个 kubernetes 集群并部署了一个 linux sql server 容器。

我创建了 secret ,如上面的链接所示,并且可以使用 **kubectl get secret ** 来解密和验证内容,如此处链接所示:https://kubernetes.io/docs/concepts/configuration/secret/

我使用持久卷和持久卷声明,并部署 sqldeployment.yaml,如上面的链接所示。

我使用 kubectl attach -i -t 附加到容器,我可以看到日志流。

当我尝试登录时,显示

**SQL Management Studio:** 
Login failed for user 'sa'. (Microsoft SQL Server, Error: 18456)

**kubectl attach output stream**
Error: 18456, Severity: 14, State: 8.
Login failed for user 'sa'. Reason: Password did not match that for the login provided.

我尝试了各种密码,包括上面微软教程链接中的密码。

问题: - 如何使用正确的密码设置 linux 容器,以便我可以按照上述 Microsoft 教程中的指示登录到 SQL Server? - 关于我可能做错了什么的任何指示?

最佳答案

答案是我使用 Kubernetes 持久卷来存储数据库文件。我可能通过将密码初始化一次到 master 数据库中而存储了错误的密码,其数据存储在持久卷中。

多次更改存储在 Kubernetes secret 中的密码并重新部署 sql server 服务后,我很困惑,密码没有重置,我仍然无法登录。一旦我删除了持久卷和持久卷声明,我就能够重置密码并正确地重新初始化它,因为 master 数据库已经有效地重新安装。

似乎一旦密码在启动时被初始化,它就会存储在持久卷上的 master 数据库中。因此,更改 Kubernetes secret - wbich 存储密码值以进行一次性初始化 - 没有任何效果。

上面的场景很容易理解,但也很容易混淆。

解决方案是删除持久卷 (pv) 和持久卷声明 (pvc),这有效地删除了数据文件,包括在服务器上配置密码的 master 数据库的数据文件。

关于sql-server - SQL Server Container Linux - 用户 'sa' 登录失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51332618/

相关文章:

docker - 如何在 “docker-compose”中进行 “docker machine”?

sql-server - 使用 INSERT 查询的结果更新

c - Windows 和 Linux 上的内存页面写入检测

symfony - Docker-nginx : host not found in upstream

mysql - Kubernetes:mysql pod 无法打开日志文件/var/log/pods/

linux - 用于查找和调整图像大小的 Shell 脚本

具有多个条件的 SQL 查询 group by

sql-server - 将平面文件导入 SQL Server 表时插入日期

sql-server - 为什么将列从 nvarchar 更改为 varchar 会导致 mdf 文件大幅增长?

c - 不使用 fopen() 和 fread() 读取 linux utmp 文件