这些超级账号,曾经见过一篇文章,大概是超过90%的安全问题来自于内部,所以如何规范化才是重点。总有人说微软的产品如何不安全,Linux/Unix有多好,但即使美国国防部也做不到绝对安全。
另外在SQL Server中,默认会把Windows的本机管理员账号加进去。如果不管好SQL Server所在的服务器,没有sa照样可以自如操作,甚至把sa启用,也可以用其他账号模拟sa,另外sa只是个内置账号,完全可以创建sysadmin级别的账号来完成几乎所有操作。所以文中提到的保护方法很多是可以用在其他账号里面的,开发过程要注意。
对于开发过程中的思考,结合个人经历,有些工作的确要做到位:
1. 你是否启用了混合身份验证?虽然微软一直建议尽可能使用Windows身份验证,但是现实中很难做到,所以混合身份验证往往是必须开启的。这一步最好在安装SQL Server的时候就完成,并且不要让sa出现空密码。(最慢也在SQL Server 2008 的安装过程中拒绝使用简单密码作为sa密码了)
2. 开启混合身份验证之后,打好必要的补丁,创建开发和管理所需的SQL 身份验证账号。配置好适当的权限,这里要注意的一点,很多人虽然前面都做了,但是忽略了对账号的“默认数据库”选项做配置,如果你开了一个仅能访问某个用户库的账号,但又把默认数据库选项指到master库,一方面不安全,另外一方面可能出现登录失败的情况。默认情况下,master和tempdb是对任何账号都允许读的,但是其他库就不一样,如果你把某个账号的默认数据库指定到Msdb,但是这个账号没有对该库的任何权限,那么这个账号登录时就会出现登录失败的情况,也就是SQL Server错误日志中出现的“Login failed for user 'xx'. 原因: 无法打开在登录名属性中指定的数据库。”这种消息。这里根据个人经验,我建议对开发环境下,开发专用的账号直接指定到开发库。对于正式环境,大部分账号可以考虑直接指到tempdb,tempdb的作用估计大家都知道得七七八八了。所以就不累赘了。
3. 开发账号权限和密码可以适当低一点。但是sa账号,任何环境下仅只能少数人知道,并且禁用,作为备用就好。周期性修改密码是一个不错的选择。记住,不要以为内部人员就可以随意,对于正规公司,不管如何管理其他账号,都应该对sa做好管理,另外作为经验之谈,要在确保你最少有一个已知密码且还在启用的前提下才去对sa和Windows 的内置账号进行操作,否则很容易就出现SQL Server无法使用的情景,如果真出现所有账号都全被禁用或删掉的情况,可以尝试使用下面的方法,不保证万能,但是在没有办法的情况下是可以尝试的:
SQL Server 中 Windows账号被删的解决方法:
?
启用本地账户:
1.先看一下本机的账户是否具有管理员的权限,如果没有添加上。
2.在开始菜单的搜索框中输入 cmd , 右键单击选择以管理员身份运行
3.在命令提示符输入 NET STOP MSSQLSERVRE 停止MSSQLSERVER运行(若已经停止则可以不用此方法)
4.若3有问题,提示报错,则可以在开始 -->SQL SERVER --> 配置工具 -->SQL SERVER 服务 --> 打开SQL SERVER属性-->高级 --> 启动参数里面加上 -m
5.若以上均无问题,则切换到安装路径,即Binn下sqlservr.exe的路径如:cd C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn
6.执行 sqlservr.exe,即单用户模式进入了
7.再以管理员账户重新登陆开启一个窗口,输入SQLCMD -A
8.输入你要更改的操作命令即可,在此处我需要的是把本机账户添加 如:
USE master
GO
CREATE LOGIN [需要添加的账号,一般格式是 机器名\登录账号名] FROM WINDOWS WITH DEFAULT_DATABASE=[Master]
GO
EXEC sp_addsrvrolemember @loginame=N'机器名\登录账号名', @rolename=N'sysadmin'
GO
为了避免错误,可以再加一个SQL的账户以备不时之需, 也可以把sa命令启用
9.以上操作完成之后重新启动SQL SERVER服务登陆即可