我们的网络上有一些应用程序(在我之前),它们在其 SQL Server 连接字符串中使用 SA 帐户。它在源代码中是硬编码的,无论出于何种原因,我们都无法更改它——我的问题不是关于我们为什么要更改它,而是关于如何解决它。
我正在考虑将 SA 帐户重命名为其他名称(例如“SysAccount”或类似名称,并为其提供新密码),然后使用旧密码创建一个名为“SA”的新帐户并授予其适合应用程序的权限(显然不是系统管理员角色的成员)。这样做有什么陷阱吗?如果名为 SA 的帐户实际上不是系统管理员,SQL Server 是否会遇到已知问题?
我假设由于我只是重命名帐户,所以我很安全 - 它的 uid 仍然为 0x01,我已经对此进行了测试,它在物理上是可行的,并且在测试中似乎可以正常工作,但我想确保我不会忽视任何明显会因此而崩溃的东西。如果它破坏了东西,我总是可以删除新的 SA 并重命名旧的 SA 以消除损坏,但希望避免尝试和失败。
我正在使用 SQL Server 2012,但我怀疑相同的答案将适用于任何现代版本。我已经看到如果你这样做了,从 2005 到 2008 的升级可能会中断的错误,但我想这早就解决了。
它可以重命名。它通常被认为是安全性的最佳实践,但如果您不退回代理服务或更改工作所有者,可能会导致SQL 代理后果,而且我也可以找到有关它使Server 2008 升级失败的报告。
这足以让我不想费心重命名它。我说分配一个复杂的密码并禁用登录就足够了,而且它通常是一个更好的选择,因为它实际上关闭了漏洞,而不仅仅是混淆它。混淆给你带来的安全性非常低。以后,如果你真的需要一个 SQL 授权的 sysadmin,为它创建一个新帐户。这并不是特别困难。您具有与重命名相同的攻击面,而不必记住 SID 0x01 不再是 sa(即使它仍然是 sa)。而且,当然,由于 SID 从未真正改变过,因此不难找出哪个帐户是 SID 0x01(或 sysadmin 角色的成员,就此而言)。当然,如果可能的话,甚至不要使用混合模式。
是的,2005 年至 2008 年的问题已解决。现在可以禁用SA账号,可以重命名为SomethingElse,可以给它中文密码,也可以混搭。
请参阅:http ://www.mssqltips.com/sqlservertip/2221/different-ways-to-secure-the-sql-server-sa-login/
请注意,由于 SA 的 SID(无论您如何重命名)仍然存在,因此可以通过以下方式发现新名称:
当然,您当然无法摆脱内置的管理员登录。所以你只需要确定轻微的副作用是否对你来说是个问题。
我从不在我的工作中使用“SA”,而是使用我自己的具有系统管理员权限的特殊域帐户。
我能想到一件事可能会导致问题 -
IS_SRVROLEMEMBER('sysadmin')
检查帐户的应用程序调用是否是“系统管理员”固定服务器角色的成员?如果是这样,如果“sa”成为不同的帐户,这将不起作用。