安全模式简介
从系统结构上来讲SQL Server有两种安全模式。
第一种是“仅Windows”模式,这种模式只允许拥有受信任的Windows NT账户的用户登录,是SQL Server默认的安全模式,也是较安全的选项,用户登录SQL Server的前提是该用户使用Windows NT的域账户登录Windows操作系统。
另一种是“SQL与Windows用户身份验证”模式,是在SQL Server中建立登录用户,所有基于Windows操作系统的用户只要使用这个SQL账户就可以实现标准的SQL登录。这种模式安全性相对而言较差一些,容易被恶意入侵者使用暴力破解sa账户,而且也容易遭受注入式攻击,但是管理简单,目前很有市场。
虽然第一种模式安全性高一些,但是什么事情都是相对的,因为使用Windows身份验证时,所有的用户信息和密码都存储在系统目录中的SAM文件中,只要搞到并破解了SAM文件,那么也就没有安全可言了。使用SQL身份验证时,所有的密码信息也会以某种方式存储在注册表和日志文件中。其实漏洞肯定是存在的,只是有没有被发现而已,应对这种无奈的现实,只能尽量打好补丁,提高警惕,减少出现已知漏洞的可能。
登录与用户的概念
很多人对SQL Server两种基本安全级别“登录”和“用户”的概念不够清晰,甚至把它们混为一谈。其实这是两个不同的概念。
登录是指允许用户访问服务器并拥有服务器级别权限的账户,属于系统级别,权限的大小取决于系统赋予该登录账户的权限级别,如sa账户,它是sysadmin级别,那么使用sa登录就可以取得数据库系统的最高权限。用户属于数据库级别,拥有对数据库及其单独对象的访问权限,可以精确到表、行、字段等。
在系统验证时,它们之间的根本区别在于,当Windows用户登录数据库服务器时,SQL Server验证的是登录,当用户登入数据库系统后,访问数据库及其对象时,SQL Server验证的是用户。登录账户可以没有具体的数据库对象访问权限,但是具备数据库访问权限的用户必定是使用登录账户登录的。
另外,SQL Server的安全性并不仅仅是SQL Server的问题,还需要联合Windows的安全性考虑,互相配合,才能使安全性发挥的最好。
为了减少权限管理的复杂度,笔者建议采用“仅Windows”安全模型,在Windows NT创建三个用户组,一组用于SQL管理员,一组具有读写数据库权限,第三组只有查询权限,再把相应的账号指派给对应组,然后在SQL Server中创建三个组,并指派给相应的NT组。